excel - 使用 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
任何帮助,以便它产生所需的行为表示赞赏
解决方案
你有
Private Sub lstSheets_AfterUpdate()
ActiveWorkbook.Sheets(lstSheets.Value).Activate
End Sub
但 lstsheets 可以列出任何打开的工作簿中的工作表。您不能假设工作表在活动工作簿上。您需要首先确保工作簿处于活动状态,因为用户可能在选择工作簿和选择工作表之间激活了不同的工作簿。
但另一点是您为什么要尝试激活工作表。VB 代码不需要它,如果用户想查看一个表单而不是使用表单,他们肯定会发现用鼠标激活表单更容易?
推荐阅读
- javascript - Counter Up Number 显示的金额与指定的金额不同
- sql - 如果每个字符串不同,如何在 MS Access 中使用 SQL 从字符串中提取特定关键字?
- java - 如何更新对象休眠
- html - 缩小屏幕尺寸时保持边距?
- c++ - 模板化字段引用模板参数可以作为第一个模板参数传递吗?
- python - 使用关联值旋转一个数据框列以创建多列
- android - 如何使用 Kotlin 的 Parcelize 对 HashMap 进行 Parcelize?
- bash - 带有 for 循环的远程 SSH 命令
- html - 链接到另一个 html 页面的按钮标记
- c# - HTTPS url 上的 C# WebRequest POST 方法自动使用 http url