【发布时间】:2019-09-23 15:01:49
【问题描述】:
我目前在我的桌面上有一个名为 Files 的文件夹,其中包含多个彼此相似的工作簿,例如:
- 工作簿1
- 工作簿2
- 工作簿3
- 工作簿4
- 工作簿5
这些工作簿中的每一个都包含一个名为“仪表板”的工作表,它们彼此相同,但它们为不同的人提供不同的数据。
我想做的是:
- 运行一个宏,将所有名为“仪表板”的工作表导入到我现在打开的新工作簿中。
- 以导入的文件命名每个导入的工作表。
我对此进行了研究,尽管已经提供了许多解决方案,但我发现最接近我需要的代码是:
Sub MergeWorkbooks()
Dim xStrPath As String
Dim xStrFName As String
Dim xWS As Worksheet
Dim xMWS As Worksheet
Dim xTWB As Workbook
Dim xStrAWBName As String
On Error Resume Next
xStrPath = "C:\Users\Me\Desktop\Files"
xStrFName = Dir(xStrPath & "*.xlsx")
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set xTWB = ThisWorkbook
Do While Len(xStrFName) > 0
Workbooks.Open Filename:=xStrPath & xStrFName, ReadOnly:=True
xStrAWBName = ActiveWorkbook.Name
For Each xWS In ActiveWorkbook.Sheets
xWS.Copy After:=xTWB.Sheets(xTWB.Sheets.Count)
Set xMWS = xTWB.Sheets(xTWB.Sheets.Count)
xMWS.Name = xStrAWBName & "(" & xMWS.Name & ")"
Next xWS
Workbooks(xStrAWBName).Close
xStrFName = Dir()
Loop
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
当我尝试运行它时,没有遇到任何错误,也没有任何反应。有谁知道为什么会这样?
提前致谢
【问题讨论】:
-
On Error Resume Next告诉 VBA 忽略任何错误并继续进行,因此在运行代码时没有看到任何错误也就不足为奇了。注释掉那一行,然后看看你的代码运行时会发生什么。如果您遇到错误,请编辑您的问题以添加错误消息并注意单击“调试”时突出显示的行 -
感谢您的评论,虽然我是 VBA 新手,但我应该了解这一点,我按照您的建议做了并注释掉了该行,然后我重新测试了它,仍然没有错误,也没有发生任何事情。然后我引入了一些错误以确保编译器正常工作并且它们立即标记出来。
-
试试
xStrPath = "C:\Users\Me\Desktop\Files\"(添加最后的反斜杠) -
哇,非常感谢,这似乎让它工作了,当其他人查看时真的很有帮助。但是,这确实会导入所有工作表,您知道我如何修改它以仅从每个名为“仪表板”的工作簿中导入工作表
-
虽然这不是您要求的,但您可以查看
#PowerQuery,它可以将来自保存在同一文件夹中的不同工作簿的同一工作表中的数据合并。如果你有兴趣,你可以谷歌一些教程,如果还有问题,你可以在这里寻求帮助。
标签: excel vba excel-formula