iT邦幫忙

DAY 14
3

Excel VBA 的眉眉角角系列 第 14

Excel VBA 的眉眉角角Day14:判斷InputBox函數是按了確定還是取消

很多時候,我們必須要將程式寫的更完美,避免搗亂的user亂玩一通,其中一個比較常遇到的是,利用InputBox輸入資料的地方,若是正常輸入沒什麼問題,但有時user還沒輸入就按了Enter,或者突然不想輸入,按了取消,這兩種狀態,在VBA裡,帶出資料都是「空值」。要注意的是,即使在欄位處輸入資料,最後按「取消」,帶出來的資料與都沒輸入資料按下「確定」的資料都是空值。

這就麻煩了,你無法判斷user輸入是空值還是取消掉不要輸入,還好VBA有個「隱藏」函數可以用,StrPtr在官方說明文件裡沒有任何資訊,但上網搜尋可以找到,該函數應該是VB5、VB6使用的函數可回傳UNICODE 字串緩衝區的位址,因此如果按下取消,就不會有緩衝區位址,數值為0。

我們以上一篇的程式來進行修改,讓StrPtr判斷是否user按下了取消,如果是取消,就重新出現密碼輸入視窗,直到按下確定才離開Do...Loop迴圈。

Sub InputBoxDK_with_StrPtr_TEST()
    '判斷InputBox函數是按了確定還是取消
    '使用StrPtr函數
    
     Dim strAdminPWord As String
    
    Do
        strAdminPWord = InputBoxDK("請輸入密碼:", "注意!")
        If strAdminPWord = "password" Then
            MsgBox "密碼正確! ", vbOKOnly, "恭喜!"
            Exit Do
        ElseIf StrPtr(strAdminPWord) <> 0 Then
            MsgBox "密碼錯誤!", , "殘念~"
            Exit Sub '離開程式
        End If
        MsgBox "抱歉!不能取消餒!"
    Loop Until StrPtr(strAdminPWord) <> 0
    
    MsgBox "繼續執行"
    '密碼輸入正確後
    '要執行的程式放在這裡

End Sub

以下為執行畫面:

開啟後的輸入密碼視窗

密碼輸入錯誤後,出現提醒視窗,並離開程式。

按下取消鍵或者X按鈕關閉視窗後,出現的提醒訊息,按下確定後會繼續出現輸入視窗

輸入正確密碼後,出現提醒訊息

然後再執行密碼正確後執行的程式。

要注意的是,中途判斷密碼是否輸入正確的程式,中間的判斷要增加一個「ElseIf StrPtr(strAdminPWord) <> 0」,確定user按的不是取消,如果是的話就繼續跳到迴圈中執行帶出輸入視窗,當然,如果取消後,要執行其他步驟也是可行,例如帶出另一個詢問視窗是否取消,或者帶出其他子程式等,就看實際的需求如何了。

參考資料:

http://support.microsoft.com/kb/199824/zh-tw

http://vb.mvps.org/tips/varptr.asp


上一篇
Excel VBA 的眉眉角角Day13: InputBox輸入密碼字串顯示*字串
下一篇
Excel VBA 的眉眉角角Day15:關於寫入純文字檔的這檔事
系列文
Excel VBA 的眉眉角角30

尚未有邦友留言

立即登入留言