我创建的UserForm
有两个ListBoxes
,其中一个来自dictionary
,其中包含公司报告中的多余项目,另一个来自dictionary
包含银行报告中的多余项目。第一个ListBox
是fmMultiSelectMulti
,允许用户选择多个项目以获取所选项目的总和(这会更改TextBox
的值)。
我的问题是,当我选择ListBox
中的第一项时,ListBox_Change()
事件会触发两次。 sum变量是公共的,因为它在其他方法中被引用,但在双重激发时,它使实际值加倍。
以下是更改事件的代码:
Private Sub GPListBox_Change()
For lItem = 0 To GPListBox.ListCount - 1
If GPListBox.Selected(lItem) = True Then
gpTotal = gpTotal + GPListBox.List(lItem, 1)
Debug.Print GPListBox.List(lItem, 1)
End If
Next
GPTotalTextBox.Value = Format(gpTotal, "$#,##0.00")
End Sub
删除(多个)所选变量的另一种方法,并引用sum变量:
Private Sub RemoveButton1_Click()
For lItem = GPListBox.ListCount - 1 To 0 Step -1
If GPListBox.Selected(lItem) Then
gpTotal = gpTotal - GPListBox.List(lItem, 1)
'GPListBox.RemoveItem GPListBox.ListIndex
GPListBox.RemoveItem lItem
GPTotalTextBox.Value = gpTotal
End If
Next
End Sub
这是我选择第一个项目后的UserForm,它自动取消选择并留下总和:
我的问题:每次第一次选择时,如何防止双击?
答案 0 :(得分:2)
我过去曾经这样做过。这样的事情。
在代码顶部使用全局布尔值。首先是潜艇和功能。
Dim bFire as Boolean
默认情况下,布尔值为false,因此您必须将boolean设置为在您之外的某个位置,例如表单UserForm_Initialize
事件或其他内容。如果您没有这样做的地方,请切换潜艇中的真/假用法(Benno Grimm在下面的评论中详细阐述)。
Private Sub UserForm_Initialize()
bFire = True
End Sub
然后在sub。中使用boolean。
Private Sub GPListBox_Change()
'Check the status and get out if you have set it to not fire.
If bFire = false then
Exit Sub
End If
For lItem = 0 To GPListBox.ListCount - 1
If GPListBox.Selected(lItem) = True Then
gpTotal = gpTotal + GPListBox.List(lItem, 1)
Debug.Print GPListBox.List(lItem, 1)
End If
Next
GPTotalTextBox.Value = Format(gpTotal, "$#,##0.00")
End Sub
在修改它的按钮中,在开始时设置布尔值false,在结束时设置为true。
Private Sub RemoveButton1_Click()
'Set it false
bFire = false
For lItem = GPListBox.ListCount - 1 To 0 Step -1
If GPListBox.Selected(lItem) Then
gpTotal = gpTotal - GPListBox.List(lItem, 1)
'GPListBox.RemoveItem GPListBox.ListIndex
GPListBox.RemoveItem lItem
GPTotalTextBox.Value = gpTotal
End If
Next
'After you have modified the control set it to true
bFire = True
End Sub