Excel 表单 - 转到上次选择的值



我正在尝试从 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

最新更新