正如标题所示,此代码在行Sheet.Copy After:=ThisWorkbook.Sheets(1)
上失败,运行时错误为1004
为什么将其添加为模块但不保存为加载项时会运行?
代码如下:
Dim FolderPath As String
Dim Filename As String
Dim Sheet As Worksheet
Application.ScreenUpdating = False
FolderPath = GetFolder() & "\"
Filename = Dir(FolderPath & "*.xls*")
Do While Filename <> ""
Workbooks.Open Filename:=FolderPath & Filename, ReadOnly:=True
For Each Sheet In ActiveWorkbook.Sheets
Sheet.Copy After:=ThisWorkbook.Sheets(1)
Next Sheet
Workbooks(Filename).Close
Filename = Dir()
Loop
Application.ScreenUpdating = True
End Sub
答案 0 :(得分:0)
正如@BruceWayne所建议的那样,确定正确的工作簿是一个问题。作为AddIn
,ThisWorkbook
将成为AddIn
工作簿,而ActiveWorkbook
(在打开其他人之前)将成为您运行AddIn
的工作簿。
在您的方案中仅用Thisworkbook
替换ActiveWorkbook
是行不通的,因为您只需将工作表从新打开的工作簿复制到同一工作表即可。
声明变量以保存此信息是一个好主意,然后可以从所需位置打开任意数量的工作簿。
参见下文:
Application.ScreenUpdating = False
Dim wbDst As Workbook: Set wbDst = ActiveWorkbook 'Can also use Worbooks("book name here")
Dim wbSrc As Workbook
Dim Sht As Worksheet
Dim FolderPath As String: FolderPath = GetFolder() & "\"
Dim FileName As String: FileName = Dir(FolderPath & "*.xls*")
Do While FileName <> ""
Set wbSrc = Workbooks.Open(FileName:=FolderPath & FileName, ReadOnly:=True)
For Each Sht In wbSrc.Worksheets
Sht.Copy After:=wbDst.Sheets(1)
Next Sht
wbSrc.Close
FileName = Dir()
Loop
Application.ScreenUpdating = True