Microsoft Excel是Microsoft為使用Windows和Apple Macintosh操作系統(tǒng)的電腦編寫的一款電子表格軟件。直觀的界面、出色的計(jì)算功能和圖表工具,再加上成功的市場(chǎng)營銷,使Excel成為最流行的個(gè)人計(jì)算機(jī)數(shù)據(jù)處理軟件。 在 VBE 編輯器中,我們能看到很多的小標(biāo)題欄窗體,這就是工具欄窗體,其實(shí)我們通過對(duì)VBA用戶窗體的定制,也可以使VBA的用戶窗體成為工具欄式窗體。本文就是運(yùn)用API函數(shù)來定制 Office 中的用戶窗體,使其成為工具欄窗體。 
附件下載:
點(diǎn)擊鏈接從百度網(wǎng)盤下載 操作如下: ?在Excel 的VBE窗口中插入一個(gè)用戶窗體,將其命名為 frmTools。在用戶窗體中添加兩個(gè)按鈕,然后再添加一個(gè)模塊。在窗體和模塊中添加后面所列代碼。 ?在工作薄中的任意工作表中添加一窗體按鈕控件,將指定其 設(shè)置宏 為 btnToolsForm_Click。其供示范之用. 具體代碼: "ModToolsForm" 模塊代碼 Sub btnToolsForm_Click() frmTools.Show End Sub "frmTools" 窗體代碼 Option Explicit '*************************************** '---此模塊演示了一個(gè)工具欄窗體--- '*************************************** '以下聲明API函數(shù) #If Win64 Then '64位 Private Declare PtrSafe Function FindWindow _ Lib "user32" _ Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) _ As LongPtr Private Declare PtrSafe Function GetWindowLongPtr _ Lib "user32" _ Alias "GetWindowLongPtrA" ( _ ByVal hwnd As LongPtr, _ ByVal nIndex As Long) _ As LongPtr Private Declare PtrSafe Function SetWindowLongPtr _ Lib "user32" _ Alias "SetWindowLongPtrA" ( _ ByVal hwnd As LongPtr, _ ByVal nIndex As Long, _ ByVal dwNewLong As LongPtr) _ As LongPtr Private Declare PtrSafe Function DrawMenuBar _ Lib "user32" ( _ ByVal hwnd As LongPtr) _ As Long #Else '32位 '查找窗口 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 '設(shè)置窗口樣式位 Private Declare Function SetWindowLong _ Lib "User32" _ Alias "SetWindowLongA" ( _ ByVal Hwnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) _ As Long '重繪窗體標(biāo)題欄 Private Declare Function DrawMenuBar _ Lib "User32" ( _ ByVal Hwnd As Long) _ As Long #End If #If Win64 Then '64位 Private FHwnd As LongPtr Private FIstype As LongPtr #Else Private FHwnd As Long Private FIstype As Long #End If '以下定義常數(shù) Private Const GWL_EXSTYLE = (-20) Private Const WS_EX_TOOLWINDOW = &H80& '**************************************** '---主程序--- '****************************************
Private Sub btnClose_Click() Unload Me End Sub Private Sub btnReset_Click() #If Win64 Then '64位 '取得拓展窗口樣式位 FIstype = GetWindowLongPtr(FHwnd, GWL_EXSTYLE) '拓展窗體樣式位: 原樣式無工具欄窗口樣式 FIstype = FIstype And Not WS_EX_TOOLWINDOW '重設(shè)拓展窗體樣式位 SetWindowLongPtr FHwnd, GWL_EXSTYLE, FIstype '重繪窗體標(biāo)題欄 DrawMenuBar FHwnd #Else '取得拓展窗口樣式位 FIstype = GetWindowLong(FHwnd, GWL_EXSTYLE) '拓展窗體樣式位: 原樣式無工具欄窗口樣式 FIstype = FIstype And Not WS_EX_TOOLWINDOW '重設(shè)拓展窗體樣式位 SetWindowLong FHwnd, GWL_EXSTYLE, FIstype '重繪窗體標(biāo)題欄 DrawMenuBar FHwnd #End If End Sub Private Sub UserForm_Initialize() #If Win64 Then '64位 '查找本窗口句柄 FHwnd = FindWindow("ThunderDFrame", Me.Caption) '取得拓展窗口樣式位 FIstype = GetWindowLongPtr(FHwnd, GWL_EXSTYLE) '拓展窗體樣式位: 原樣式和工具欄窗口樣式 FIstype = FIstype Or WS_EX_TOOLWINDOW '重設(shè)拓展窗體樣式位 SetWindowLongPtr FHwnd, GWL_EXSTYLE, FIstype '重繪窗體標(biāo)題欄 DrawMenuBar FHwnd #Else '查找本窗口句柄 FHwnd = FindWindow("ThunderDFrame", Me.Caption) '取得拓展窗口樣式位 FIstype = GetWindowLong(FHwnd, GWL_EXSTYLE) '拓展窗體樣式位: 原樣式和工具欄窗口樣式 FIstype = FIstype Or WS_EX_TOOLWINDOW '重設(shè)拓展窗體樣式位 SetWindowLong FHwnd, GWL_EXSTYLE, FIstype '重繪窗體標(biāo)題欄 DrawMenuBar FHwnd #End If End Sub
Excel整體界面趨于平面化,顯得清新簡潔。流暢的動(dòng)畫和平滑的過渡,帶來不同以往的使用體驗(yàn)。 |