使用repeat / loop缩短VBA代码

时间:2017-06-26 12:08:43

标签: vba excel-vba loops repeat

如何缩短此代码以重复任务,但占用的空间更少?此代码需要为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

1 个答案:

答案 0 :(得分:1)

在开始处理循环或缩短代码之前,您需要在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。阅读本文后,请尝试在代码中实施这些步骤。然后阅读更多内容再试一次。

学习正确的 VBA需要花费一点时间投入,但如果你能学习如何编写VBA ,你可以节省更多的时间,而不仅仅是一个小时(假设您使用Excel不仅仅是一个过程。)

祝你好运!