Em muốn chuyển Code của sư phụ Ndu sang Add-Ins trên menu để sử dụng thì phải làm sao (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Dauthivan

Thành viên tiêu biểu
Tham gia
15/8/08
Bài viết
565
Được thích
327
Em có hỏi trong chủ đề về chuyển font tại http://www.giaiphapexcel.com/forum/...cho-toàn-bộ-các-file-excel-trong-Folder/page3 , đã được thày Ndu96081631 giúp cho tại bài số 30 của chủ đề.

Em rất muốn dùng Code đó làm Add-Ins, mục đích của em là nếu sau khi nạp vào, nó sẽ tạo ra như các Icon trên Menu Excel, em mới chỉ biết Save as sang đuôi dạng (Add-Ins) nhưng không biết tiếp theo sử dụng thế nào, xin nhờ thày và mọi người giúp cho.
 

File đính kèm

Bạn làm lần lượt như sau:
1. Mở excel, bấm chuột phải vào phía trên Menu Bar, chọn Customize
2. Cửa sổ customize hiện ra chọn Commands
3. Trong lisst Categories, kéo xuống chọn Macros
4. Trong list Commands, kéo thả Custom Menu Item lên Menu bar
5. Bấm chọn vào Menu vừa tạo lập, chọn Properties để tùy chọn các thuộc tính: tại phần Name bạn rename là Convert (Tên gì tùy ý bạn). Phần Assign Macro, bấm vào đó và điền tên của thủ tục mà bạn muốn, rồi bấm ok. Bấm tiếp Close.
Từ bây giờ, bạn có thể thực hiện convert trên menu vừa tạo lập.
Nếu là tôi thì tôi đặt phím tắt chứ không tạo menu như thế!
 
Có thể em không biết diễn tả bằng lời như thế nào, nhưng em muốn tại ra Menu như hình dưới
 

File đính kèm

  • untitled.JPG
    untitled.JPG
    34.6 KB · Đọc: 58
Có thể em không biết diễn tả bằng lời như thế nào, nhưng em muốn tại ra Menu như hình dưới
Bạn thử cái này rồi chế biến thêm nha. Còn nhiều nhược điểm trong code sẽ có các anh chị khác hổ trợ thêm

PHP:
Sub Auto_Open()
Dim mb As Object
    Call Auto_Close
    For Each mb In MenuBars
      With mb.Menus("Tools")
            Call .MenuItems.Add("Test Macro", "Testing")
      End With
    Next
End Sub
Sub Auto_Close()
Dim mi As Object
Dim mb As Object
    For Each mb In MenuBars
        For Each mi In mb.Menus("Tools").MenuItems
            If mi.Caption = "Test Macro" Then
                mi.Delete
            End If
        Next
    Next
End Sub
Sub Testing()
   MsgBox "Da Thanh Cong"
End Sub

Chẳng hiểu sao nó lòi ra tới 2 cái lệnh "Test Macro". Anh chị nào giúp với.
 
Lần chỉnh sửa cuối:
Có thể em không biết diễn tả bằng lời như thế nào, nhưng em muốn tại ra Menu như hình dưới

Nói chung có nhiều cách. Tôi dùng Excel 2007

Bạn nên thêm 1 module
Mã:
Private Sub Auto_Open()
Dim myMenu As CommandBarPopup
    Call DeleteMyMenu
    Set myMenu = CommandBars(1).Controls.Add(Type:=msoControlPopup, Temporary:=True)
    myMenu.Caption = "Ti" & ChrW(7871) & "ng Vi" & ChrW(7879) & "t"
    
    With myMenu.Controls
        With .Add(Type:=msoControlButton)
            .Caption = "T" & ChrW(7855) & "t Add-In TVEXCEL01"
            .OnAction = "TatAddin"
        End With
        With .Add(Type:=msoControlButton)
            .Caption = "Chuy" & ChrW(7875) & "n b" & ChrW(7843) & "ng m" & ChrW(227)
            .OnAction = "ChuyenBangMa"
        End With
        With .Add(Type:=msoControlButton)
            .Caption = ChrW(272) & ChrW(7885) & "c s" & ChrW(7889) & " ti" & ChrW(7871) & "ng Vi" & ChrW(7879) & "t"
            .OnAction = "DocSo"
        End With
        With .Add(Type:=msoControlButton)
            .Caption = "L" & ChrW(7883) & "ch 1920 - 2099"
            .OnAction = "Lich"
        End With
    End With
End Sub

Private Sub Auto_Close()
    DeleteMyMenu
End Sub

Private Sub DeleteMyMenu()
    On Error Resume Next
    CommandBars(1).Controls("Ti" & ChrW(7871) & "ng Vi" & ChrW(7879) & "t").Delete
End Sub

Private Sub TatAddin()
    MsgBox "Muc Tat Add-in"
End Sub

Private Sub ChuyenBangMa()
    MsgBox "Muc ChuyenBangMa"
End Sub

Private Sub DocSo()
    MsgBox "Muc Doc so"
End Sub

Private Sub Lich()
    MsgBox "Muc Lich"
End Sub
 
Sau 1 buổi vật vả với cái máy tính thì mình cũng mò ra được code này cho ngắn hơn chút và không bị 2 cái Caption trùng nha
Up lên cho các anh chị góp ý
PHP:
Sub Auto_Open()
      Call Auto_Close
      Call MenuBars(7).Menus("Tools").MenuItems.Add("Test Macro", "Testing")
End Sub
Sub Auto_Close()
   Dim MenuItem As Object
   For Each MenuItem In MenuBars(7).Menus("Tools").MenuItems
       If MenuItem.Caption = "Test Macro" Then
           MenuItem.Delete
       End If
   Next
End Sub
Sub Testing()
   MsgBox "Da Thanh Cong"
End Sub
 
Sau 1 buổi vật vả với cái máy tính thì mình cũng mò ra được code này cho ngắn hơn chút và không bị 2 cái Caption trùng nha
Up lên cho các anh chị góp ý
PHP:
Sub Auto_Open()
      Call Auto_Close
      Call MenuBars(7).Menus("Tools").MenuItems.Add("Test Macro", "Testing")
End Sub
Sub Auto_Close()
   Dim MenuItem As Object
   For Each MenuItem In MenuBars(7).Menus("Tools").MenuItems
       If MenuItem.Caption = "Test Macro" Then
           MenuItem.Delete
       End If
   Next
End Sub
Sub Testing()
   MsgBox "Da Thanh Cong"
End Sub

Sao Hải đã sửa rồi mà vẫn bám khư khư cái FOR là vậy? Mà nếu Hải dùng FOR thì cũng nên
Mã:
   For Each MenuItem In MenuBars(7).Menus("Tools").MenuItems
       If MenuItem.Caption = "Test Macro" Then
           MenuItem.Delete
           [B][COLOR=#ff0000]Exit For[/COLOR][/B]
       End If
   Next

Tức khi gặp menu của ta thì xóa và ra khỏi vòng FOR. Tất nhiên trong trường hợp này tôi nghi là mục menu của ta ở cuối cùng, nhưng về mặt code nên viết như thế. Nếu các add-in hoặc code khác cũng thêm menu thì rồi thứ tự sẽ thay đổi, code của ta làm sao mà kiểm soát được. Nguyên tắc là trong vòng FOR sau khi ta "gặp đối tác" rồi thì ra khỏi vòng lặp vì các vòng sau đó là vô ích. Tất nhiên nếu ta dự đoán là có nhiều đối tác thì ta chạy đến vòng cuối cùng.
-----------
Nhưng ta bỏ FOR thử xem
Mã:
Sub Auto_Close()
On Error Resume Next
   MenuBars(7).Menus("Tools").MenuItems("Test Macro").Delete
End Sub

Đây chỉ là ý kiến chủ quan của tôi thôi nhưng chính Hải muốn được góp ý đấy nhé
 
Sao Hải đã sửa rồi mà vẫn bám khư khư cái FOR là vậy? Mà nếu Hải dùng FOR thì cũng nên
Mã:
   For Each MenuItem In MenuBars(7).Menus("Tools").MenuItems
       If MenuItem.Caption = "Test Macro" Then
           MenuItem.Delete
           [B][COLOR=#ff0000]Exit For[/COLOR][/B]
       End If
   Next

Tức khi gặp menu của ta thì xóa và ra khỏi vòng FOR. Tất nhiên trong trường hợp này tôi nghi là mục menu của ta ở cuối cùng, nhưng về mặt code nên viết như thế. Nếu các add-in hoặc code khác cũng thêm menu thì rồi thứ tự sẽ thay đổi, code của ta làm sao mà kiểm soát được. Nguyên tắc là trong vòng FOR sau khi ta "gặp đối tác" rồi thì ra khỏi vòng lặp vì các vòng sau đó là vô ích. Tất nhiên nếu ta dự đoán là có nhiều đối tác thì ta chạy đến vòng cuối cùng.
-----------
Nhưng ta bỏ FOR thử xem
Mã:
Sub Auto_Close()
On Error Resume Next
   MenuBars(7).Menus("Tools").MenuItems("Test Macro").Delete
End Sub

Đây chỉ là ý kiến chủ quan của tôi thôi nhưng chính Hải muốn được góp ý đấy nhé

Cảm ơn anh đã góp ý giúp em. Lúc đầu em cũng đã bỏ For, chạy code bị lỗi khi không tìm thấy gì để xóa. Nhưng không hiểu sao lúc đó chẳng nhớ đến cái lệnh On Error. Lẻ ra em cũng phải nghĩ đến Exit For vậy mà chẳng nhớ luôn. Giờ mới ngã ngữa ra.
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom