当前位置: 首页 > 知识库问答 >
问题:

宏转到工作表[重复]

邢璞
2023-03-14

我有一个excel工作簿,其中有很多工作表选项卡,为了方便用户浏览,我添加了一个宏来打开一个输入框,以便用户可以键入他们想要的工作表。

这是可行的,但问题是,如果他们输入的工作表名称不正确,则不会产生任何作用,输入框将消失,用户将留在原来的工作表上。我想让它做的是,如果用户键入一个不存在的工作表名称,它会弹出一个包含所有选项卡列表的框,并允许他们从列表中进行选择。除此之外,至少会有一个消息框通知他们输入了一个不存在的工作表名称并重试,然后返回到输入框而不是消失。这是迄今为止我一直在使用的代码-

如果这是不可能的,我宁愿让它首先列出一个可用的工作表列表,然后完全忘记输入框。我的想法是,与其每次都要对列表进行排序,不如输入所需的表格,但这总比什么都不发生要好。

Sub GotoSheet()
Dim sSheet As String

sSheet = InputBox( _
  Prompt:="Sheet name or number?", _
  Title:="Input Sheet")
On Error Resume Next
If Val(sSheet) > 0 Then
    Worksheets(Val(sSheet)).Activate
Else
    Worksheets(sSheet).Activate
End If 
End Sub

共有3个答案

杜成和
2023-03-14

这将为您做到这一点,并处理所有错误,而无需使用On error语句。

Function Validate(SheetName As String) As Boolean
For i = 1 To ThisWorkbook.Worksheets.Count
If SheetName = ThisWorkbook.Worksheets(i).Name Then
Validate = True
Exit Function
Else
Validate = False
End If
Next
End Function

Sub GotoSheet()
Dim sSheet As String

sSheet = InputBox( _
  Prompt:="Sheet name or number?", _
  Title:="Input Sheet")
Do While Validate(sSheet) = False
'This if statement is true when the user click cancel or x button
If sSheet = "" Then
Exit Do
End If
MsgBox (sSheet & " does not exist. Please enter a valid sheet name.")
sSheet = InputBox( _
  Prompt:="Sheet name or number?", _
  Title:="Input Sheet")
Loop
If sSheet <> "" Then
    Worksheets(sSheet).Activate
End If
End Sub
狄飞尘
2023-03-14

我相信您目前的问题根源在于下一步恢复时出错。这会导致在else语句遇到错误(例如工作表不存在)时,子语句直接退出。相反,您需要通过使用类似“On error GoTo”的方法来处理该错误。例如:

Sub GotoSheet()
Dim sSheet As String

sSheet = InputBox( _
  Prompt:="Sheet name or number?", _
  Title:="Input Sheet")
On Error GoTo noSheet
If Val(sSheet) > 0 Then
    Worksheets(Val(sSheet)).Activate
    Exit Sub
Else
    Worksheets(sSheet).Activate
    Exit Sub
End If 

noSheet:
'Enter your code to display a warning that the sheet does not exist
'and/or bring up a selection box of all sheets

End Sub

下面是关于On Error语句的更多信息,该语句可能有用:https://msdn.microsoft.com/en-us/library/aa266173(v=vs.60). aspx

邴俊民
2023-03-14

如果您希望弹出可用工作表列表,以便选择一个,只需创建一个快速用户表单,插入一个列表框(组合框也可以,我更喜欢直观的列表框),并将其填充到用户表单

Private Sub UserForm_Initialize()
Dim WS As Worksheet
    For Each WS In Worksheets
        ListBox1.AddItem WS.Name
    Next WS
End Sub

确保“单选”的“MultiSelect”属性设置为0,然后创建指向选定图纸的“确定”按钮:

Private Sub CommandButton1_Click()
    Sheets(ListBox1.Value).Activate
    Unload Me
End Sub

然后创建一个按钮或任何东西来显示表单。

 类似资料: