【问题标题】:Macro to Run Through List of Variables运行变量列表的宏
【发布时间】:2017-10-10 18:16:51
【问题描述】:

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

提前致谢

【问题讨论】:

  • 这个问题不是很清楚。这些各种宏(DetailCopy 等)应该如何获得您的问题所暗示的这些未指定的“值”?你似乎知道你需要某种循环。鉴于缺乏细节,很难说更多。也许你需要重写你的宏,让它们接受参数,然后在循环中调用宏,将值一个一个地传递给它们。
  • 几个问题:项目列表来自哪里(生成此列表的原因),与此列表相关联的信息是什么,项目列表中是否有重复项(版本控制等),以及什么是循环的意图吗?具体来说,您有一个列表,您正在循环访问它们,但结果/输出是什么(项目报告是您个人的,而不是我们的)?
  • 项目列表当前存储在单独的工作簿中,但可以添加到现有工作簿中。项目列表没有重复值。就循环而言,这可能不是正确的功能,只是我的假设。本质上,现在我手动输入项目编号是 B1。当我按下回车键时,它会运行宏,生成我的项目报告,保存并关闭它,然后让我回到可以输入另一个项目编号的模板。
  • 我想让它遵循完全相同的过程,但它不是我手动将项目输入 B1,而是让它在项目列表中运行。

标签: excel loops dynamic-list vba


【解决方案1】:

如果每次修改 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 事件。

【讨论】:

  • 谢谢@Matteo NNZ 你是对的。当前在单元格更改时触发宏的代码正在使用 Worksheet_Change 事件。我对编写宏比较陌生,我所做的大部分工作都是通过阅读这个论坛。你能详细说明一下参数推荐吗?谢谢亚伦
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2011-10-30
  • 2017-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多