循环列表和运行报告



第一次发帖,我远非VBA专家,但多亏了这样的董事会,我在很大程度上成功地实现了我想要的结果。我希望自动化最后一步,并寻求一些帮助。

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

问题:在任何时候,我都有80-100个活跃的项目。目前,我将项目列表复制到";参数";然后,使用数据验证,我在";报告";选项卡。然后我手动地按1比1浏览列表以生成报告。每次更改单元格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分钟才能刷新所有数据、生成报告并保存。我想将其设置为在晚上离开之前运行,并在早上完成。

提前谢谢。

Aaron

我想这可能就是您想要的。

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

最新更新