复制/粘贴包含单元格引用的数据(VBA)

复制/粘贴包含单元格引用的数据(VBA),vba,excel,copy-paste,Vba,Excel,Copy Paste,我正在尝试将数据从一个文件复制到另一个文件。首先,我希望找到源文件中的最后一行/列,并使用该信息复制数据。但是,我似乎无法使用对所使用的最后一行和列的引用来复制/粘贴代码。以下是我目前拥有的: Dim G7_Tab_Name As String G7_Tab_Name = "G7" Dim wkbDest As Workbook Set wkbDest = ActiveWorkbook Dim SheetToCopy As Worksheet LastInputRow = wkbS

我正在尝试将数据从一个文件复制到另一个文件。首先,我希望找到源文件中的最后一行/列,并使用该信息复制数据。但是,我似乎无法使用对所使用的最后一行和列的引用来复制/粘贴代码。以下是我目前拥有的:

Dim G7_Tab_Name As String
   G7_Tab_Name = "G7"
Dim wkbDest As Workbook
   Set wkbDest = ActiveWorkbook
Dim SheetToCopy As Worksheet

LastInputRow = wkbSource.Sheets(1).Cells(Cells.Rows.Count, "A").End(xlUp).Row
LastInputColumn = wkbSource.Sheets(1).Cells(1, Columns.Count).End(xlToLeft).Column
Set SheetToCopy = wkbSource.Sheets(1)
CopyRange = Range(SheetToCopy.Cells(LastInputRow, 1), SheetToCopy.Cells(1, LastInputColumn))

'Check if any existing data
If Len(wkbDest.Sheets(G7_Tab_Name).Range("A1").Value) > 0 Then
    wkbDest.Sheets(G7_Tab_Name).UsedRange.ClearContents
    CopyRange.Copy _
    Destination:=Range(wkbDest.Sheets(G7_Tab_Name).Cells(LastInputRow, 1), Cells(1, LastInputColumn))
    Else
       CopyRange.Copy _
       Destination:=Range(wkbDest.Sheets(G7_Tab_Name).Cells(LastInputRow, 1), Cells(1, LastInputColumn))
End If
我很确定我没有在CopyRange定义中捕获正确的范围,但我不知道为什么。在这种情况下,
lastRow=27
lastColumn=13
。因此,我认为范围将定义为
“A1:M27”


我之所以这样定义这些范围,是因为我需要在多个文件中循环,并从每个文件的第一个工作表中复制数据。当您使用
单元格()
范围()
列()
行()
,等等时,此代码将包含在一个较大的For循环中,以命中每个文件(一旦我可以将其复制/粘贴!)

, 否则,它将使用ActiveSheet,这可能会导致错误。你在某些地方这样做了,但在其他地方没有。下面我混合使用了
语句 让那些名字很长的床单更容易使用。通读下面的内容,看看你是否能看到我所做的。如果你有任何问题,请告诉我

Sub t()

Dim G7_Tab_Name As String
G7_Tab_Name = "G7"
Dim wkbDest As Workbook
Set wkbDest = ActiveWorkbook
Dim SheetToCopy As Worksheet
Set SheetToCopy = wkbSource.Sheets(1)

With sheetToCopy
    LastInputRow = .Cells(.Cells.Rows.Count, "A").End(xlUp).Row
    LastInputColumn = .Cells(1, .Columns.Count).End(xlToLeft).Column
End With

CopyRange = SheetToCopy.Range(SheetToCopy.Cells(LastInputRow, 1), SheetToCopy.Cells(1, LastInputColumn))

'Check if any existing data
Dim destWS  As Worksheet
If Len(wkbDest.Sheets(G7_Tab_Name).Range("A1").Value) > 0 Then
    wkbDest.Sheets(G7_Tab_Name).UsedRange.ClearContents
    Set destWS = wkbDest.Sheets(G7_Tab_Name)
    CopyRange.Copy Destination:=destWS.Range(destWS.Cells(LastInputRow, 1), destWS.Cells(1, LastInputColumn))
Else
    CopyRange.Copy Destination:=destWS.Range(destWS.Cells(LastInputRow, 1), destWS.Cells(1, LastInputColumn))
End If

End Sub
你在某些地方这样做,但不是在任何地方。即:
LastInputRow=wkbSource.Sheets(1).单元格(Cells.Rows.Count,“A”).结束(xlUp).行

您正确地告诉了第一个
Cells()
要使用的工作表,但VBA没有“记住”任何内容,因此下一个
Cells.Rows.Count
将位于活动工作表上,而活动工作表不一定是您的
wkbSource.Sheets(1)
工作表。将该行更改为

LastInputRow=wkbSource.Sheets(1).Cells(wkbSource.Sheets(1).Cells.Rows.Count,“A”).End(xlUp).Row

(注意:这可能无法解决您的问题,但它绝对有助于收紧代码并为更少的错误留出空间)

编辑:尝试用以下内容替换您的
CopyRange

With sheetToCopy
copyRange = .Range(.Cells(1, 1), .Cells(LastInputRow, LastInputColumn))
End With
这将使范围从A1到最后一列的最后一行

编辑2:从您发布的代码中不清楚您是如何声明
CopyRange
,但您应该这样做:

Dim CopyRange as Range
Set CopyRange = .Range(.Cells(1, 1), .Cells(LastInputRow, LastInputColumn))

简要说明:您没有给出最终目的地范围的表。它只是
范围(wkbDest.Sheets()…
。与
单元格()
列相同。计数
。使用。放置工作表(以及工作簿,如果需要)否则,对于多个书籍/工作表,VBA可能会混淆。我不知道你的意思。当我说
wkbDest.sheets(G7_选项卡名称)
时,我不是为我的最终目标范围指定了工作表吗。当我说
wkbSource.sheets(1)时,
列的情况也一样
?谢谢你的建议。我已经更新了我的代码以匹配你的代码。但是,正如你所说的,问题仍然存在。我很有信心这与我如何在我的
CopyRange
定义和目标行中使用
LastInputRow
LastInputColumn
有关。@kschindl-你能扩展一下吗再多发布一点?假设a列的最后一行是1000,最后一列是Z-您希望
CopyRange
是(就像您现在的代码一样)比如说
A1000:Z1
?你可能会倒过来。试着在我的编辑中使用这一行。是的,这是我的期望。问题是没有复制/粘贴发生。我输入了一个
CopyRange。选择
line查看正在使用的范围,但我看到在我遍历代码时没有选择任何范围。@kschindl-你不能确实要这样做,因为
CopyRange
变量中已经有了工作表。只需使用
CopyRange。选择
。您不能执行类似
Sheets(“Sheet1”).Sheets(“Sheet1”).Range(“A1:A10”)
的操作,这就是调用
SheettoCopy.CopyRange
试图执行的操作(这有意义吗?)哈哈,这就是我跳到一半所得到的。别理我。听蝙蝠侠的。