vba-用戶圖形界面


 

一、控件介紹

用戶圖形界面主要是控件設置和操作

窗體控件、ActiveX控件:

Office2013:在開發工具——插入  下

Office2003:在視圖——工具欄——窗體  下

窗體控件說明:

標簽:用於輸入和顯示靜態文本

分組框:用於組合其他多個控件

按鈕:用於執行宏命令

復選框:選中控件,可以多項選擇

選項按鈕:用於選擇的控件,通常幾個選項按鈕用組合框組合在一起使用,在一組中只能同時選擇一個選項按鈕

列表框:顯示多個選項列表,用戶可以從中選擇一個選項

組合框:提供可選擇的多個選項,用戶可以選擇其中的一個項目

滾動條:包括水平滾動條和垂直滾動條

微調控件:通過單擊控件的箭頭來選擇數值

 

窗體控件:

 

ActiveX控件:

 

 

二、窗體、ActiveX控件的使用

使用“組合框控件”,設置控件格式——控制:

設置數據源區域(用來顯示下拉菜單的值)、單元格鏈接(即現在的下拉數據在數據區域第幾個值,選中“女”則顯示2,“男”則顯示1)、下拉顯示項目數(即下拉框顯示列表數量)

 

插入ActiveX的“選項按鈕”,通過“設計模式”,“查看代碼”添加代碼實現其邏輯。

 

Private Sub xb1_Click()
    If xb1.Value = True Then
        Range("F2").Value = ""
        xb2.Value = False
    End If
End Sub

Private Sub xb2_Click()
    If xb2.Value = True Then '如果xb2被選中則執行如下邏輯
        Range("F2").Value = ""    '在F2單元格里輸入“女”
        xb1.Value = False '更改xb1為未選中狀態
    End If
End Sub

三、InputBox函數、Application.InputBox方法

1、InputBox函數

InputBox(Prompt:="提示文字",Title:="對話框標題,可省略",Default:="文本框默認值,可省略",xpos:="左端距離",ypos:="頂端距離")
str = InputBox(Prompt:="請輸入姓名:", Title:="操作提示", Default:="張Dream", xpos:=2000, ypos:=2500)
也可以省略所有參數:
str = InputBox("請輸入姓名:", "操作提示", "張Dream", 2000, 2500)

除Prompt外,其他參數都可以省略

InputBox(Prompt:="提示文字",Title:="對話框標題,可省略",Default:="文本框默認值,可省略",xpos:="左端距離",ypos:="頂端距離")
str = InputBox(Prompt:="請輸入姓名:", Title:="操作提示", Default:="張Dream", xpos:=2000, ypos:=2500)
也可以省略所有參數:
str = InputBox(Prompt:="請輸入姓名:",, Default:="張三")

Sub InBox()
    Dim str As String
    '第一個參數prompt是對話框上的提示文字
    '第二個參數Title是對話框的標題,如果省略,默認標題為“Microsoft Excel”
    '第三個參數Default是默認輸入值,如果省略,則文本框中內容為空
    '第四個參數xpos是對話框左端與屏幕左端的距離,如果省略,對話框的水平方向居中顯示
    '第五個參數ypos是對話框頂端與屏幕頂端的距離,如果省略,對話框將顯示距離屏幕頂端約三分之一的位置
    str = InputBox(Prompt:="請輸入姓名:", Title:="操作提示", Default:="張Dream", xpos:=2000, ypos:=2500)
    Range("A1") = str '將輸入的值寫入A1單元格
End Sub

2、Application.InputBox方法

 

 

Sub AppInbox()
    Dim str As String
    str = Application.InputBox(prompt:="請輸入姓名:", Title:="操作提示", Default:="五三", Left:=100, Top:=500)
    Range("A1") = str
End Sub

3、InputBox函數、InputBox方法的區別

 參數的差異:

InputBox(Prompt:="請輸入姓名:", Title:="操作提示", Default:="張Dream", xpos:=2000, ypos:=2500)

 

Application.InputBox(prompt:="請輸入姓名:", Title:="操作提示", Default:="五三", Left:=100, Top:=500)

 

InputBox函數只能返回一個String型的字符串,而InputBox方法返回的數據類型不確定,並且InputBox方法比InputBox函數多一個Type參數

 

Application.InputBox中Type參數說明

0:公式

1:數字:

2:文本

4:邏輯值(True或False)

8:單元格引用(Range對象)

16:錯誤值,如#N/A

64:數值數組

 

使用application.InputBox方法,返回Range對象

 

Option Explicit

Sub RngInput()
    Dim rng As Range '定義一個Range對象
    On Error GoTo cancel '如果單擊“取消”按鈕,出現錯誤,跳轉到cancel處
    Set rng = Application.InputBox(prompt:="請選擇要輸入的單元格區域", Type:=8)
    rng.Value = 100 '在選中的單元格輸入100
cancel:
End Sub 

Application.InputBox方法返回復合類型

Application.InputBox(prompt:="請選擇要輸入的單元格區域", Type:=1 + 2) '1:數字,2:文本,1+2:數字或文本中任意一種
Application.InputBox(prompt:="請選擇要輸入的單元格區域", Type:=3) '與上面語句效果一樣 

四、MsgBox函數

1、參數語法

Sub msg()
    '第一個參數prompt時對話框中葯顯示的文本信息,時必選參數
    '第二個參數Buttons指定對話框中顯示的按鈕數目、按鈕形式、使用的圖標樣式、缺省按鈕以及消息框的強制回應等。參數值時值(或常數)的綜合,如果省略,缺省值為0
    '第三個參數Title指定在對話框的標題欄中顯示的字符串,如果省略,默認“Microsoft Excel”
    MsgBox prompt:="中午十二點,該吃飯了!", Buttons:=vbOKOnly + vbInformation, Title:="溫馨提醒"
End Sub

 

2、MsgBox的6種按鈕設定

Sub msg()
    MsgBox prompt:="顯示“確定”按鈕", Buttons:=vbOKOnly, Title:="練習MsgBox按鈕"
    MsgBox prompt:="顯示“確定”和“取消”按鈕", Buttons:=vbOKCancel, Title:="練習MsgBox按鈕"
    MsgBox prompt:="顯示“中止”、“重試”和“忽略”按鈕", Buttons:=vbAbortRetryIgnore, Title:="練習MsgBox按鈕"
    MsgBox prompt:="顯示“是”、“否”和“取消”按鈕", Buttons:=vbYesNoCancel, Title:="練習MsgBox按鈕"
    MsgBox prompt:="顯示“是”和“否”按鈕", Buttons:=vbYesNo, Title:="練習MsgBox按鈕"
    MsgBox prompt:="顯示“重試”和“取消”按鈕", Buttons:=vbRetryCancel, Title:="練習MsgBox按鈕"
End Sub

 

3、MsgBox的4中圖標樣式

  

Sub msg()
    MsgBox prompt:="顯示“關鍵消息”按鈕", Buttons:=vbCritical, Title:="練習MsgBox按鈕"
    MsgBox prompt:="顯示“警告詢問”按鈕", Buttons:=vbQuestion, Title:="練習MsgBox按鈕"
    MsgBox prompt:="顯示“警告消息”按鈕", Buttons:=vbExclamation, Title:="練習MsgBox按鈕"
    MsgBox prompt:="顯示“通知消息”按鈕", Buttons:=vbInformation, Title:="練習MsgBox按鈕"
End Sub

 

處理MsgBox交互結果

Sub msg()
    Dim yn As Integer
    yn = MsgBox(prompt:="是否在A1單元格中輸入100?", Buttons:=vbYesNo + vbQuestion, Title:="練習MsgBox按鈕")
    If yn = vbYes Then
        Range("A1").Value = 100
    ElseIf yn = vbNo Then
        Range("A1").Value = -2
    End If
End Sub

 

4、設置缺省按鈕和對話框類型

默認情況下按回車鍵即可執行的按鈕成為缺省按鈕(如果按鈕上有虛線框,則這個按鈕為缺省按鈕)

Sub msg()
    Dim yn As Integer '第二個按鈕設置為缺省按鈕,參數值也可以攜程4+32+256 或292
    yn = MsgBox(prompt:="是否在A1單元格中輸入100?", Buttons:=vbYesNo + vbQuestion + vbDefaultButton2, Title:="練習MsgBox按鈕")
    If yn = vbYes Then
        Range("A1").Value = 100
    ElseIf yn = vbNo Then
        Range("A1").Value = -2
    End If
End Sub

  

 Buttons參數還有第四組設定值,用來決定對話框的類型,如下表:

5、MsgBox函數的返回值

 

Sub msg()
    Dim yn As Integer
    yn = MsgBox(prompt:="是否在A1單元格中輸入100?", Buttons:=vbYesNo + vbQuestion)
    '判斷用戶按下哪一個按鈕
    If yn = vbYes Then
        Range("A1").Value = 100
    ElseIf yn = vbNo Then
        Range("A1").Value = -2
    End If
End Sub

  

五、Application對象的FindFile方法

 判斷文件是否打開

Sub OpenFile()
    If Application.FindFile = True Then '判斷文件是否打開
        MsgBox "選中的文件已打開!"
    Else
        MsgBox "沒有打開任何文件!"
    End If
End Sub

 

六、Application對象的GetOpenFilename方法、FileFilter方法

 獲取選中文件的文件名

Sub GetFile()
    Dim fil As String
    fil = Application.GetOpenFilename() '將選中的文件名賦給變量fil1
    If fil = "False" Then
        MsgBox "沒有選中任何文件"
        Exit Sub
    Else
        Range("A1").Value = fil
    End If
End Sub

D:\Study\Excel\公式.xlsx

可以使用FileFilter參數限制可選擇的文件類型。

Sub GetFile()
    Dim fil As String
    'filefilter 參數是一個文本字符串 "Excel 97-2003 工作簿(*.xls)"是文件篩選條件,顯示在【文件類型】下拉列表
    '.xls指定在對話框中顯示的文件類型,篩選條件和文件類型之間用英文逗號(,)隔開
    'fil = Application.GetOpenFilename(filefilter:="Excel 97-2003 工作簿(*.xlsx),*.xls") '將選中的文件名賦給變量fil1
    'fil = Application.GetOpenFilename(filefilter:="Excel 工作簿(*.xlsx),*.xlsx") '將選中的文件名賦給變量fil1
    fil = Application.GetOpenFilename(filefilter:="Excel 文件(*.xl*),*.xl*", MultiSelect:=True)
    If fil = "False" Then
        MsgBox "沒有選中任何文件"
        Exit Sub
    Else
        'D:\Study\Excel\公式.xlsx
        Range("A1").Value = fil
    End If
End Sub

如果希望能在兩種或多種類型的文件中選擇,可以修改參數值,如下(文件類型可以用*表示,例如*.xls*):

Sub GetFile()
    Dim fil As String
    fil = Application.GetOpenFilename(filefilter:="Excel或Word 文件(*.xls;*.xlsx;*.doc),*.xls*;*.xlsx;*.doc")
    If fil = "False" Then
        MsgBox "沒有選中任何文件"
        Exit Sub
    Else
        Range("A1").Value = fil
    End If
End Sub

除了FileFilter、GetOpenFilename方法還有其他參數,例如:

FileFilter參數執行在對話框中顯示的文件類型

filerIndex參數指定【文件類型】下拉列表中的第幾項為默認文件篩選條件,如果省略,默認為1

MultiSelect參數決定可以選中的文件個數。如果設置為True,表示可以同時選中多個文件,默認值為False,即只能選中一個文件

Title參數設置對話框的標題,如果省略,默認為“打開” 

Sub GetFile()
    Dim fil
    'filefilter 指定在對話框中顯示的文件類型
    'FilterIndex 指定【文件類型】下拉列表中的第幾項為默認文件篩選條件,如果省略,默認為1
    'Title 設置對話框的標題
    'MultiSelect 決定可以選中的文件個數,如果設置為True,表示可以同時選中多個文件,默認值為False,即只能選中一個文件
    fil = Application.GetOpenFilename(filefilter:="Excel 97-2003 工作簿(*.xls*),*.xls*,Word 97-2003 文檔(*.doc),*doc", FilterIndex:=2, Title:="請選擇文件", MultiSelect:=True)
    [A1].Resize(UBound(fil), 1) = Application.WorksheetFunction.Transpose(fil)
End Sub

'D:\Study\Excel\Excel基礎.xlsx
'D:\Study\Excel\公式.xlsx

 

七、Application對象的GetSaveAsFilename方法

GetSaveAsFilename方法打開【另存為】對話框,在對話框里選擇文件,獲得文件名。  

Sub GetSaveAs()
    Dim fil As String, filename As String, filter As String, tle As String
    filename = "我要選擇的文件"
    filter = "Excel 97-2003 工作簿(*.xls*),*.xls*,Word 97-2003 文檔(*.doc),*.doc,文本文件(*.txt),*.txt"
    tle = "請選擇需要的文件"
    '用變量做方法的參數
    '第一個參數InitialFileName指定顯示的文件名,如果省略,則顯示活動工作簿的名稱
    '第二個參數filefilter執行文件的篩選條件
    '第三個參數FilterIndex設置【保存類型】下拉列表中的第幾項默認篩選條件,如果省略,默認值為1
    '第四個參數Title指定對話框的標題,如果省略面膜人為“另存為”
    fil = Application.GetSaveAsFilename(InitialFileName:=filename, filefilter:=filter, FilterIndex:=2, Title:=tle)
    Range("A1") = fil '把文件名寫入A1單元格
End Sub

八、Application對象的FileDialog屬性

 FileDialog屬性可以獲得指定目錄的路徑及名稱,如下:

Option Explicit

Sub getFolder()
    With Application.FileDialog(filedialogtype:=msoFileDialogFolderPicker)
        .InitialFileName = "D:\" '設置D盤根目錄為起始目錄
        .Title = "請選擇一個目錄" '設置對話框標題
        .Show '顯示對話框
        If .SelectedItems.Count > 0 Then '判斷是否選中了目錄
            Range("A1").Value = .SelectedItems(1) '將選擇的目錄名及路徑寫進A1單元格
        End If
    End With
End Sub

'D:\Study\Excel\Excel公式與函數-示例文件

除了msoFileDialogFolderPicker,filedialogtype參數還可以選用其他的值,如下:

 

九、構建用戶窗體,自己設計交互界面

用戶窗體時Excel的另一個對象:UserForm對象,用戶可以在窗體上自由添加ActiveX控件,並利用這些控件從用戶那里獲得信息,或將信息輸出給用戶  

1、添加窗體兩種:在VBA編輯窗口

1、【插入】——【用戶窗體】

 2、右鍵單擊工程目錄樹——選中【插入】——【用戶窗體】

2、設置窗體屬性

分別是“窗體名稱”、“窗體標題欄名稱”

 

也可以按照屬性分類查看,並進行設置

 

如果對屬性不太熟悉,可以選中屬性后,按快捷鍵F1,即可彈出幫助信息

幫助地址:https://docs.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/bordercolor-property

 

3、在窗體中添加控件

 如果窗口中沒有顯示【工具箱】,可以依次執行【視圖】——【工具箱】菜單命令打開它。

默認情況下,【工具箱】中有16種控件相同。如果想增加【工具箱】中的控件數目,可以右鍵單擊【工具箱】窗體,執行【添加控件】菜單命令進行添加。

4、窗體相關設置

Option Explicit

'窗體顯示
Sub xianshi()
    Load 錄入  '加載"錄入"窗體
    錄入.Show  '顯示"錄入"窗體,將窗體顯示給用戶
End Sub

'窗體的顯示模式
Sub modal()
    '錄入.Show vbModal '顯示窗體模式窗體,默認或缺省則為vbModal,這個窗體將以模式窗體顯示
    錄入.Show vbModeless  '顯示無模式窗體
    Range("A1") = "現在顯示的是無模式窗體!"
End Sub

'關閉窗體
Sub hideform()
    錄入.Hide '隱藏"錄入"窗體
End Sub
Sub unloadform()
    Unload 錄入  '卸載"錄入"窗體,卸載后窗體將從屏幕和內存中同時刪除
End Sub

5、給窗體添加控件,並使用控件

 

對窗體進行初始化設置UserForm_Initialize

Private Sub UserForm_Initialize()
    '設置性別復合框的條目為“男”和“女”
    性別.List = Array("", "")
End Sub

 

 為命令按鈕添加事件過程

Option Explicit

Private Sub UserForm_Initialize()
    '設置性別復合框的條目為“男”和“女”
    性別.List = Array("", "")
End Sub

Private Sub 確定_Click()
    '判斷信息輸入是否完整
    If 姓名.Value = "" Or 性別.Value = "" Or 出生年月.Value = "" Then
        MsgBox "信息輸入不完整,請重新輸入!", vbExclamation, "錯誤提示"
        Exit Sub '退出執行程序
    End If
    Dim xrow As Integer
    xrow = Range("A1").CurrentRegion.Rows.Count + 1 '求第一行空行行號
    '將姓名,性別,出生年月寫入第一條空行
    Cells(xrow, "A") = 姓名.Value
    Cells(xrow, "B") = 性別.Value
    Cells(xrow, "C") = 出生年月.Value
    '內容寫入工作表后,將控件中的內容清除
    姓名.Value = ""
    性別.Value = ""
    出生年月.Value = ""
    
    
End Sub

Private Sub 退出_Click()
    Unload Me '卸載“錄入”窗體,Me指錄入窗體,即代碼所在的模塊
End Sub

6、用鍵盤控制控件

1)更改控件的<Tab>鍵順序

在【視圖】——【Tab鍵順序(A)】在彈出框調整即可

  

2)給控件執行快捷鍵 

 將Accelerator設置為N,表示按下<Alt+N>組合鍵等於在窗體單擊【確定】按鈕

 

7、改造Excel現有的界面

 1)更改標題欄的程序名稱,默認名稱是“Microsoft Excel”

Application.Caption = "我的程序" '更改標題欄程序名稱為“我的程序”

2)顯示或隱藏菜單欄

逐個隱藏

Sub MenuHide()
    Dim i% '定義一個變量
    With Application.CommandBars(1)
        .Controls("文件(&F)").Visible = False
        .Controls("編輯(&E)").Visible = False
        .Controls("視圖(&V)").Visible = False
        .Controls("插入(&I)").Visible = False
        .Controls("格式(&O)").Visible = False
        .Controls("工具(&T)").Visible = False
        .Controls("數據(&D)").Visible = False
        .Controls("窗口(&W)").Visible = False
        .Controls("幫助(&H)").Visible = False
    End With
End Sub

也可以用循環語句實現隱藏

Sub MenuHide()
    Dim i% '定義一個變量
    With Application.CommandBars(1)
        For i = 1 To .Controls.Count
            .Controls(i).Visible = False '隱藏第i個菜單,false為隱藏,true為顯示
        Next
    End With
End Sub

3)顯示或隱藏工具欄

Sub ToolHide()
    '隱藏 常用工具欄 和 格式工具欄
    With Application
        .CommandBars("Starndard").Visible = False '隱藏常用工具欄
        .CommandBars("Formatting").Visible = False '隱藏格式工具欄
    End With
End Sub

想隱藏窗口中顯示的所有工具欄,可以使用程序: 

Sub ToolHide()
    Dim i%
    For i = 2 To Application.CommandBars.Count '索引號為2開始,因為1時菜單欄
        Application.CommandBars(i).Enabled = False '隱藏所有工具欄
    Next
End Sub

4)設置窗口 

Sub WindowSet()
    With ActiveWindow
        .DisplayHeadings = False '隱藏行標和列標
        .DisplayHorizontalScrollBar = False '隱藏水平滾動條
        .DisplayVerticalScrollBar = False '隱藏垂直滾動條
        .DisplayGridlines = False '隱藏網格線
        .DisplayWorkbookTabs = False '隱藏工作表標簽
    End With
End Sub 

5)其他設置

Sub Other()
    With Application
        .DisplayFormulas = False '隱藏編輯欄
        .CommandBars.DisableAskAQuestionDropdown = True '隱藏幫助
        .CommandBars("ply").Enabled = False '右鍵單擊工作表標簽后不顯示菜單
        .CommandBars("cell").Enabled = False '右鍵單擊工作表區域后不顯示菜單
        .DisplayStatusBar = False '隱藏狀態欄
        .ShowStartupDialog = False '隱藏任務窗格
    End With
End Sub 

十、典型的技巧或示例

 等等……

 

十一、代碼調試與優化

1、VBA可能發生的錯誤分類

編譯錯誤

運行時錯誤

邏輯錯誤

2、VBA程序的3種狀態

設計模式

運行模式

中斷模式:這時通過F8鍵逐句執行程序,觀察運行情況。

3、斷點

設置斷點,可以利用F9快捷鍵快速設置或清除斷點

F8逐行執行程序,觀察運行情況

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM