Phương pháp tạo Addin chạy macro từ popup menu chuột phải

tuhocvba

Administrator
Thành viên BQT
Trong một số addin chia sẻ gần đây, chúng ta nhận thấy chúng đều có một cách sử dụng giống nhau.
1. Hoán đổi data:
2. Xuất ảnh từ vùng Range trên Excel:
Bạn cần đăng nhập để thấy đính kèm


Sau đây tôi sẽ giới thiệu cấu trúc code để tạo một Addin kiểu như trên.
Bạn cần đăng nhập để thấy đính kèm

Cấu trúc một Addin kiểu như trên sẽ bao gồm Code trên Thisworkbook, và Code trên Module (tên Module tùy ý, tuy nhiên để tránh tên các Module trùng nhau-trường hợp bạn sử dụng nhiều Addin, tôi khuyến nghị nên đặt tên Module chứa ký tự ngày tháng năm. Ví dụ: Module Name = tuhocvba200311.

1. Code trên Thisworkbook.
Để thêm nút bấm trên menu chuột phải thì ta phải có một thủ tục để add nút bấm. Tuy nhiên nếu nút bấm đã tồn tại trên menu chuột phải rồi, thì việc add thêm nút bấm trùng lặp sẽ có thể tạo ra lỗi. Do đó ta phải kiểm tra và xóa đi nếu có nút bấm trùng tên.
Bạn cần đăng nhập để thấy đính kèm


Check_Addin : Thủ tục này sẽ kiểm tra và xóa nếu đã tồn tại nút bấm trùng lặp. Thủ tục này phải được tiến hành trước.
Nếu không có vấn đề gì, thì mới tiến hành thêm nút bấm.
Add_Addin : Thủ tục này sẽ tiến hành thêm nút bấm vào menu chuột phải.

Khi cài đặt Addin, chúng ta có sự kiện: Workbook_AddinInstall , sự kiện này sẽ được viết code trong Thisworkbook.
Bạn cần đăng nhập để thấy đính kèm

Khi gỡ bỏ Addin, chúng ta có sự kiện: Workbook_AddinUninstall , sự kiện này sẽ được viết code trong Thisworkbook. Và đương nhiên khi hủy bỏ Addin, điều chúng ta mong muốn chính là xóa bỏ menu popup mà chúng ta đã trót tạo ra.
Bạn cần đăng nhập để thấy đính kèm


Như vậy code cho Thisworkbook là:
Mã:
Option Explicit
'Thisworkbook
Const conAddinName_TenTuyY As String = "Ten_PopUp_HienThi"

Private Sub Workbook_AddinInstall()
    Call Check_Addin
    Call Add_Addin
End Sub

Private Sub Workbook_AddinUninstall()
    Call Check_Addin
End Sub

Private Sub Workbook_Open()
    Call Check_Addin
    Call Add_Addin
End Sub

Private Sub Add_Addin()
    With Excel.Application
        With .CommandBars("Cell").Controls.Add(Temporary:=True)
            .FaceId = 271
            .BeginGroup = True
            .Caption = conAddinName_TenTuyY
            .OnAction = "SaveImage"
        End With
        With .CommandBars("Column").Controls.Add(Temporary:=True)
            .FaceId = 271
            .BeginGroup = True
            .Caption = conAddinName_TenTuyY
            .OnAction = "SaveImage"
        End With
    End With
End Sub

Private Sub Check_Addin()
    Dim objCC As CommandBarControl
    With Excel.Application.CommandBars
        With .Item("Cell")
            For Each objCC In .Controls
                If objCC.Caption = conAddinName_TenTuyY Then
                    .Controls.Item(conAddinName_TenTuyY).Delete: Exit For
                End If
            Next
        End With
        With .Item("Column")
            For Each objCC In .Controls
                If objCC.Caption = conAddinName_TenTuyY Then
                    .Controls.Item(conAddinName_TenTuyY).Delete: Exit For
                End If
            Next
        End With
    End With
End Sub
Ten_PopUp_HienThi : Tên này đặt tùy ý theo ý các bạn, đặt như thế nào thì hiển thị ra bên ngoài như vậy.
.FaceId : Là hình ảnh hiển thị trên Popup. Bạn có thể google từ khóa "FaceId" để tham khảo các mẫu ảnh khác nhau.
Bạn cần đăng nhập để thấy đính kèm


Chú ý: Ở code trên tôi đưa ra ví dụ:
Mã:
.OnAction = "SaveImage"
, Có nghĩa là tên thủ tục viết trên Module sau này sẽ là SaveImage. Tuy nhiên bạn có thể đặt tên tùy ý theo ý các bạn.

2. Viết code trên Module:
Viết code trên Module chính là viết nội dung công việc mà Macro sẽ thực hiện. Cái này là việc cá nhân của các bạn. Trong ví dụ này, trên Module, tôi phải viết một thủ tục có tên là SaveImage.
Bạn cần đăng nhập để thấy đính kèm


Kết luận: Cấu trúc của loại Addin này thì phần code Thisworkbook có thể copy và thay tên đổi họ, sửa lại FaceId theo ý các bạn. Hầu như bạn không phải làm gì.
Còn công việc mà Macro sẽ thực hiện, phần code này sẽ viết trên Module, và đây là việc chỉ riêng bạn làm được mà thôi.
 
Top