如何根据用户窗体ListBox首列值激活对应名称的工作表?
修正后的VBA代码及说明
原代码存在的问题
- 获取选中行首列值的语法错误:
Me.ListBox1.ListIndex(0)是错误用法,正确需通过List(行索引, 列索引)来定位对应单元格的值 - 存在无效语法:代码末尾的
End With没有对应的With语句,会直接导致编译报错 - 未处理无选中行的场景:当ListBox未选中任何行时,
ListIndex的值为-1,执行后续代码会引发错误
修正后的代码
Private Sub ListBox1_Click() Dim ws As Worksheet Dim customerId As String ' 判断是否选中了有效行 If Me.ListBox1.ListIndex = -1 Then Exit Sub ' 获取选中行首列(客户ID)的内容 customerId = Me.ListBox1.List(Me.ListBox1.ListIndex, 0) ' 检查目标工作表是否存在 On Error Resume Next Set ws = ThisWorkbook.Sheets(customerId) On Error GoTo 0 If ws Is Nothing Then ' 工作表不存在时给出提示 MsgBox "不存在名为 " & customerId & " 的工作表" & vbCrLf & "请修正后重试", vbExclamation Me.ListBox1.SetFocus Else ' 激活存在的目标工作表 ws.Activate End If End Sub
关键优化点
- 用
Me.ListBox1.List(Me.ListBox1.ListIndex, 0)精准定位选中行的首列值(列索引从0开始) - 增加
ListIndex = -1的判断,提前终止无选中行时的代码执行 - 用
ThisWorkbook.Sheets明确指定当前工作簿,避免误操作其他打开的工作簿 - 优化提示信息的表述,更直观清晰
内容的提问来源于stack exchange,提问作者rharri1972
相关产品推荐
相关产品推荐

