【发布时间】:2017-12-20 06:05:08
【问题描述】:
我不太擅长 VBA(我的典型用例是录制宏,清理和修改 VBA,而不是从头开始创建任何东西)。在使用 Kutools 整合它们之前,我正在尝试精简约 300 个 excel 工作簿。
我想出了一些 vba 来去除这些工作簿中一些不必要的部分,以实现我的整合。此代码在任何工作簿上单独运行时都可以正常工作:
Sub PrepWorkbook()
Dim Sh As Worksheet
For Each Sh In ThisWorkbook.Worksheets
If Sh.Visible = True Then
Sh.Activate
Sh.Cells.Copy
Sh.Range("A1").PasteSpecial Paste:=xlValues
Sh.Range("A1").Select
End If
Next Sh
Application.CutCopyMode = False
Dim ws As Worksheet
For Each ws In Worksheets
ws.Cells.Validation.Delete
Next ws
Application.DisplayAlerts=FALSE
Sheets("Instructions").Delete
Sheets("Dropdowns").Delete
Sheets("Dropdowns2").Delete
Sheets("Range Reference").Delete
Sheets("All Fields").Delete
Sheets("ExistingData").Delete
Application.DisplayAlerts=TRUE
End Sub
我在 stackoverflow 上发现了一段出色的代码,它跨多个工作簿运行预定任务,我尝试根据我的目的进行调整:
Sub ProcessFiles()
Dim Filename, Pathname As String
Dim wb As Workbook
Pathname = ActiveWorkbook.Path & "\Files\"
Filename = Dir(Pathname & "*.xls")
Do While Filename <> ""
Set wb = Workbooks.Open(Pathname & Filename)
DoWork wb
wb.Close SaveChanges:=True
Filename = Dir()
Loop
End Sub
Sub DoWork(wb As Workbook)
With wb
'Do your work here
.Worksheets(1).Range("A1").Value = "Hello World!"
End With
End Sub
原帖可以在这里找到: Run same excel macro on multiple excel files
我尝试将我的代码插入到原始 vba 中的“'Do your work here”和“.Worksheets(1).Range("A1").Value = "Hello World!"" 行中,但是没有成功。我也尝试过类似地将我的解析代码插入到其他一些解决方案中,以在多个 Excel 工作簿中执行宏但没有成功。
它调用的工作簿正在打开和保存,但我的代码试图完成的实际工作没有发生(没有记录错误)。我怀疑我插入的一段代码不兼容,这对于比我知识渊博的人来说是非常明显的。
谁能在这里提供一些帮助/指导?我真的只需要关于如何在“C:\Temp\Workbooks”中找到的 300 个工作簿上执行我原来的“PrepWorkbook”VBA 的代码或指导
【问题讨论】: