首页 > 解决方案 > 使用 excel 用户窗体激活 excel 工作表

问题描述

我正在尝试使用一对列表框激活电子表格。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

任何帮助,以便它产生所需的行为表示赞赏

标签: excelvba

解决方案


你有

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

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

但另一点是您为什么要尝试激活工作表。VB 代码不需要它,如果用户想查看一个表单而不是使用表单,他们肯定会发现用鼠标激活表单更容易?


推荐阅读