使用Excel用户窗体激活Excel工作表

时间:2018-11-12 13:55:58

标签: excel vba excel-vba

我正在尝试使用一对列表框来激活电子表格。 lstWorkbooks存储工作簿的名称。 lstSheets是lstworksheets中所选工作簿的工作表列表。我的问题是从这些列表中选择值会产生随机行为。

请在下面查看我的代码

Dim xlApp As Excel.Application
Dim wbk As Workbook

Private Sub lstSheets_AfterUpdate()
    ActiveWorkbook.Sheets(lstSheets.Value).Activate
End Sub

Private Sub lstWorkbooks_AfterUpdate()
    Me.lstSheets.Clear
        For Each wbk In xlApp.Workbooks
            If wbk.Name = Me.lstWorkbooks.Value Then
                Dim sh As Worksheet
                For Each sh In wbk.Worksheets
                    If sh.Visible = xlSheetVisible Then Me.lstSheets.AddItem sh.Name
                Next sh
                Exit For
            End If
        Next wbk
    Windows(lstWorkbooks.Value).Activate
End Sub

Private Sub UserForm_Activate()
    Set xlApp = GetObject(, "Excel.Application")
    For Each wbk In xlApp.Workbooks
        If wbk.Name <> "Personal.xlsb" Then Me.lstWorkbooks.AddItem wbk.Name
    Next wbk
End Sub

感谢您在此提供的任何帮助,以使其产生所需的行为

1 个答案:

答案 0 :(得分:0)

您有

 Private Sub lstSheets_AfterUpdate()
     ActiveWorkbook.Sheets(lstSheets.Value).Activate
 End Sub

,但是lstsheets可以列出任何打开的工作簿中的工作表。您不能假定工作表在现用工作簿上。您需要确保工作簿首先处于活动状态,因为用户可能已经在选择工作簿和选择工作表之间激活了另一个工作簿。

但是,另一点是您为什么仍要尝试激活工作表。 VB代码不需要它,并且用户肯定会发现,如果他们想看到一个而不是使用表格,只需用鼠标激活一张纸就容易了?