我开始用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
答案 0 :(得分:0)
如果您从Addin启动代码,则ThisWorkbook
会引用Addin文件,但是我想您想将第一个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
对象。