sgBox
在VBA編寫過程中,我們常常會跟提示框打交道,那么提示框是如何創建的呢?我們是否可以自己定義對話框的內容呢?答案是:可以的,在我之前的文章中很多的例子里都會出現Msgbox(提示對話框)這里我來為大家詳細介紹一下:
在VBA中MsgBox函數的作用是顯示一個消息框,并等待用戶點擊一個按鈕,然后根據用戶點擊的按鈕執行相關的操作,在EXCEL 程序中會有很多的對話框,比如:當你想要關閉Excel時,會彈出對話框詢問你是否保存對當前的Excel ,還是取消當前的操作。
示例一
MsgBox的語法和它所需要的參數:
示例二
在 Buttons 參數可以使用一下任何值:
常數 | 值 | 作用 |
vbOKOnly | 0 | 只顯示“確定”按鈕。 |
vbOKCancel | 1 | 顯示“確定”和“取消”按鈕。 |
vbAbortRetryIgnore | 2 | 顯示“終止”和“重試”和“忽略”按鈕。 |
vbYesNoCancel | 3 | 顯示“是”和“否”和“取消”按鈕。 |
vbYesNoCancel | 4 | 顯示“是”和“否”按鈕。 |
vbRetryCancel | 5 | 顯示“重試”和“取消”按鈕。 |
vbCritical | 16 | 顯示嚴重消息圖標。 |
vbQuestion | 32 | 顯示警告查詢圖標。 |
vbExclamation | 48 | 顯示警告消息圖標。 |
vbInformation | 64 | 顯示信息消息圖標。 |
Buttons的參數無論是常數還是其對應的值,作用都可以實現。
在提供了Helpfile與context 的時候,用戶可以按F1(Windows)來查看與context 相應地幫助主題。
如果對話框顯示Cancel按鈕,則按下鍵盤的ESC 鍵與單擊Cancel按鈕的效果相同。
MsgBox函數可以返回以下的值,可用于標識用戶在消息框中單擊的按鈕。
案例實現Excel的關閉提示框:
Sub 對話框案列()
'獲取文件名
Dim FileName As String
Dim result As Variant
FileName=ThisWorkbook.Name
result=MsgBox("是否保存對 " & FileName & " 的更改?", vbYesNoCancel + vbExclamation, "Microsoft Excel")
If result=vbYes Then
ThisWorkbook.Close (True) '關閉并保存
ElseIf result=vbNo Then
ThisWorkbook.Close (False) '關閉不保存
End If
End Sub
結果:
結果
VBA很簡單,多敲代碼,孰能生巧[呲牙][呲牙][呲牙]
單擊——Click事件
這是指用戶在窗體上用鼠標左鍵或者右鍵單擊而產生的事件,實際應用中不多見.
雙擊——DblClick事件
這是指用戶在窗體上用鼠標左鍵雙擊而產生的事件,比如說Photoshop雙擊窗體會彈出打開對話框,這就是窗體雙擊事件的應用。
這里需要注意的是:
當雙擊窗體時,首先觸發的是單擊事件,然后才是雙擊事件。
初始化——Initialize事件
任何窗體生命周期中的第一個事件就是Form_Initialize事件。在創建窗體和控件之前,Initialize事件就會發生。可以在Initialize事件中初始化窗體的變量。
在窗體的Initialize事件中,控件還沒有被創建,所以這里報錯,既然現在還沒有按鈕,所以也就沒有Caption屬性。
加載——Load事件
窗體的Load事件不是由用戶的操作引發的,而是由操作系統來發送的。當一個窗體被加載到內存中準備顯現時,就會發生這個事件。我們經常利用這個事件進行窗體控件的初始化工作,比如給組合框的下拉列表加入條目,設置標簽的標題等等。
需要注意的是,先是Initialize事件,再是Load事件,我們可以通過一個小實驗來確定。
分別在Initialize和Load事件中彈出對話框,就能看出執行順序:
示例效果和源碼下載地址在最下方。
MouseDown、MouseMove、MouseUp事件
這三個事件主要是響應鼠標的操作。
你在窗體上按下鼠標,會觸發MouseDown事件。
松開鼠標,會觸發MouseUp事件。
移動鼠標,會觸發MouseMove事件。
這三個事件不同于以上幾個事件,他們都是有參數的,Button、Shift、X,Y,可以判定事件的詳細信息,比如按下哪個鍵,鼠標的位置等等。
最典型的應用就是畫圖軟件,其實就是利用窗體的這三個鼠標相關的事件完成的。
Button參數值 | 意義 |
0 | 沒有按下任何鍵 |
1 | 左鍵被按下(默認) |
2 | 右鍵被按下 |
3 | 左鍵、右鍵同時被按下 |
4 | 中間鍵被按下 |
5 | 左鍵、中間鍵同時被按下 |
6 | 右鍵、中間鍵同時被按下 |
7 | 左、右、中三個鍵同時被按下 |
Shift參數表明了鼠標事件發生時,鍵盤上的那一個控制鍵被按下。
Shift參數值 | 意義 |
0 | 沒有按下轉換鍵 |
1 | 按下Shift鍵 |
2 | 按下Ctrl鍵 |
3 | 按下Ctrl+Shift鍵 |
4 | 按下Alt鍵 |
5 | 按下Alt+Shift鍵 |
6 | 按下Alt+Ctrl鍵 |
7 | 按下Ctrl+Shift+Alt鍵 |
X,Y兩個參數指定事件發生時鼠標的坐標。
我們通過一個示例來解釋今天所講的內容,程序運行分別先提示Initialize和Load事件,然后在Load事件中加載下拉列表的內容,并且單擊和雙擊窗體的時候在窗口標題顯示,鼠標可以在窗體上根據設置畫線
代碼:
效果如下:
即將被卸載——Form_QueryUnload事件
窗體即將被卸載時,窗體就會收到QueryUnload事件,這個事件有什么具體應用呢?拿Word來舉例,當文檔內容發生改變后,你關閉Word時會彈出對話框提示是否保存:
QueryUnload事件有兩個整型參數,就是Cancel和UnloadMode,傳遞給事件過程的值能夠反映卸載是如何引起的。
UnloadMode參數值:
參數值 | 常量 | 卸載原因 |
0 | vbFormControlMenu | 點擊窗體右上角的X關閉 |
1 | vbFormCode | 用Unload命令關閉 |
2 | vbAppWindows | 系統關機引起的關閉 |
3 | vbAppTaskManager | 從任務管理器中關閉 |
4 | vbFormMDIForm | 父窗體關閉引起的 |
5 | vbFormOwner | 窗體所有者關閉引起的 |
需要注意的是:
vbFormCode是用Unload命令關閉引起的,但是不會攔截用End命令引起的退出命令。
Cancel參數 比較好玩,只有0或者非0,如果Cancel參數是0或者不賦值,窗體繼續卸載,如果給Cancel賦值其他不是0的數值,就會終止卸載窗體。
有了這兩個參數,就可以在各種情況下做出相應的處理。
下邊的例子可以攔截各種原因引起的關閉: