2017-10-10 70 views
0

我有一個運行一系列其他宏的宏。宏更改特定單元格(B1)的值時自動運行。該宏爲B1中指定的項目編號生成項目報告。我在任何時候都有大約75個活動項目。宏要運行的變量列表

我想要做的是將項目列表添加到工作簿並讓它通過每個值運行。值的值和數值每週都在變化,所以我不想將這些值硬編碼到宏中。我假設我會使用循環功能,但不確定如何去做。

我對當前宏代碼是:提前

Sub AA_RunAll() 

Application.ScreenUpdating = False 
ActiveWorkbook.RefreshAll 
DoEvents 
Call OpenFile 
Call Copy1 
Call DeleteRows1 
Call DeleteRows2 
Call DetailCopy 
Call RemoveEmptySheets 
Call SummarySheet 

Workbooks("Project WIP Template.xlsm").Worksheets("Summary").Activate 
Application.Goto Range("A1"), True 
Application.ScreenUpdating = True 
Application.DisplayAlerts = True 


Call SaveAs 

Workbooks("Project WIP V5.xlsm").Worksheets("Summary").Activate 
Range("b1").Select 

MsgBox "Report Complete" 

End Sub 

感謝

+0

這個問題不是很清楚。這些不同的宏('DetailCopy')如何得到你的問題所暗示的這些未指定的「值」?你似乎知道你需要某種循環。鑑於缺乏細節,很難說比這更多的東西。也許你需要重寫你的宏,以便它們獲取參數,然後在循環中調用宏,並逐個傳遞值。 –

+0

有幾個問題:項目列表取自哪些項目(產生此列表的項目),與此列表關聯的是什麼信息,項目列表中是否存在重複項目(版本控制等)以及循環的目的是什麼?具體來說,你有一個列表,你在循環它們,但是對於什麼結果/輸出(項目報告對你來說是個人的,而對我們而言是個人的)。 – Cyril

+0

項目列表當前存儲在單獨的工作簿中,但可以添加到現有工作簿中。項目列表中沒有重複的值。 就循環而言,這可能不是正確的功能,只是我的假設。實質上,現在我手動輸入項目編號爲B1。只要我按Enter鍵,它就會運行宏,生成我的項目報告,保存並關閉它,並將我帶回到可以輸入另一個項目編號的模板中。 – acoatta

回答

0

如果宏在每次您修改的Range("B1")值時間跑了,我想你是射擊的事件Worksheet_Change測試:

If Target.Address = "$B$1" Then 
    AA_RunAll '<-- call your macro 
End If 

如果是這樣的話,最簡單的方法你必須欺騙自己的設計是編寫項目號列表號碼在電子表格中的BER,說Project numbers,列A:

1 
2 
3 
... 

...然後遍歷這個列表替換電池B1的價值:

Sub allProjects() 
    For j = 1 To Sheets("Project numbers").Range("A1").End(xlDown).Row 
     Range("B1").Value = Sheets("Project numbers").Range("A" & j).Value 
     'the above set will call the worksheet change and run your macro for a given value 
    Next j 
End Sub 

我必須說,雖然,設計並不理想。我寧願讓您的宏需要一個參數:

Sub AA_RunAll(ByVal projectNumber As Integer) 
    'your code, pass the projectNumber to other submacros if needed 
End Sub 

...並以正確的數以編程方式調用,而不是欺騙Excel表單火Worksheet_Change事件的宏。

+0

Thanks @Matteo NNZ 你是對的。在單元更改時觸發宏的當前代碼使用Worksheet_Change事件。 我相對較新的編寫宏,我所做的大部分工作都是通過閱讀本論壇。你能否詳細說明參數建議? 謝謝 亞倫 – acoatta