2010-06-26 104 views
3

我創建來獲取用戶名輸入的輸入框,但與取消按鈕的InputBox取消

Private Sub Form_Load() 
fsUserName = UCase(InputBox("Please Enter your name.", "User Name", _ 
"dc")) 

If fsUserName = "" Then 
MsgBox "No name Entered." & Chr(13) & Chr(13) & _ 
"You must enter a name.", vbExclamation, "ERROR" 
Form_Load 
ElseIf VarType(fsUserName) = 0 Then 'If cancel clicked 
cmdQuit_Click 

End If 

還停留在那裏被點擊窗體上的X按鈕時執行cmdQuit_Click的方式,以便如果用戶單擊命令按鈕Quit或X,退出腳本運行。在退出腳本中有消息框和清理。

回答

11

您可以使用StrPtr()來檢測是否點擊取消;

Dim fsUserName As String 

fsUserName = InputBox("Please Enter your name.", "User Name", "dc") 

If (StrPtr(fsUserName) = 0&) Then 
    MsgBox "Cancelled or X clicked" 
ElseIf fsUserName = "" Then 
    MsgBox "No name Entered." & vbCr & "You must enter a name.", vbExclamation, "ERROR" 
Else 
    fsUserName = UCase$(fsUserName) 
    MsgBox fsUserName 
End If 

如果你想要做的事,當窗體卸載可以使用Form_Unload事件或更好的Form_QueryUnload事件,觸發前的實際卸載&讓你取消。
它還會告訴你爲什麼形式正在卸載(UnloadMode將爲0,如果單擊紅色的X)

使用「Unload Me」將提高這兩個事件。

編輯:調用在這樣最終會填滿堆棧,最好使用循環來查找缺少的用戶名。

+0

謝謝亞歷克斯,這個解決方案對我來說非常完美。如果你能指導我Loop部分,我會很高興。再次感謝。 – 2010-06-27 05:36:17

2

亞歷克斯的回答使用StrPtr,我假設它的工作原理與其一樣好,但更好的建議(IMO)完全避免使用InputBox。您可以使用對話框樣式表單,文本框和幾個按鈕輕鬆創建自己的圖標,如果您願意,也可以使用圖標。

滾動你自己給你提供了完全的靈活性和可預測性,一旦你有了它,你可以在任何未來的項目中使用它。

+1

VB6的InputBox()函數是等效的API調用中非常薄的包裝,它將文檔Cancel作爲返回空指針。在極少數情況下,InputBox是有用的,檢測技術很好 - 沒有可靠性問題。但是我同意InputBox()對於普通用戶將與之交互的生產程序來說是一個糟糕的選擇。 – Bob77 2010-06-26 15:44:54

+0

Jim非常好,建議創建我自己的自定義對話框比使用inputbox好得多。對話框可以給予更專業的外觀。謝謝 – 2010-06-27 05:40:07

0

Excel InputBoxApplication.InputBox是不同的功能。

Sub GetValue2() 
    Dim Monthly As Variant 
    Monthly = Application.InputBox _ 
     (Prompt:="Podaj wysokość miesięcznej wypłaty:", _ 
     Type:=1) 
    If Monthly = False Then Exit Sub 
    MsgBox "Zarobki rocznie: " & Monthly * 12 
End Sub 
0

嘗試......

名稱= Application.InputBox( 「請輸入姓名」)

如果Name = 「假」 然後

MSGBOX 「您的留言」

Exit Sub

End If