【问题标题】:Dynamically Copy Range of Cells from Closed Workbook?从关闭的工作簿中动态复制单元格范围?
【发布时间】:2019-05-28 19:31:52
【问题描述】:

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

我正在尝试从“异常”工作表中的文件“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

我得到的错误是运行时错误“1004”:接口未注册

【问题讨论】:

  • 这可能是一个参考错误,但您可能需要单独澄清...End(xlDown)范围的范围:wbImport.Worksheets("Exception").Range("F2",wbImport.Worksheets("Exception").Range("F2").end(xldown)).Copy

标签: excel vba


【解决方案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

【讨论】:

  • 我使用了这段代码,它没有问题。但是,我想为另一张工作表重复这组确切的命令,但它不起作用。这些值将在一瞬间复制并消失。我需要从提供的代码中删除/更改什么才能用于在不同的工作表上执行相同的操作?
  • @Wayne_Chen 将 Set wsActive = ThisWorkbook.ActiveSheet 更改为 Set wsActive = ThisWorkbook.Sheets("Another Sheet Name"),查看更新后的代码。
【解决方案2】:

根据我的经验,复制动态范围的最有效方法是将变量创建为整数,然后将要复制的最后一个单元格的行(或列,如果需要选择一行数据点。我通常用这样的东西来完成它:

Dim R as Integer
With ThisWorkbook.Worksheets
   R = .Cells(.Rows.Count, 1).End(xlUp).Row
End With

然后,您可以为某个范围内的行号插入“R”,以使其在每次运行宏时都是动态的。例如:.Range("A1:A" & R).Copy 将复制 A 列中使用的范围。这也使得引用循环的最后一行变得非常容易,并且在整个代码中持续如此。希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多