2017-07-27 143 views
1

是否可以在VBA中的按钮单击事件功能中处理按钮单击操作?我想遍历访问数据库表中的记录,找到相似的记录,向用户呈现两个相似的记录,然后让他们单击一个按钮来选择其中一个记录。在VBA中的不同按钮单击事件中使用按钮单击事件处理程序

考虑这个伪代码:

Sub Choose_Click() 
    For (loop through DB recordset) 
     Label1 = Record1 
     Label2 = Record2 
     Listen for button click 
     If (Click Button1) 
      Choose Record1 
      do something 
     ElseIf (Click Button2) 
      Choose Record2 
      do something 

回答

0

按钮下面是如何在函数中执行按钮单击事件的例子。
我使用全局变量解决了这个问题,正如@Rob Anthony的评论中所建议的那样。当宏运行时,它会等待全局变量值ButtonClicked发生变化,这表示单击了一个按钮(在我的情况下,已做出选择)。如果所有你想表明的是一个按钮(任何按钮)被点击,那么一个布尔值会更好,但是这个解决方案也表明哪个按钮被点击了。 ButtonClicked的值由分配给选择按钮的各个单击事件宏填充。

Option Explicit 

'Global Variable 
Public ButtonClicked As String 

Private Sub Choose_Button_Click() 
    ButtonClicked = "None" 

    Do Until ButtonClicked <> "None" 
     'Do Nothing but allow other Events - Wait until a selection button is clicked 
     DoEvents 
    Loop 

    MsgBox ButtonClicked & " Button Clicked!" 

End Sub 

Private Sub Select1_Button_Click() 
    ButtonClicked = "Select1" 
End Sub 

Private Sub Select2_Button_Click() 
    ButtonClicked = "Select2" 
End Sub 
1

我会用一个MsgBox。显示两条记录后,执行此操作。

Response = MsgBox("Process Record 1? No=Process Record 2",VbYesNo+vBDefaultButton1,vBQuestion,"Process records") 
If Response = vbYes Then 
    Do stuff here 
Else 
    Do stuff here 
End If 

或创建自己的对话框中做同样的事情,但与记录1和记录2

+0

这是一个很好的解决方法。在有20-30个选择的时候可能会有点烦人(很少见,但是会发生)。但如果这是唯一的方法。我一直在寻找,但似乎并没有可能将按钮单击以在函数期间填充变量。 – LazyBear

+0

另一种方法是创建两个全局变量来表明你在问这个问题并记录你在循环中的位置。启用两个按钮,然后有两个不同的例程,这些例程由按钮按下来触发,它们检查(并重置)全局变量并处理更改。然后您需要使用其中一个全局变量跳回到循环中继续。 –

+0

这是一个好主意。我会玩这个概念。我试图限制我的全局变量,但这似乎只是一个需要它的场合。 – LazyBear