我想在没有静态行集合的封闭笔记本中复制一系列单元格。我想将其复制到活动的工作簿中。
我正在尝试从“例外”工作表中动态复制文件“ test.xlsx”中F列下的所有条目。如果我改用静态引用,则宏运行没有问题。这是我正在运行的代码,它给我复制数据的行带来了运行时错误。
Sub GetClassID()
Dim App As New Excel.Application
Dim wsActive As Worksheet
Set wsActive = ThisWorkbook.ActiveSheet
Dim wbImport As Workbook
Set wbImport = App.Workbooks.Open(Filename:="C:\Test.xlsx",
UpdateLinks:=True, ReadOnly:=True)
wbImport.Worksheets("Exception").Range("F2",Range("F2").end(xldown)).Copy
wsActive.Range("A2").PasteSpecial Paste:=xlPasteFormats
wsActive.Range("A2").PasteSpecial Paste:=xlPasteValues
App.CutCopyMode = False
wbImport.Close SaveChanges:=False
App.Quit
End Sub
我得到的错误是运行时erorr'1004':接口未注册
答案 0 :(得分:1)
假设您在Excel VBA中运行此程序?您无需以Excel.Application
的形式打开另一个工作簿,只需将其中的app
移开即可正常打开工作簿:
Sub GetClassID()
Dim wsActive As Worksheet
Set wsActive = ThisWorkbook.Sheets("Another Sheet Name")
Dim wbImport As Workbook
Set wbImport = Workbooks.Open(Filename:="C:\Test.xlsx", UpdateLinks:=True, ReadOnly:=True)
With wbImport.Worksheets("Exception")
.Range("F2", .Range("F2").End(xlDown)).Copy
End With
wsActive.Range("A2").PasteSpecial Paste:=xlPasteFormats
wsActive.Range("A2").PasteSpecial Paste:=xlPasteValues
App.CutCopyMode = False
wbImport.Close SaveChanges:=False
App.Quit
End Sub
答案 1 :(得分:1)
根据我的经验,复制动态范围的最有效方法是将变量创建为整数,然后将要复制的最后一个单元格的行分配给该行(如果需要选择某行的数据,则为列点。通常,我可以通过以下方式完成此操作:
Dim R as Integer
With ThisWorkbook.Worksheets
R = .Cells(.Rows.Count, 1).End(xlUp).Row
End With
然后,您可以在范围内的行号中插入“ R”,以使其在每次运行宏时都具有动态性。例如:.Range("A1:A" & R).Copy
将复制列A中使用的范围。这也使得引用循环的最后一行非常容易,并且在整个代码中连续不断。希望这会有所帮助!