摘要:大家好,我們今日繼續講解VBA代碼解決方案的第102講內容:如何在用戶窗體上添加最大、最小化按鈕。窗體初始化時使用API函數在標題欄上添加最大最小化按鈕。

大家好,我們今日繼續講解VBA代碼解決方案的第102講內容:如何在用戶窗體上添加最大、最小化按鈕。我們在使用VBA的窗體時,不知你是否注意到:VBA中的窗體標題欄上只有關閉按紐,沒有最大最小化按鈕的。如下圖。

VBA代碼將強制執行:你的窗體上必須顯示最大、最小化按鈕

那麼是否可以利用代碼讓窗口上也出現類似於EXCEL和WORD窗口的最大和最小化按鈕呢?這時就要利用API函數了,利用API函數在窗體的標題欄上添加最大最小化按鈕,是非常可行的。

如下面的代碼所示。

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Const WS_MAXIMIZEBOX = &H10000

Private Const WS_MINIMIZEBOX = &H20000

Private Const GWL_STYLE = (-16)

Private Sub UserForm_Initialize() '注意是在此事件下的加載

Dim hWndForm As Long

Dim iStyle As Long

hWndForm = FindWindow("ThunderDFrame", Me.Caption)

iStyle = GetWindowLong(hWndForm, GWL_STYLE)

iStyle = iStyle Or WS_MINIMIZEBOX

iStyle = iStyle Or WS_MAXIMIZEBOX

SetWindowLong hWndForm, GWL_STYLE, iStyle

End Sub

代碼窗口:

VBA代碼將強制執行:你的窗體上必須顯示最大、最小化按鈕

這裏需要再給大家解釋一下UserForm_Initialize事件,窗體的Initialize事件即初始化事件,任何窗體生命週期的第一個事件都是Initialize。只要在項目中使用了窗體的名稱,在創建實際窗口及其控件之前,都會發生initialize事件。可以在initialize事件處理過程中正確地初始化窗體變量,它在Load事件之前發生。

代碼解析:

窗體初始化時使用API函數在標題欄上添加最大最小化按鈕。

第1行到第6行代碼,API函數聲明。

第10行代碼,獲取窗口句柄。

第11行到第14行代碼,在標題欄上添加最大最小化按鈕。

代碼運行後:

VBA代碼將強制執行:你的窗體上必須顯示最大、最小化按鈕

這時的最大最小化按鈕就統統出現了。

今日內容迴向:

1 如何實現窗口上出現最大最小化按鈕呢?

2 API 函數需要調用,如何調用API 函數呢?

相關文章