如何保留多选列表框中的复选框选择?
How to retain the checkbox selections in a MultiSelection Listbox?
我有一个带有选项样式的多选列表框(左侧的复选框)。
我有以下代码将所选数据传输到工作表(这必须是动态的,因为列表框本身由动态命名范围提供)。
Private Sub cmdRun_Click()
Dim i As Integer
i = 0
Do While i < lstProperties.ListCount + 1
If lstProperties.Selected(i) = True Then
Sheet7.Cells(i + 1, 1) = lstProperties.List(i)
End If
i = i + 1
Loop
End Sub
它似乎想要工作,但我认为当我 运行 命令时,它在第一个循环后取消选择列表框数据,因此只调换列表框中的第一个选择。
您需要一个单独的行引用变量,以便您可以仅在选择列表框中的项目时递增它...
Private Sub cmdRun_Click()
Dim Rw As Integer
Dim i As Integer
Sheet7.Columns(1).ClearContents
Rw = 1
i = 0
Do While i < lstProperties.ListCount
If lstProperties.Selected(i) = True Then
Sheet7.Cells(Rw, 1) = lstProperties.List(i)
Rw = Rw + 1
End If
i = i + 1
Loop
End Sub
我知道这是一个旧线程,但这是我能找到的唯一一个主题,而且从未解决过。
我的用户窗体遇到了完全相同的问题(只有列表中第一个选定的项目返回到工作表,因为它似乎在循环遍历其余项目之前取消选择了列表框数据),但是在阅读了这篇文章之后线程我能够想出一个解决方案。
问题是 RowSource 是一个动态命名范围(“FilterData”),当第一个选定的项目返回到工作表时,它会触发工作簿重新计算所有公式,包括动态命名范围的公式,从而刷新列表框 RowSource 并在它有机会循环遍历所有选定项目之前清除它们。
解决方案是在执行 Do While Loop 语句之前关闭自动公式计算(然后再将其重新打开...非常重要),如下所示:
Application.Calculation = xlCalculateManual
Do While i < lstProperties.ListCount
If lstProperties.Selected(i) = True Then
Sheet7.Cells(Rw, 1) = lstProperties.List(i)
Rw = Rw + 1
End If
i = i + 1
Loop
Application.Calculation = xlCalculateAutomatic
希望这对寻找相同问题解决方案的其他人有所帮助。
干杯!
我有一个带有选项样式的多选列表框(左侧的复选框)。
我有以下代码将所选数据传输到工作表(这必须是动态的,因为列表框本身由动态命名范围提供)。
Private Sub cmdRun_Click()
Dim i As Integer
i = 0
Do While i < lstProperties.ListCount + 1
If lstProperties.Selected(i) = True Then
Sheet7.Cells(i + 1, 1) = lstProperties.List(i)
End If
i = i + 1
Loop
End Sub
它似乎想要工作,但我认为当我 运行 命令时,它在第一个循环后取消选择列表框数据,因此只调换列表框中的第一个选择。
您需要一个单独的行引用变量,以便您可以仅在选择列表框中的项目时递增它...
Private Sub cmdRun_Click()
Dim Rw As Integer
Dim i As Integer
Sheet7.Columns(1).ClearContents
Rw = 1
i = 0
Do While i < lstProperties.ListCount
If lstProperties.Selected(i) = True Then
Sheet7.Cells(Rw, 1) = lstProperties.List(i)
Rw = Rw + 1
End If
i = i + 1
Loop
End Sub
我知道这是一个旧线程,但这是我能找到的唯一一个主题,而且从未解决过。
我的用户窗体遇到了完全相同的问题(只有列表中第一个选定的项目返回到工作表,因为它似乎在循环遍历其余项目之前取消选择了列表框数据),但是在阅读了这篇文章之后线程我能够想出一个解决方案。
问题是 RowSource 是一个动态命名范围(“FilterData”),当第一个选定的项目返回到工作表时,它会触发工作簿重新计算所有公式,包括动态命名范围的公式,从而刷新列表框 RowSource 并在它有机会循环遍历所有选定项目之前清除它们。
解决方案是在执行 Do While Loop 语句之前关闭自动公式计算(然后再将其重新打开...非常重要),如下所示:
Application.Calculation = xlCalculateManual
Do While i < lstProperties.ListCount
If lstProperties.Selected(i) = True Then
Sheet7.Cells(Rw, 1) = lstProperties.List(i)
Rw = Rw + 1
End If
i = i + 1
Loop
Application.Calculation = xlCalculateAutomatic
希望这对寻找相同问题解决方案的其他人有所帮助。
干杯!