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

前もって感謝します

4

1 に答える 1

0

の値を変更するたびにマクロが実行される場合、次のイベントをテストしRange("B1")ていると思います。Worksheet_Change

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

その場合、独自の設計をだます最も簡単な方法は、プロジェクト番号のリストをスプレッドシートに書き込むことです。たとえば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イベントを発生させる代わりに、プログラムで正しい番号を使用してマクロを呼び出します。

于 2017-10-10T19:45:14.417 に答える