宏来运行变量列表

时间:2017-10-10 18:16:51

标签: excel-vba loops dynamic-list vba excel

我有一个运行一系列其他宏的宏。当我更改特定单元格的值(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

提前致谢

1 个答案:

答案 0 :(得分: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事件。