Excel 性能更改选项按钮OLE单击VBA时对象背景颜色

Excel 性能更改选项按钮OLE单击VBA时对象背景颜色,excel,vba,Excel,Vba,我有一个Sub来更改组中OptionButton的背景色,当单击时,但是当切换颜色太慢时,我无法毫不延迟地流畅地完成这项工作。有更好的办法吗 有50个选项按钮,每个按钮都有唯一的标题 课程模块 Public WithEvents Opt As MSForms.OptionButton Private Sub Opt_Click() Application.ScreenUpdating = False Call toggleColor(Opt) Application.Scree

我有一个Sub来更改组中OptionButton的背景色,当单击时,但是当切换颜色太慢时,我无法毫不延迟地流畅地完成这项工作。有更好的办法吗

有50个选项按钮,每个按钮都有唯一的标题

课程模块

Public WithEvents Opt As MSForms.OptionButton

Private Sub Opt_Click()
  Application.ScreenUpdating = False
    Call toggleColor(Opt)
  Application.ScreenUpdating = True
End Sub

Sub toggleColor(opt As Object)    
    For Each ctl In Worksheets("controls").OLEObjects        
         If TypeName(ctl.Object) = "OptionButton" Then
            If ctl.Object.Caption <> optCaption.Caption Then
                ctl.Object.BackColor = &H80000011
            Else
                opt.BackColor = &H80000016
            End If
         End If            
    Next ctl        
End Sub
Public with events Opt As MSForms.option按钮
私有子选项单击()
Application.ScreenUpdating=False
呼叫切换颜色(Opt)
Application.ScreenUpdating=True
端接头
子切换颜色(选择为对象)
对于工作表(“控件”)中的每个ctl。对象
如果TypeName(ctl.Object)=“OptionButton”,则
如果是ctl.Object.Caption option.Caption,则
ctl.Object.BackColor=&h8000011
其他的
opt.BackColor=&H8000016
如果结束
如果结束
下一个ctl
端接头

似乎您只需要为两个选项设置颜色,而不是50-您只需要记住两次通话之间哪一个是奇数,重置该选项,然后为
opt
设置颜色

ToggleColor
insn不是特定于实例的(因为您要传入
opt
),因此可以在常规模块中重新处理,例如:

子切换颜色(选择为对象)
静态optPrev作为对象的先前选择(如果有)
如果不是optPrev,那就什么都不是了
optPrev.BackColor=&H8000011'先前的un标志
如果结束
opt.BackColor=&h8000016'标记单击的一个
设置optPrev=opt'记住它,以备下次使用
端接头

您有多少个控件和多少个选项按钮,以及标题是否唯一?Hello@TimWilliams 50 OptionButtons在组中,标题是唯一的似乎您只需要设置两个选项的颜色,而不是50-您只需要记住两次呼叫之间哪一个是奇数,重置该选项,然后设置
opt
的颜色
ToggleColor
不特定于实例(因为您正在传入
Opti
),所以它可能在常规模块中,但似乎无法正常工作,If语句从不为true您是否将
ToggleColor
放入常规模块并将其从类定义中删除?抱歉@Tim这是我的错,现在正在工作,只是前一个选项按钮闪烁一下。我的意思是,新的一个被标记,前一个闪烁一段时间<代码>屏幕更新标记应该会注意到这一点,我认为。。。我不太使用ActiveX控件,所以我没有太多的东西可以添加。