2017-06-26 111 views
0

如何縮短此代碼以重複執行任務,但佔用的空間更少?此代碼需要運行多達27個用戶。我知道我是一個總的小白現在,但是這將減輕我的工作量超過每天一個多小時......用重複/循環縮短VBA代碼


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

您應該添加一些信息,簡要描述您的代碼的目的(和/或添加一些註釋)。另外,我不清楚,你的意思是「縮短」。是否有多個文件,需要通過代碼運行?如果是的話,是否有某種命名結構? – Noceo

+1

https://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros –

+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的不僅僅是一個處理)。

祝你好運!

+0

很酷,這已經給我一些工作。很好,謝謝! –

+0

不要忘記標記爲已回答的問題。我很高興我可以幫助:)。 –