Excel 将范围作为变量从一张图纸插入到另一张图纸

Excel 将范围作为变量从一张图纸插入到另一张图纸,excel,vba,Excel,Vba,我现在正在寻找一个比我愿意管理的时间更长的解决方案,所以这是我的问题 我需要在第一列之后的另一个工作表中插入动态范围的列,这些列主要由两行组成。 我无法硬编码列,因此我创建了一个Application.InputBox,用户必须在其中选择范围,然后确认其选择。现在,如果我取范围,用rng.address做一个消息框,它会显示范围,例如a$B$ 现在,当我尝试插入范围时,根据我尝试的方式,我会得到各种各样的错误 我目前的做法如下: dim rng as Range retry:

我现在正在寻找一个比我愿意管理的时间更长的解决方案,所以这是我的问题

我需要在第一列之后的另一个工作表中插入动态范围的列,这些列主要由两行组成。 我无法硬编码列,因此我创建了一个Application.InputBox,用户必须在其中选择范围,然后确认其选择。现在,如果我取范围,用rng.address做一个消息框,它会显示范围,例如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)
我试着选择fist,然后复制,但没有效果(


如何使用存储在变量中的范围在另一个工作表中插入范围?很抱歉,如果我的代码片段不好,我在工作中尝试了更多的东西,但家里没有所有东西。

假设我们有两个工作表,Sheet1(复制源)和Sheet2(粘贴目标)。 我们知道数据从哪里开始(wsSource上的A1),但数据可以有4列,也可以有40列(与行相同)

当您想要查找特定范围内的最后一行或最后一列时,我们使用CurrentRegion.Rows/Columns.Count,它将以long形式返回最后一行/列

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

以下内容将复制用户选择的范围,然后通过将所有其他内容向右移动,将其插入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

您在哪里遇到了什么错误?什么是
模板旧版
?请提供源数据和输出要求的示例。您的工作表是变量吗?如果不是,您需要引号“模板旧版”。此外,请解释您的陈述,“我不能硬编码列”,根据您的语句,最后一列作为变量应该可以工作。您的语句“动态列范围,主要是在第一列之后的另一个工作表中的两行”需要更具体。我上传了源和目标外观的图片:。对于动态列,我的意思是下次运行脚本时,可能需要在左侧图片/templateold中插入更多的蓝色列。templateold是源的工作表名称的变量,templatenew是不带蓝色,但我需要插入它的位置。稍后,我需要将蓝色列中的旧表中的X与新表匹配,因为A列中的某些单元格可能已更改,或者其中的某个位置添加了一些god。行不一定是必需的。我认为,甚至可以说需要插入多少行就足够了,因为d列总是从B开始。我不需要找到最后一列,用户必须输入列数或范围。我在上面的评论中上传了我的位置图片。@TylerxYMx