Tạo Menu bằng VBA

Liên hệ QC

NguyenNgocSon

KEEP WALKING
Tham gia
4/4/08
Bài viết
280
Được thích
833
Nghề nghiệp
Ths. Cầu hầm
Các bước tạo hệ thống Menu như sau:
1. Phác thảo trình đơn cần tạo và chức năng tương ứng
2. Viết mã lệnh cho từng MenuItem. Mỗi đoạn mã lệnh này được chứa trong trình con dạng Sub.
3. Tham chiếu đến MenuBar nơi cần tạo trình đơn tùy biến.
4. Tạo Menu và MenuItem
5. Gán các lệnh đã tạo ở bước 2 cho từng MenuItem
Tham chiếu đến MenuBar :
Dim mnuBar As ComandBar
Set mnuBar=Application.Commands("Worksheet Menu Bar")
Để tạo Menu và MenuItem sử dụng phương thức Add có tong tập đối tượng Controls.
Ví dụ sau tạo hệ thống Menu :
1. Cấu trúc của Menu như sau :
*Ví dụ Menu
**Tinh tong
**Tinh tich
**Menu cap 2
***Lua chon 1
***Lua chon 2
(theo dạng sơ đồ cây)
2. Viết mã lệnh cho từng MenuItem :
Code:
HTML:
' Ma lenh cho MenuItem: Tinh tong
Sub Macro1()
  MsgBox "Ban da chon MenuItem: Tinh tong"
  End Sub
' Ma lenh cho MenuItem: Tinh tich
Sub Macro2()
  MsgBox "Ban da chon MenuItem: Tinh tich"
  End Sub
' Ma lenh cho MenuItem: Lua chon 1
Sub Macro3()
  MsgBox "Ban da chon MenuItem: Lua chon 1"
  End Sub
' Ma lenh cho MenuItem: Lua chon 2
Sub Macro4()
  MsgBox "Ban da chon MenuItem: Lua chon 2"
  End Sub
3. Tạo hệ thống Menu và gán mã lệnh cho từng MenuItem
Sub TaoMenu()
Dim cb As CommandBar
Dim cpop As CommandBarPopup
Dim cpop2 As CommandBarPopup
Dim cbtn As CommandBarButton
'Lay tham chieu den thanh trinh don
Set cb = Application.CommandBars("Worksheet Menu Bar")
'Tao Menu: "Vi du Menu" (CommandBarPopup)
Set cpop = cb.Controls.Add(msoControlPopup, , , , True)
cpop.Caption = "&Vi du Menu"
'Tao Menu: "Tinh tong" (CommandBarButton)
'Them MenuItem vao Menu1:"Menu Vi du"
Set cbtn = cpop.Controls.Add(msoControlButton, , , , True)
'Gan thuoc tinh cho MenuItem
cbtn.Caption = "Tinh tong" 'Gan tieu de
cbtn.OnAction = "Macro1" 'Gan ma lenh
'Tao Menu: "Tinh tich" (CommandBarButton)
'Them MenuItem vao Menu1:"Menu Vi du"
Set cbtn = cpop.Controls.Add(msoControlButton, , , , True)
'Gan thuoc tinh cho MenuItem
cbtn.Caption = "Tinh tich" 'Gan tieu de
cbtn.OnAction = "Macro2" 'Gan ma lenh
'Tao "Menu cap 2" (CommandBarPopup)
'Day la MenuItem bat dau mot nhom trinh don khac
Set cpop2 = cpop.Controls.Add(msoControlPopup, , , , True)
cpop2.Caption = "Menu cap 2"
'Them SeparatorBar vao phia truoc Menu nay
cpop2.BeginGroup = True
'Tao MenuItem: "Lua chon 1" (CommandBarButton)
Set cbtn = cpop2.Controls.Add(msoControlButton, , , , True)
cbtn.Caption = "Lua chon &1"
cbtn.OnAction = "Macro3"
'Tao MenuItem: "Lua chon 2" (CommandBarButton)
Set cbtn = cpop2.Controls.Add(msoControlButton, , , , True)
cbtn.Caption = "Lua chon &2"
cbtn.OnAction = "Macro4"
End Sub
4.Xóa trình đơn tùy biến:
Sub XoaMenu()
Dim cb As CommandBar
Dim cbp As CommandBarPopup
'Lay tham chieu den thanh trinh don
Set cb = Application.CommandBars("Worksheet Menu Bar")
On Error Resume Next
'Tham chieu den thanh trinh don "Vi du Menu"
Set cbp = cb.Controls("Vi du Menu")
If Not IsNull(cbp) Then
cbp.Delete
End If
End Sub
Chúc mọi người thành công!!!
Thân!!!
(Xin lỗi Addmin post 2 bài cùng nội dung vì thấy chỗ này có nhiều người mới học hơn.Cám ơn nhiều)
 
File ví dụ đây.
Thân.
 

File đính kèm

Upvote 0
Bổ sung thêm code cho bài tạo Menu bằng VBA:
Sub Phimtat()
'Tao phim tat cho MenuItem
Application.MacroOptions Macro:="Macro1", HasShortcutKey:="True", ShortcutKey:="T"
'Phim tat cau MenuItem Tinh tong la:"Ctrl+Shift+T"
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
Cám ơn bạn NguyenNgocSon rất nhiều! Bạn đã giải thích tường tận và cho ví dụ cụ thể về cách tạo 1 menu cấp một và cấp hai. Nhưng nhờ bạn tư vấn thêm một số ý sau đây:
1. Có cách nào viết code để gọi macro "Taomenu" và "Xoamenu" nằm hẳn trong 1 module thay vì để đoạn code nằm trong Workbook. Mục đích là có thể save cả đoạn code thành file *.xla để có thể AddIn mà khi Excel khởi động load file *.xla tự động tạo menu, và khi Excel thoát tự xóa menu.
2. Trong các menu thường có gán theo phím tắt. Làm cách nào có thể gán phím tắt vào menu mà nó tự canh phải cho đẹp mắt.
Xin chỉ giáo thêm! Cám ơn nhiều!
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom