我有一组ListBoxes
,它从包含宏的其余部分生成的报告中提取数据。这些ListBoxes
显示在彼此相邻的UserForm
中,以将它们的数据进行比较,并允许用户在匹配时删除数据(参见图片)。不幸的是,当我按下右侧列表的删除按钮(BWListBox
)时,整个列表将被删除,而不是仅删除一个项目。
我怀疑这是由于ListBox
的动态特性(如果生成银行电汇报告,列表仍为单选和单列;如果生成信用卡报告,则会更改为多选和双列,以及将“总计”TextBox
标记为可见,就像左侧一样)
当我运行信用卡报告,并使用标记列表(当它是多选)时,删除按钮工作正常。奇怪的是,在单选表单中,它会删除整个列表。
以下是删除按钮的代码块:
Private Sub RemoveButton2_Click()
Dim bwTotal As Double
'If CCReport Then `Currently not functioning due to testing
'bwTotal = BWTotalTextBox.Value 'Throwing error - Double to String ""
'End If
For lItem = BWListBox.ListCount - 1 To 0 Step -1
If BWListBox.Selected(lItem) Then
'GPListBox.RemoveItem GPListBox.ListIndex
BWListBox.RemoveItem lItem
If CCReport Then 'if CCReport since it will be multi-select and multi-column
bwTotal = bwTotal - BWListBox.List(lItem, 1)
BWTotalTextBox.Value = Format(bwTotal, "$#,##0.00")
End If
End If
Next
End Sub
这是BWListBox_Change事件:
Private Sub BWListBox_Change()
If CCReport Then 'This only exists for the sole purpose of the BWTotalTextbox, if it's not visible (Such as during a Bank Wire Report), there is no need
Dim bwTotal As Double
For lItem = 0 To BWListBox.ListCount - 1
If BWListBox.Selected(lItem) = True Then
bwTotal = bwTotal + BWListBox.List(lItem, 1)
Debug.Print BWListBox.List(lItem, 1)
End If
Next
BWTotalTextBox.Value = Format(bwTotal, "$#,##0.00")
End If
End Sub
编辑:我最近发现如果在按下删除按钮之前选择了最后一项,它只会删除整个列表。
答案 0 :(得分:2)
在单选的情况下,循环继续运行,因为当您删除底部的一个项目时,上面的直接项目将被选中并且循环得到验证。
因此,您需要做的就是在删除所选元素后跳出循环。
For lItem = Me.ListBox1.ListCount - 1 To 0 Step -1
If ListBox1.Selected(lItem) Then
ListBox1.RemoveItem lItem
If Me.ListBox1.MultiSelect = fmMultiSelectSingle Then
Exit For
End If
End If
Next