2015-02-11 58 views
0

我有一个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 
+0

谢谢大家!通过这些查看一些选项,我能够得到我需要的东西。 – Lupi 2015-02-11 14:21:03

回答

0

这将为您处理并处理所有错误,而无需使用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 
0

我相信你的问题,此刻的根源是On Error Resume Next。当你的else语句遇到一个错误时,这会导致sub简单地退出,比如表单不存在。相反,您需要通过使用诸如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%28v=vs.60%29.aspx

0

如果你想获得表的列表弹出所以你可以选择一个只是让一个快速的用户窗体,插入一个列表框(组合框将工作为好,我更喜欢一个ListBox视觉),并将其填充在userform_initialize:

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

确保多选属性设置为0的单一选择,然后创建一个o k按钮,去所选工作表:

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

然后创建一个按钮或任何显示窗体。