首页 > 解决方案 > 如何使用插件 excel 中的宏?

问题描述

我开始在 excel VBA 中编程,我想做的是:

1)当我打开一个新的excel文件(空)时,我导入了excel加载项

2)然后,我想使用在该加载项上实现的宏(在模块中)

3)该插件基本上将多个excel工作表(在指定路径中)组合成一个(我运行宏的那个) 注意:它在不用作插件时有效,即单独使用时

4)当我在一个空的 excel 文件中运行以下代码时,它不会将其他工作表放在那里。它只是打开它找到的第一个 excel 文件,然后什么也没有发生。

你知道我在做什么错误吗?感谢您的建议:)。

Sub GetSheets()

Path = "C:specified path\"
Filename = Dir(Path & "*.xlsx")

Do While Filename <> ""

    Workbooks.Open Filename:=Path & Filename, ReadOnly:=True

    For Each Sheet In ActiveWorkbook.Sheets
        Sheet.Copy After:=ThisWorkbook.Sheets(1)
    Next Sheet

    Workbooks(Filename).Close
    Filename = Dir()

Loop

End Sub

标签: excelvbavb.net

解决方案


如果您从插件启动代码,ThisWorkbook则指的是插件文件,但我想您想将第一个ActiveWorkbook作为目标的所有内容合并。

Sub GetSheets()
    Dim fPath As String, fName As String
    Dim destWB As Workbook, currentWB As Workbook
    Dim i As Long

    Set destWB = ActiveWorkbook
    fPath = "C:\specified path\"
    fName = Dir(fPath & "*.xlsx")
    Do While fName <> ""
        Set currentWB = Workbooks.Open(Filename:=fPath & fName, ReadOnly:=True)
        For i = 1 To currentWB.Sheets.Count
            currentWB.Sheets(i).Copy After:=destWB.Sheets(destWB.Sheets.Count)
        Next i
        currentWB.Close SaveChanges:=False
        fName = Dir()
    Loop
End Sub

我建议不要为变量使用内部名称,如“Sheet”或“Filename”,所以我更改了它们的名称。

如果您总是在第一张纸的后面复印,则印张顺序会更改。所以我把它改成在最后追加。

由于Sheets还包括图表表,它是比Worksheet这种情况更好的选择。要遍历它们,我建议使用计数器,因为没有Sheet对象。


推荐阅读