我的要求是将多个工作簿中的前 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/