2015-02-11 59 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 

然後創建一個按鈕或任何顯示窗體。