【问题标题】:Loop Through List and Run Report循环列表和运行报告
【发布时间】:2020-09-26 00:05:14
【问题描述】:

第一次发帖,我还远不是 VBA 专家,但多亏了像这样的板子,我设法在大部分路上跌跌撞撞地达到了我想要的结果。我希望自动化最后一步,并正在寻求帮助。

背景: 我每周一早上为我们的项目经理编写项目报告。报告模板查询我们数据库中的几个表并填充所有适当的字段。然后它会创建自己的副本,将公式保存为值,并使用命名机制从报告中的各个字段捕获数据来保存报告。所有这些都很棒!

问题: 在任何时候,我都有 80-100 个活跃的项目。就目前而言,我将项目列表复制到“参数”选项卡上的表中。然后,使用数据验证,我在“报告”选项卡上创建了一个下拉列表。然后,我手动逐个遍历列表以生成报告。每次我在单元格 B1 中更改项目编号时,数据都会刷新并运行该项目的报告。我正在使用此代码来完成此操作:

Private Sub Worksheet_Change(ByVal Target As Range)

'MsgBox Target.Address
If Not Application.Intersect(Range("b1"), Range(Target.Address)) Is Nothing Then
Call AA_RunAll
End If
End Sub

我想做的是创建一个宏,它将运行我列表中的每个项目并运行报告。我假设它是一个循环函数,但我似乎无法让它按我想要的方式工作。

另一个需要注意的注意事项:每份报告需要 3-5 分钟来刷新所有数据、生成报告并保存。我想将它设置为在我晚上离开之前运行并在早上完成。

提前致谢。

亚伦

【问题讨论】:

    标签: vba loops


    【解决方案1】:

    我想这可能就是你要找的。​​p>

    Dim DataValidationRange As Range
    Dim Str As String
    Str = Replace(Range("B1").Validation.Formula1, "=", "")
    Set DataValidationRange = Range(Str)
    Dim i
    For Each i In DataValidationRange
        Range("B1").Value = i
        Call AA_RunAll
    Next
    

    另外,如果您需要在调用 AA_RunAll 之前等待数据更新,您可以使用这个:

    Public Function MyTimer(MyDelay As Double)
        Dim MyTimerTimer As Double
        MyTimerTimer = Timer
        MyDelay = MyDelay + Timer
        
        Do While MyTimerTimer <= MyDelay
            MyTimerTimer = Timer
            DoEvents
        Loop
    End Function
    
    Private Sub GoThrough_Dropdown()
        Dim DataValidationRange As Range
        Dim Str As String
        Str = Replace(Range("B1").Validation.Formula1, "=", "")
        Set DataValidationRange = Range(Str)
        Dim i
        For Each i In DataValidationRange
            Range("B1").Value = i
            WaitForDataToUpdate
            Call AA_RunAll
        Next
    End Sub
    
    Private Sub WaitForDataToUpdate()
        Dim RangeToWaitFor As Range
        Set RangeToWaitFor = Range("H5")
        Dim Str As String
        Str = RangeToWaitFor.Value
        Do While Str = RangeToWaitFor.Value
            MyTimer 1
        Loop
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多