如何缩短此代码以重复任务,但占用的空间更少?此代码需要为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
答案 0 :(得分:1)
在开始处理循环或缩短代码之前,您需要在VBA中避免Select
和Activate
。您的代码以当前形式难以阅读或改进,因为您使用了大量隐式关系。
例如:
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'无疑会遇到问题。不是一本开放的工作簿。这个例子并不意味着解决你的问题,只是指向正确的方向。
一旦您重构代码以消除Activate
,Select
和隐式(非限定)引用的使用,您就可以开始使用字符串变量。像这样的东西是有效的代码:
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不仅仅是一个过程。)
祝你好运!