我正在尝试从 excel 表单中获取列表框以将焦点设置在最后一个选定的值上。
因为列表框是多选的,如果我使用以下代码,它将取消选择我想要保持选中状态的内容:
With Me.listName
For lsti=0 To .listCount-1
If .selected(lsti) Then
lastSelectedIndex = lsti
End If
Next
If lastSelectedIndex >-1 Then
.listindex = lastSelectedIndex 'this causes other items to become deselected
End If
End With
有没有办法将焦点设置为最后一个选定的项目,而不会取消选择项目?
你把这段代码放在什么"事件"中?如果是_click还是_change?此行代码将重新触发事件
.listindex = lastSelectedIndex
使用此技术:声明模块级变量
Option Explicit
Public mbCancel As Boolean
然后使用此代码
Private Sub myListName_Change()
If mbCancel Then Exit Sub
With myListName
'
If lastSelectedIndex >-1 Then
mbCancel=true
.listindex = lastSelectedIndex
mbCancel=false
End If
感谢 M.R 的想法,但它让我意识到我没有正确调用该函数。
我有第二个列表框,用作具有唯一值的文件管理器,并且只有在使用筛选器时才应更改焦点。我还在主列表框上更改了对 MouseUp 的关注,现在头脑清醒,毫无意义。
所以我单独使用以下代码来更改焦点:
Private Sub lstFilter_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'filterMainList
'addIdsToSelected
setFocusToLast
End Sub
Sub setFocusToLast()
Dim indexI, lastSelectedId, currentId
Dim lstI
With Me.lstFilter
indexI = .listIndex
lastSelectedId = .LIST(indexI, 0)
End With
With Me.lstIds
For lstI = .listCount - 1 To 0 Step -1
currentId = .LIST(lstI, 0)
If currentId = lastSelectedId Then
.listIndex = lstI
Exit For
End If
Next
End With
End Sub