Cách tạo menu tùy chỉnh trong bảng tính Excel của bạn thông qua VBA

Chia sẻ ngay bây giờ:

Dải băng Excel có thể được sửa đổi để phù hợp với một công việc cụ thể. Bài tập này tạo ra các menu mới hướng người dùng đến các trang cụ thể có liên quan đến nhiệm vụ của họ.

Trong bài viết này, chúng tôi sẽ giới thiệu cách tạo các menu tùy chỉnh trong bảng tính Excel của bạn, như sau:Tạo các menu tùy chỉnh trong bảng tính Excel của bạn

Bài viết này giả định rằng người đọc đã hiển thị dải băng Nhà phát triển và quen thuộc với Trình soạn thảo VBA. Nếu không, hãy Google “Excel Developer Tab” hoặc “Excel Code Window”.

Bảng tính

Sổ làm việc được sử dụng có một số trang tính. Chúng tôi khuyên bạn nên sử dụng mẫu được tìm thấy ở đây. Nó trông như thế này.Sổ làm việc mẫu

Bốn tờ đầu tiên không hoạt động, được sử dụng trong bài tập này chỉ nhằm mục đích điều hướng.

Trang thứ năm sẽ chứa cấu trúc menu tùy chỉnh dành riêng cho sổ làm việc này. Hiện tại nó phải trống ngoại trừ nút Kiểm tra.

Thêm cấu trúc menu

Sao chép khối văn bản sau vào ô A1 của trang “MenuSheet”.

Cấp độ, Chú thích, Vị trí/Macro, Dải phân cách

1,&Công cụ người dùng,10

2,Hiển thị Bảng điều khiển,ChọnBảng điều khiển

2,Thêm mới, ĐÚNG

3,Khách hàng,ChọnKhách hàng

3,Vị trí,ChọnVị trí

3, Trình quản lý, Trình quản lý chọn

2,Đóng,ĐóngTệp

Định dạng cấu trúc menu

Dữ liệu CSV này kết thúc ở cột A. Để định dạng nó thành các ô Excel riêng lẻ, hãy chọn cột A và sử dụng 'Chuyển văn bản thành cột' trong Tab dữ liệu. Dấu phân cách sẽ là “dấu phẩy”.Định dạng nó thành các ô Excel riêng lẻ

Ở trên, khi chúng tôi đã thêm mã thích hợp, sẽ cung cấp cho chúng tôi cấu trúc menu dựa trên cấp độ ở bên trái.Cấu trúc menu dựa trên cấp độ

Cấp độ đầu tiên trong bài tập này là trọng tàirarđược đặt ở mục thứ mười trên thanh menu, như bạn sẽ thấy khi toàn bộ chiều rộng của sổ làm việc được hiển thị.

Tạo và hủy menu

Vì chúng tôi chỉ muốn các menu mới cho sổ làm việc cụ thể này nên chúng tôi sẽ tạo và hủy chúng khi mở và đóng sổ làm việc.

Mã dưới đây là nhưtart. Nó sẽ được kích hoạt khi sổ làm việc được mở hoặc đóng. Sao chép nó vào một mô-đun trong sổ làm việc của bạn

Gán nút Kiểm tra trên MenuSheet cho Auto_Open.

Option Explicit

Sub auto_Open()
    Call DeleteMenu
    Call CreateMenu
 End Sub
 
Sub auto_Close()
    Call DeleteMenu
End Sub

Dưới đây, chúng tôi xem xét cấu trúc menu của chúng tôi chặt chẽ hơn.Kiểm tra cấu trúc thực đơn của chúng tôi chặt chẽ hơn

Không có macro nào được kích hoạt bởi Thêm mới bởi vì nó không có chức năng nào khác ngoài chức năng cha của các menu con.

Loại cấu trúc menu này rất dễ bảo trì. Chỉ cần thêm các mục mới bằng macro của chúng, lưu ý đến Cấp độ của menu.

Mật mã

Nối mã VBA sau vào mô-đun. Thao tác này sẽ kiểm tra “MenuSheet” và tạo menu tùy chỉnh.

Sub CreateMenu()
'   Called from Auto_Open. 'NOTE: There is no error handling in this subroutine
    Dim MenuSheet As Worksheet
    Dim MenuObject As CommandBarPopup

    Dim MenuItem As Object
    Dim SubMenuItem As CommandBarButton
    Dim sRow As Integer
    Dim MenuLevel, NextLevel, PositionOrMacro, Caption, Divider

    Set MenuSheet = ThisWorkbook.Sheets("MenuSheet")
    Call DeleteMenu

    sRow = 2 '   start row
    
'   Add menus using the structure as per the MenuSheet
    Range("A" & sRow).Select
    Do While ActiveCell > "" '****************
        With MenuSheet
            MenuLevel = .Cells(sRow, 1)
            Caption = .Cells(sRow, 2)
            PositionOrMacro = .Cells(sRow, 3)
            Divider = .Cells(sRow, 4)
            NextLevel = .Cells(sRow + 1, 1)
        End With
        
        Select Case MenuLevel
            Case 1 ' Add the top-level menu to the Worksheet CommandBar
                Set MenuObject = Application.CommandBars(1). _
                    Controls.Add(Type:=msoControlPopup, _
                    Before:=PositionOrMacro, _
                    Temporary:=True)
                MenuObject.Caption = Caption
            Case 2 ' A Menu Item
                If NextLevel = 3 Then
                    Set MenuItem = MenuObject.Controls.Add(Type:=msoControlPopup)
                Else
                    Set MenuItem = MenuObject.Controls.Add(Type:=msoControlButton)
                    MenuItem.OnAction = PositionOrMacro
                End If
                MenuItem.Caption = Caption
                If Divider Then MenuItem.BeginGroup = True
            Case 3 ' A SubMenu Item
                Set SubMenuItem = MenuItem.Controls.Add(Type:=msoControlButton)
                SubMenuItem.Caption = Caption
                SubMenuItem.OnAction = PositionOrMacro
                
                If Divider Then SubMenuItem.BeginGroup = True
        End Select
        sRow = sRow + 1
        Range("A" & sRow).Select '***************************************
    Loop
    Sheets("Dashboard").Activate
End Sub

Sub DeleteMenu()
'   This sub will be executed when the workbook is closing
    Dim MenuSheet As Worksheet
    Dim sRow As Integer
    Dim Caption As String
    
    On Error Resume Next
    Set MenuSheet = ThisWorkbook.Sheets("MenuSheet")
    sRow = 2
    Range("A" & sRow).Select
    Do While ActiveCell > ""
        If MenuSheet.Cells(sRow, 1) = 1 Then
            Caption = MenuSheet.Cells(sRow, 2)
            Application.CommandBars(1).Controls(Caption).Delete
        End If
        sRow = sRow + 1
        Range("A" & sRow).Select
    Loop
   
    On Error GoTo 0
End Sub

Sub SelectDashboard()
    Sheets("Dashboard").Activate
End Sub
Sub SelectClient()
    Sheets("Client").Activate
End Sub

Sub SelectLocation()
    Sheets("Location").Activate
End Sub

Sub SelectManager()
    Sheets("Manager").Activate
End Sub

Sub CloseFile()
    MsgBox "Close! (write your own code in the module)"
End Sub

Kiểm tra mã bằng nút Kiểm tra. Menu người dùng mới được tạo sẽ được tìm thấy ở vị trí menu 10, bên dưới Phần bổ trợ.

Phục hồi Excel

Excel đôi khi không ổn định và bị treo khi mở, làm hỏng tệp nguồn. Trường hợp không khôi phục được tập tin, việc có một công cụ để sửa chữa là rất hữu ích Excel thiệt hại nếu không tất cả công việc chưa được sao lưu sẽ là lost.

Giới thiệu tác giả:

Felix Hooker là một chuyên gia phục hồi dữ liệu trong DataNumen, Inc., công ty hàng đầu thế giới về công nghệ khôi phục dữ liệu, bao gồm sửa rar và các sản phẩm phần mềm phục hồi sql. Để biết thêm thông tin, hãy truy cập www.datanumennăm

Chia sẻ ngay bây giờ:

Được đóng lại.