从封闭工作簿中动态复制单元格范围?

时间:2019-05-28 19:31:52

标签: excel vba

我想在没有静态行集合的封闭笔记本中复制一系列单元格。我想将其复制到活动的工作簿中。

我正在尝试从“例外”工作表中动态复制文件“ 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':接口未注册

2 个答案:

答案 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中使用的范围。这也使得引用循环的最后一行非常容易,并且在整个代码中连续不断。希望这会有所帮助!