首页 > 解决方案 > 在 VBA MsgBox 中循环

问题描述

我有一些后端代码根据前端用户可编辑工作表(“iButtons”)的内容生成 MsgBox。下面的代码运行良好且非常快,但我意识到随着“iButtons”工作表的增长,我将需要随着时间的推移不必要地管理此代码。

我可以轻松地将其写入一个循环,以快速扫描 iButtons 工作表以查找工作表上所有包含内容的行(直到到达空行)?考虑到需要运行的代码量,循环是否足够快以在后台被动运行,或者 MsgBox 弹出窗口的响应是否会过慢?

Public Sub iButtons(ByVal Target As Range)

'Pulls content from the iButtons sheet
     If (ActiveSheet.Name = Worksheets("iButtons").Range("A4")) And Not Intersect(Target, Target.Parent.Range(Worksheets("iButtons").Range("B4"))) Is Nothing Then
        MsgBox Worksheets("iButtons").Range("D4"), vbInformation, Worksheets("iButtons").Range("C4")
        ActiveSheet.Range("A1").Select
    End If

     If (ActiveSheet.Name = Worksheets("iButtons").Range("A5")) And Not Intersect(Target, Target.Parent.Range(Worksheets("iButtons").Range("B5"))) Is Nothing Then
        MsgBox Worksheets("iButtons").Range("D5"), vbInformation, Worksheets("iButtons").Range("C5")
        ActiveSheet.Range("A1").Select
    End If

     If (ActiveSheet.Name = Worksheets("iButtons").Range("A6")) And Not Intersect(Target, Target.Parent.Range(Worksheets("iButtons").Range("B6"))) Is Nothing Then
        MsgBox Worksheets("iButtons").Range("D6"), vbInformation, Worksheets("iButtons").Range("C6")
        ActiveSheet.Range("A1").Select
    End If

End Sub

谢谢!

标签: excelvbaloopsmsgbox

解决方案


一种程序化的方法可能是(对不起,我的 VB 今天有点生疏了,所以只是一般性的描述):

制作一个关于每个按钮的全局信息数组,并使用每个按钮的信息初始化数组(这些信息似乎是标准的,因此您可以使用用户定义的数组Type)。

对于从工作表中添加或删除的每个按钮,仅更新此数组。

有一个处理所有按钮的程序。它有一个循环,从数组的第一个条目(按钮)到数组中的最后一个按钮,并执行通用处理。


推荐阅读