我正在尝试使用一对列表框来激活电子表格。 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
感谢您在此提供的任何帮助,以使其产生所需的行为
答案 0 :(得分:0)
您有
Private Sub lstSheets_AfterUpdate()
ActiveWorkbook.Sheets(lstSheets.Value).Activate
End Sub
,但是lstsheets可以列出任何打开的工作簿中的工作表。您不能假定工作表在现用工作簿上。您需要确保工作簿首先处于活动状态,因为用户可能已经在选择工作簿和选择工作表之间激活了另一个工作簿。
但是,另一点是您为什么仍要尝试激活工作表。 VB代码不需要它,并且用户肯定会发现,如果他们想看到一个而不是使用表格,只需用鼠标激活一张纸就容易了?