首页 > 解决方案 > VBA 我可以计算我在脚本中调用函数的次数吗

问题描述

我正在尝试在 Excel 中构建一个动态进度条,而我目前这样做的方式是将一些步骤硬编码到我的脚本中作为“步骤总数”...... Application.StatusBar 代码使用除以该总数的计数器进行更新。

我想做的是通过提前搜索代码来识别“Call fnProgress”在子例程中出现的次数,让“TotalSteps”预填充 3(使用下面的示例)。

Public Sub Example()
    TotalSteps = 3     'Enter a value here equal to the number of times "Call fnProgress" appears below

    Call ABC
    Call fnProgress

    Call 123
    Call fnProgress

    Call DoReMi
    Call fnProgress
End Sub

我不认为这在 VBA 中是可能的,但我认为这里有人会知道如何做到这一点!或者也许有人可以为我的简单进度条提供更好的解决方案……对我来说,能够在实际代码中提前搜索也是一个有趣的问题,我想它在我的状态栏之外还有更多的应用。非常感谢!-朱莉娅:)

标签: vba

解决方案


这是可能的,但它并不漂亮。
在大多数情况下,我会考虑以下不良做法的解决方案。无论如何 - 就这样:

Sub Test()
    Dim StepCount As Integer
    Dim TotalSteps As Integer
    Steps = Array("Abc", "Def", "Ghi")
    TotalSteps = UBound(Steps) + 1
    For Each Step In Steps
        StepCount = StepCount + 1
        ActiveSheet.Evaluate Step & "()+0" '+0 is workaround to handle a bug in VBA. Without it, the method is called twice
        Progress StepCount, TotalSteps
    Next
End Sub

Sub Progress(StepCount As Integer, TotalSteps As Integer)
    Debug.Print StepCount & "(" & TotalSteps & ")"
End Sub

Sub Abc()
    Debug.Print "Abc"
End Sub

Sub Def()
    Debug.Print "def"
End Sub

Sub Ghi()
    Debug.Print "ghi"
End Sub

其基础是 Evaluate 函数,它允许您评估字符串中的表达式。Test 方法使用 Evaluate 调用 Steps 数组中的方法。


推荐阅读