复制/粘贴为宏时运行代码,但另存为加载项时则不运行

时间:2019-05-31 22:49:38

标签: excel vba

正如标题所示,此代码在行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

1 个答案:

答案 0 :(得分:0)

正如@BruceWayne所建议的那样,确定正确的工作簿是一个问题。作为AddInThisWorkbook将成为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