我现在正在寻找比我愿意管理的解决方案更长的时间,所以这是我的问题。
我需要在第一列之后的另一张工作表中插入一个动态范围的列,该列包含2行的大部分内容。 我无法对列进行硬编码,因此我创建了一个Application.InputBox,用户必须在其中选择范围,然后确认选择。现在,如果我接受范围并使用rng.address制作一个味精盒,它将显示范围e.G. A $ B $。
现在,当我尝试插入范围时,根据我的尝试方式,我会遇到各种错误。
我当前的方法如下:
dim rng as Range
retry:
Set rng = Application.InputBox("Do that and that", "Obtain Range Object", Type:=8)
If MsgBox("Your choice " & rng.Address & " ?", vbYesNo, "Confirm") = vbYes Then
GoTo continue:
Else
GoTo retry:
End If
continue:
'#1) i tried this:
Worksheets(templateold).Range(rng).Insert Shift:=xlToRight Worksheets(templatenew).Range(rng)
'#2) and i tried that:
Worksheets(templateold).Range(rng).Copy Worksheets(templatenew).Range(rng)
我尝试过选择拳头然后进行复制,但没有任何效果。 :(
如何使用变量中存储的范围将范围插入另一张纸中?抱歉,如果我的代码段不正确,我在工作中尝试了更多操作,但家里什么都没有。
答案 0 :(得分:1)
以下内容将复制用户选择的范围,然后通过将其他所有内容向右移动将其插入到B列的另一张纸中:
Sub foo()
Application.ScreenUpdating = False
Dim templateold As Worksheet: Set templateold = ThisWorkbook.Worksheets("Sheet1")
Dim templatenew As Worksheet: Set templatenew = ThisWorkbook.Worksheets("Sheet2")
'declare and set the worksheets you are working with, amend as required.
Dim rng As Range
retry:
Set rng = Application.InputBox("Do that and that", "Obtain Range Object", Type:=8)
If MsgBox("Your choice " & rng.Address & " ?", vbYesNo, "Confirm") = vbYes Then
rng.Copy
templateold.Range("B:B").Insert Shift:=xlToRight
Else
GoTo retry:
End If
Application.ScreenUpdating = True
End Sub
答案 1 :(得分:0)
假设我们有两个工作表,Sheet1(复制源)和Sheet2(粘贴目标)。 我们知道数据从哪里开始(在wsSource上为A1),但是数据可以有4列,也可以有40列(与行相同)。
当您要查找特定范围内的最后一行或最后一列时,我们使用CurrentRegion.Rows / Columns.Count,它将以长整数形式返回最后一行/列。
Sub DuplicateRange()
Dim wsSource As Worksheet, wsTarget As Worksheet
Dim lRow As Long, lCol As Long
Set wsSource = ThisWorkbook.Sheets("Sheet1")
Set wsTarget = ThisWorkbook.Sheets("Sheet2")
' We know A1 is the starting (top-left) cell. _
using CurrentRegion.Rows/Columns.Count we can _
find the range of data without hardcoding the columns
lRow = wsSource.Range("A1").CurrentRegion.Rows.Count
lCol = wsSource.Range("A1").CurrentRegion.Columns.Count
' Range(A1:lCol,lRow)
With wsSource.Range(Cells(1, 1), Cells(lRow, lCol))
.Copy wsTarget.Cells(1, 1)
End With
End Sub