用 repeat/loop 缩短 VBA 代码

Shorten VBA code with repeat/loop

如何缩短此代码以重复任务,但花费更少 space?此代码需要 运行 来支持 27 个以上的用户。我知道我现在完全是个菜鸟,但这可以减轻我每天一个多小时的工作量...


Workbooks.Open ("https://blabla/Edgars/2017 Q3Q4/Edgars.xlsx")
Workbooks("Edgars.xlsx").Activate

Range("C24:AN27").Select
Selection.Copy
Workbooks("abc.xlsx").Activate
Sheets("Edgars").Activate
Range("C24:AN27").Select
ActiveSheet.Paste
Workbooks("Edgars.xlsx").Activate
Sheets("Edgars").Activate
Range("C33:AN36").Select
Selection.Copy
Workbooks("abc.xlsx").Activate
Sheets("Edgars").Activate
Range("C33:AN36").Select
ActiveSheet.Paste
Workbooks("Edgars.xlsx").Activate
Sheets("Edgars").Activate
Range("C42:AN45").Select
Selection.Copy
Workbooks("abc.xlsx").Activate
Sheets("Edgars").Activate
Range("C42:AN45").Select
ActiveSheet.Paste

Workbooks("Edgars.xlsx").Activate
Sheets("Edgars").Select
ActiveWindow.SelectedSheets.Delete
Workbooks("abc.xlsx").Activate
Sheets("Edgars").Select
Sheets("Edgars").Copy Before:=Workbooks("Edgars.xlsx"). _
    Sheets(1)
Workbooks("Edgars.xlsx").Activate
Range("A1").Select
ActiveWorkbook.SaveAs Filename:="https://blabla/Edgars/2017 Q3Q4/Edgars.xlsx"
ActiveWorkbook.Close
Workbooks("abc.xlsx").Activate
Worksheets("TOOLS").Activate

Application.DisplayAlerts = True
Else
End If

在开始处理循环或缩短代码之前,您需要复习一下避免 VBA 中的 SelectActivate。您当前形式的代码难以阅读或改进,因为您使用了很多隐式关系。

例如:

Workbooks("Edgars.xlsx").Activate
Sheets("Edgars").Activate

实际上是:

Application.Workbooks("Edgars.xlsx").Activate
ActiveWorkbook.Sheets("Edgars").Activate

并可改为:

Application.Workbooks("Edgars.xlsx").Worksheets("Edgars").Activate

当然,这并不能消除 Activate 问题,如果 'Edgars.xlsx' 不是打开的工作簿,您无疑会遇到问题。这个例子并不是为了解决你的问题,它只是为了给你指出正确的方向。

重构代码以消除对 ActivateSelect 和隐式(非限定)引用的使用后,您就可以开始使用字符串变量了。像这样的是有效代码:

Dim UserName as String
UserName = "Edgars"
Application.Workbooks(UserName & ".xlsx").Worksheets(UserName).Activate

这使您的代码具有更大的灵活性,并使您更进一步。

我的建议是从这里开始:How to avoid using Select in Excel VBA macros。阅读此 post 后,尝试在您的代码中实现这些步骤。然后再读一些再试。

学习 proper VBA 需要一点时间投入,但如果你能学习如何编码 VBA 很好 你可以为自己节省更多的时间而不是一个小时(假设你使用 Excel 不止一个过程)。

祝你好运!