天天看點

【VBA研究】EXCEL啟動時自動啟動窗體

作者:iamlaosong

VBA程式設計時為了界面美觀,我們經常用到窗體Form(比如歡迎視窗),那麼,如何做到讓VBA窗體在EXCEL啟動時自動運作呢?

方法有二:

第一,輕按兩下ThisWorkbook,輸入以下代碼(Open事件):

Private Sub Workbook_Open()

    Application.Visible = False     ' 關閉應用對象,隻保留窗體。

    Welcome.Show

End Sub

第二,也可以插入一個子產品,輸入下面自啟動代碼:

Sub Auto_Open()

    UserForm1.Show

End Sub

兩種方法都可以啟動VBA窗體(關閉窗體:Unload UserForm1或者UserForm1.Hide)。

上面兩個過程其實就是一個自啟動過程,除了啟動窗體,還可以幹很多其他的事情,比如增加菜單,總之,一些需要在Excel啟動後就完成的功能都可以放在這些過程中。下面是一個增加菜單的程式:

Open事件:

Private Sub Workbook_Open()

    AddNewMenu

End Sub

子產品中AddNewMenu過程,本過程也可以直接放在Open方法中,這樣寫是為了可讀性。

'添加菜單項
'與添加新菜單一樣,在添加菜單項及子菜單時,使用Add方法,且指定合适的控件類型,其代碼清單如下:
Sub AddNewMenu()
    Dim HelpMenu As CommandBarControl
    Dim NewMenu As CommandBarPopup
    Dim MenuItem As CommandBarControl
    Dim SubMenuItem As CommandBarButton
    
    On Error Resume Next
    
    '如果菜單已存在,則删除該菜單
    CommandBars(1).Controls("循環取貨(&X)").Delete
    '利用ID屬性查找幫助菜單
    Set HelpMenu = CommandBars(1).FindControl(ID:=30010)
    
    If HelpMenu Is Nothing Then
        '如果該菜單不存在,則将新菜單添加到末尾
        '設定新菜單為臨時的
        Set NewMenu = CommandBars(1).Controls.Add(Type:=msoControlPopup, Temporary:=True)
    Else
        '将新菜單添加到幫助菜單之前
        Set NewMenu = CommandBars(1).Controls.Add(Type:=msoControlPopup, Before:=HelpMenu.Index, Temporary:=True)
    End If
    
    '添加菜單标題并指定熱鍵
    NewMenu.Caption = "循環取貨(&X)"
    
    '添加第一個菜單項
    Set MenuItem = NewMenu.Controls.Add(Type:=msoControlButton)
    With MenuItem
        .Caption = "導入看闆(&K)..."
        '添加快捷鍵
        .ShortcutText = "Ctrl+Shift+K"
        .FaceId = 590       ' 不同的數值代表不同的圖示
        .OnAction = "ImpKanban"
    End With
    
    '添加第二個菜單項
    Set MenuItem = NewMenu.Controls.Add(Type:=msoControlButton)
    With MenuItem
        .Caption = "導入清單(&Q)..."
        '添加快捷鍵
        .ShortcutText = "Ctrl+Shift+Q"
        .FaceId = 162
        .OnAction = "ImpQingdan"
    End With
    
    '添加第三個菜單項
    '本菜單有子菜單項,是以其類型為msoControlPopup
    Set MenuItem = NewMenu.Controls.Add(Type:=msoControlPopup)
    With MenuItem
        .Caption = "資料報表(&R)..."
        '添加分隔線
        .BeginGroup = True
    End With
    '添加子菜單
    '添加第一個子菜單
    Set SubMenuItem = MenuItem.Controls.Add(Type:=msoControlButton)
    With SubMenuItem
        .Caption = "月彙總(&M)"
        .FaceId = 110
        .OnAction = "MonthRpt"
    End With
    '添加第二個子菜單
    Set SubMenuItem = MenuItem.Controls.Add(Type:=msoControlButton)
    With SubMenuItem
        .Caption = "季度彙總(&Q)"
        .FaceId = 222
        .OnAction = "SeasonRpt"
    End With
End Sub