如何将列表框初始化为列表中所需的起点?

How to initialize a listbox to a desired starting point in the list?

我为 Excel 创建了一个宏,它会打开工作簿中所有可见 sheet 的列表,并在滚动列表时转到所需的 sheet。这个想法是尽可能避免使用鼠标。

我被迫从列表中的第一项开始向下滚动
我想从最初的 sheet( 可能是 )开始“开始”,这样我就可以滚动 up/down,具体取决于 sheet 我想开。

换句话说,

  1. 我希望列表框填充所有可见的 sheets
  2. 我希望用户的起点处于活动状态sheet,这样他们就可以从他们的起点up/down滚动

列表框代码:

Private Sub CommandButton1_Click()
    Unload ListBox
End Sub

Private Sub UserForm_Initialize()
    Dim WS As Worksheet
    For Each WS In Worksheets
        ListBox1.AddItem WS.Name
    Next WS
End Sub

Private Sub ListBox1_Click()
    Sheets(ListBox1.Value).Activate
End Sub

打开列表框的代码:

Public Sub ShowUserForm()
    Load ListBox
    ListBox.Show
    Debug.Print "===="
    Debug.Print
End Sub

那是什么:

Private Sub UserForm_Initialize()
 Dim wksTab As Worksheet

 For Each wksTab In ThisWorkbook.Worksheets

  If wksTab.Visible = xlSheetVisible Then
   If wksTab.Name <> ActiveSheet.Name Then
     Me.ListBox1.AddItem wksTab.Name
   End If
  End If

 Next wksTab
 Me.ListBox1.AddItem ActiveSheet.Name
 Me.ListBox1.ListIndex = Me.ListBox1.ListCount - 1

End Sub

此致 伯恩德

另一个...

Private Sub UserForm_Initialize()
Dim ws As Worksheet, idx As Long

    With Me.ListBox1
        For Each ws In ActiveWorkbook.Worksheets
            If ws.Visible = xlSheetVisible Then
                .AddItem ws.Name
                If ws Is ActiveSheet Then
                    idx = .ListCount - 1 ' item indexes start at zero
                End If
            End If
        Next
        .ListIndex = idx  ' 
    End With

End Sub

Private Sub ListBox1_Change()
    Worksheets(ListBox1.Value).Activate
End Sub

你提到了“所有...工作表”,如果你想包括图表工作表循环工作表中的每个 objSheet,并在更改事件中用工作表替换工作表