无法解决选中和取消选中复选框的问题

时间:2011-11-25 05:05:42

标签: vb.net vba

基本上我是一个vba程序员,我遇到了VBA的复选框控件的严重问题。我必须根据用户选择选择和取消选中复选框。我相信这也是vb.net的一般性问题。

一些示例代码

 sub chk3_Click()

  if userform.chk3.value = true then
     userform.chk4.value = true
     userform.chk2.value = true
  end if

 end sub

 sub chk4_click()

  if userform.chk4.value = true then
     userform.chk3.value=true
     userform.chk1.value=true 
  end if

 end sub    

这是示例代码,我必须根据用户对复选框的选择打开其他复选框。但我面临的问题是它何时执行语句

userform.chk4.value = true in the sub chk3_click 

它正在调用sub chk4_click sub并再次找到

userform.chk3.value=true in sub chk4_click(), invoking the sub chk3_click 

我无法理解如何解决它。

我已经尝试了各种事件mousedown,mouseup和值更改后也没有工作。这些事件正在崩溃工具我不明白为什么但他们崩溃所以我只是忽略使用这些事件。

最后,我使用了一个在工作簿中全局定义的标志,并使用if条件我已经做了但是它看起来很糟糕的编码风格。任何人都可以帮我这些吗?

这是我为解决问题所做的工作。它有效,但我不认为它的编程风格很好。

 dim i as integer

sub ch3_click()

  if i = 0 then
     i = 1
     if userform.chk3.value=true then
        userform.chk4.value =true
        userform.chk2.value=true
     end if
     i = 0
  end if

end sub

sub chk4_click

  if i = 0 then
     i = 1
   if userform.chk4.value = true then
      userform.chk3.value=true
      userform.chk1.value=true
   end if
     i = 0
  end if

end sub

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

这实际上是解决问题的一种非常有效的方法,您只需要为i提供更具描述性的名称和类型,例如

Dim InClickEvent As Boolean

然后将点击事件代码更改为:

  if Not InClickEvent then
     InClickEvent = True
     if userform.chk3.value=true then
        userform.chk4.value =true
        userform.chk2.value=true
     end if
     InClickEvent = False
  end if

更好的是,如果您的VBA版本支持Try / Finally,我相信它确实如此,即使您在以下版本的代码中出现错误,也可以确保标记始终被清除:

  if Not InClickEvent then
     Try
        InClickEvent = True
        if userform.chk3.value=true then
           userform.chk4.value =true
           userform.chk2.value=true
        end if
     Finally
        InClickEvent = False
     End Try
  end if

答案 1 :(得分:0)

查看Application.EnableEvents

 sub chk3_Click()
  Application.EnableEvents =false
  if userform.chk3.value = true then
     userform.chk4.value = true
     userform.chk2.value = true
  end if
  Application.EnableEvents =true
 end sub

 sub chk4_click()
  Application.EnableEvents =false
  if userform.chk4.value = true then
     userform.chk3.value=true
     userform.chk1.value=true 
  end if
  Application.EnableEvents =true
 end sub