Thêm nút bấm vào menu của VBE (Visual Basic Editor)

A. Lý do tôi muốn cho nút bấm vào menu của VBE?
B. Tiến hành
1. Chuẩn bị
2. Việc thêm nút bấm vào Menu
3. Nút bấm đã thêm vào menu, làm thế nào để xử lý được tiến hành khi ấn vào nút bấm này
4. Những bất tiện mà hiện tại có thể phán đoán được.
4.1 [Excel X for Mac] VBE trên Mac (Excel X for Mac) trở nên kỳ quặc (bỏ qua, vì THVBA chỉ quan tâm Excel trên Windown)
4.2 Dù ấn nút nhưng không có hiệu quả
4.3 [Excel X for Mac] Thêm nút bấm, khởi động lại Excel, nút bấm đã thêm bị mất (bỏ qua, không dịch)
4.4 Thay đổi vị trí nút bấm trên VBE (bỏ qua, không dịch)
4.5 [Excel X for Mac] Thêm buttonpopup (bỏ qua, không dịch)
5....
 
  • Love
Reactions: CRV
A. Lý do tôi muốn cho nút bấm vào menu của VBE?
THVBA: Chúng tôi khá phân vân khi đưa chủ đề này vào box thiết kế giao diện Excel hay Class thì hợp lý hơn.
Về bản chất, topic này nên thuộc Box class, nhưng xét về mục đích thì topic này nên thuộc box thiết kế giao diện excel. Cuối cùng sau khi bàn bạc, chúng tôi cho rằng nên phân loại theo mục đích, để tiện tra cứu sau này.

Vào thời điểm năm 2005, nếu bạn google chủ đề này, bạn sẽ không thể tìm thấy kiến thức liên quan.
Nếu tìm đọc trong phần Help của VBA cũng không tìm thấy kiến thức liên quan.
Theo thời gian topic gốc đăng tải, chúng tôi ghi nhận là vào thời điểm 4/2005, tức là chủ đề rất mới vào thời điểm đó. Ngay cả thời điểm bây giờ, chúng tôi cũng không tìm thấy topic nào chi tiết như vậy.

Trước đây, Võ Thành Thứ đã chia sẻ addin của nước ngoài, ở phần VBE cũng có rất nhiều nút bấm. Khối lượng code đồ sộ nên cũng rất khó để mổ xẻ. Tại thời điểm đó, các admin của THVBA đã đặt ra vấn đề, chúng ta có thể xây dựng một addin như vậy, trong đó chúng ta chủ động đưa các đoạn code hay dùng như Dictionary, FSO, ADO,... vào hay không?
Cho tới nay, các admin đã tiến hành thử nghiệm thành công, do đó topic này lập ra là để hệ thống lại lý thuyết, giúp các bạn hình dung con đường xây dựng các nút bấm trên VBE ra sao.

Topic này sẽ sử dụng tới class, là một phần kiến thức liên quan tới lập trình hướng đối tượng.
Bài viết trong topic này sẽ được chúng tôi cập nhật thường xuyên, cho tới khi chưa có thông báo topic kết thúc, các bạn không nên chen ngang bình luận. Chân thành cảm ơn!
 
B. Tiến hành
1. Chuẩn bị

-Đầu tiên, bạn cần thiết định cho file excel mà chúng ta sẽ chuẩn bị viết code chế độ security enable macro.
File => Options => Trus Center => Trust Center Settings => Macro Settings => Enable all macros
-Trong VBE phần reference tích chọn Microsoft Visual Basic for Applications Extensibility.
Hoặc sử dụng code để thiết định tự động :

Mã:
Sub AddExtensibility()
    On Error Resume Next
    ThisWorkbook.VBProject.References.AddFromGuid "{0002E157-0000-0000-C000-000000000046}", 2, 0 'Dang ki Extensibility 5.0
End Sub
Tham khảo .
 
B. Tiến hành
2. Việc thêm nút bấm vào Menu
2.1 Thêm nút bấm vào Excel Menu

Trước khi bàn về việc thêm nút bấm vào VBE, chúng ta sẽ bàn về việc thêm nút bầm vào Excel Menu. Từ cơ sở lý luận cơ bản này chúng ta sẽ tiến hành đưa nút bấm vào VBE sau.
Xin lưu ý, code này dường như thực hiện trên Office 2003, hiện tại tôi thử nghiệm trên Office 2019 thì chưa nhìn thấy tác dụng. Tôi rất mong các bạn có kiến thức thì bổ sung thêm cho tôi sau bài viết này.
Nào, chúng ta hãy bắt đầu. Lưu ý tôi đang thực hành trên Excel. Tôi nghĩ Word hay ứng dụng khác như PPT thì cũng tương tự.
Mã:
Sub macro1()
'
' Macro1
' Date : 2005.4.9  UserName : tuhocvba.net
'

'
    Application.CommandBars("Standard").Controls.Add Type:=msoControlButton, Id _
        :=375, Before:=15
End Sub
2.2 Application
Ở đây ta tham chiếu tới đối tượng Application, nó có nghĩa là ứng dụng Excel của chúng ta.
Nếu bạn muốn tìm hiểu kỹ hơn hãy tìm hiểu trong phần Help trên Excel hoặc thực hiện google giúp mình. Ở topic này thì việc tìm hiểu kỹ hơn có lẽ không cần thiết.
2.3 Application.CommandBars
Bây giờ chúng ta nhận được một tham chiếu tới đối tượng Collections trên thanh Menu, bạn có thể coi nó như là mảng một chiều.
CommandBars NameGiao diện
WorkSheet Menu Bar
Bạn cần đăng nhập để thấy đính kèm
Chart Menu Bar
Bạn cần đăng nhập để thấy đính kèm
Standard
Bạn cần đăng nhập để thấy đính kèm
Formatting
Bạn cần đăng nhập để thấy đính kèm
Tôi rất muốn bổ sung hình vẽ cho phù hợp với Office 2016 trở đi, do tôi cũng không hiểu rõ cho nên hai hình cuối ở trên tôi copy nguyên từ trong bài gốc. Hai hình trên cùng thi tôi tự chụp hình từ office 2016 tôi đang dùng.
2.4 Application.CommandBars("Standard")
Mã:
Application.CommandBars.Item("Standard")
Bạn cần đăng nhập để thấy đính kèm

2.5 Application.CommandBars("Standard").Controls
Thanh lệnh "Standard" có rất nhiều lệnh điều khiển (CommandBar Control)
CommandBar Control NameGiao diện
Create New
Bạn cần đăng nhập để thấy đính kèm
Open
Bạn cần đăng nhập để thấy đính kèm
Save
Bạn cần đăng nhập để thấy đính kèm
Set alarm
Bạn cần đăng nhập để thấy đính kèm
Print
Bạn cần đăng nhập để thấy đính kèm
Print Preview
Bạn cần đăng nhập để thấy đính kèm
Search Excel Help
Bạn cần đăng nhập để thấy đính kèm
 
B. Tiến hành
2. Việc thêm nút bấm vào Menu
2.6 Application.CommandBars("Standard").Controls.Add

Tóm lại khi muốn thêm một nút bấm (thanh lệnh điều khiển) ta có phương thức Add
Mã:
Application.CommandBars("Standard").Controls.Add
Bây giờ tôi quay lại giải thích code ở mục 2.1.
"Standard" là tên nhóm nút bấm (commandbars).
Type:=msoControlButton có nghĩa là tôi sẽ thêm một nút bấm. Ngoài nút bấm chúng ta còn có dropdown, combobox, popupmenu, ...
id:=375 chỉ ra rằng nút được thêm vào là nút ["-" Insert]
Before:=15 là vị trí nút bấm được thêm vào.
 
Top