excel - 将数据从一个工作簿复制到另一个工作簿

标签 excel vba

我的要求是将多个工作簿中的前 2 张工作表复制到一个主工作簿中。我让它大部分时间都在工作。第一张纸被正确复制。在执行第二个时,我收到错误“应用程序定义或对象定义错误”。我无法找出究竟是什么问题。任何帮助将非常感激。这是复制的代码。以下代码之前的任何内容都涉及打开源文件夹、目标工作簿和设置

Set shtDest = ActiveWorkbook.Sheets(1)
Set shtDest2 = ActiveWorkbook.Sheets(2)

Filename = Dir(path & "\*.xlsx", vbNormal)

If Len(Filename) = 0 Then Exit Sub
Do Until Filename = vbNullString
    If Not Filename = ThisWB Then
        Set Wkb = Workbooks.Open(Filename:=path & "\" & Filename)
        Set CopyRng = Wkb.Sheets(1).Range(Cells(RowofCopySheet, 1), Cells(ActiveSheet.UsedRange.Rows.Count, ActiveSheet.UsedRange.Columns.Count))
        Set Dest = shtDest.Range("A" & shtDest.UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1)
        CopyRng.Copy Dest
        Set CopyRng2 = Wkb.Sheets(2).Range(Cells(RowofCopySheet, 1), Cells(ActiveSheet.UsedRange.Rows.Count, ActiveSheet.UsedRange.Columns.Count))
        Set Dest2 = shtDest2.Range("A" & shtDest.UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1)
        CopyRng2.Copy Dest2
        Wkb.Close False
    End If

    Filename = Dir()
Loop

第一组代码工作正常。我得到的错误是在 Set CopyRng2 上。我做错了什么或者我错过了什么?

提前致谢

最佳答案

原因很简单。 Cells对象不完全限定在
Set CopyRng2 = Wkb.Sheets(2).Range(Cells(RowofCopySheet, 1), Cells(ActiveSheet.UsedRange.Rows.Count, ActiveSheet.UsedRange.Columns.Count))
您的 Sheets(1)此时处于事件状态,因此 Cells对象是指Sheets(1)这也是 Activesheet
人们应该始终完全限定对象。试试这个代码

用这个替换那行(注意点?)

With Wkb.Sheets(2)
    Set CopyRng2 = .Range(.Cells(RowofCopySheet, 1), _
                          .Cells(.UsedRange.Rows.Count, _
                                 .UsedRange.Columns.Count) _
                          )
End With

同样为其他。

一个额外的注释。避免使用 UsedRange .尝试找到最后一行和最后一列,然后构建您的范围。您可能想查看 This

关于excel - 将数据从一个工作簿复制到另一个工作簿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30199478/

相关文章:

excel - XLSB 个人宏文件变量错误

excel - 修改后的 Excel "cell"上下文菜单在表格中不起作用

excel - 将 SSRS 报告导出到 Excel 时获得额外一行

excel - 从 Access 打开 Excel 工作簿宏

Excel-Vba 宏在 word 中复制表格会产生不同的格式结果

vba - 将最近的工作表更改捕获为变量

vba - 如何在VBA编辑器中跳转到行号?

arrays - VBA - 从现有数组有条件地填充数组

excel - 如何在 Excel 工作表中获取 Google 页面排名和搜索次数?

vba - 使用 VBA 的图片和图片方法和属性的文档