VBA如何在使用许多整数时避免递归

Posted

技术标签:

【中文标题】VBA如何在使用许多整数时避免递归【英文标题】:VBA How to avoid recusrion when using many integers 【发布时间】:2018-05-30 07:04:10 【问题描述】:

我试图弄清楚如何避免在我运行代码时出现多个 msgbox:

Public Function IsItGood(aWord As Variant) As Boolean
Dim s As String
s = "|"
tmp = s & aWord & s
patern = ""

For i = 1 To 100
    patern = patern & s & i
Next i
For i = 1 To 10
    patern = patern & s & "C" & i
Next i
patern = patern & s & "merge|complete framed|width|border left|border right" & s

If InStr(1, patern, tmp) > 0 Then
    IsItGood = True
Else
    IsItGood = False
End If

End Function

上面是下面worksheet_change中使用的函数:

Sub Worksheet_Change(ByVal Target As Range)
Dim BigS As String
Dim arr As Variant
Dim a As Variant
If Intersect(Range("G3:G19"), Target) Is Nothing Then Exit Sub
arr = Split(Target, " ")

    If IsItGood(a) Then
    MsgBox (" In row" + Target.Address(0, 0)) & vbCrLf & a & vbCrLf + "are ok"
    Else
        MsgBox Target.Address(0, 0) & vbCrLf & a & vbCrLf & "has bad stuff"
        Application.Undo
    End If

End Sub

第一个“for”循环 100 个整数,第二个循环从 C1 到 C10,并且每个拆分的字符串都重复 msgbox。有没有办法防止多个 msgbox 一次只出现一个 msgbox。由于递归,还会出现“堆栈空间不足”错误。

【问题讨论】:

【参考方案1】:

在开头设置:Application.EnableEvents = False,最后设置为True。发生递归,因为你在工作簿的更改事件上调用宏,它也产生了这个事件,因此方法是在调用自己,因此是递归。

【讨论】:

以上是关于VBA如何在使用许多整数时避免递归的主要内容,如果未能解决你的问题,请参考以下文章

如何避免在递归中使用全局/类级别变量?

执行VBA代码时工作表抖动的厉害如何避免

如何避免 Access VBA 中出现“您必须输入值”错误消息

MS Project VBA - 当过滤器不返回任何内容时如何避免错误

如何使用 VBA 以编程方式添加引用

如何使用 VBA 执行插入/更新记录的存储过程?