Vấn đề hiển thị Menu tự tạo trong Excel 2007

Liên hệ QC
Xin lỗi đã làm phiền bạn nhe, vì mình chỉ ko làm được là đánh tiếng việt thôi. Cám ơn bạn đã nhiệt tình giải thích
Bạn dùng Unikey chắc chắn gõ được tiếng Việt. Sau đó chỉ cần nhấn "Tạo chuỗi" rồi copy nội dung của secret.txt thôi. Quá đơn giản.
File bạn mở lên bị thế này. Không biết bị lỗi gì
Xóa toàn bộ Module1 vì không dùng đến. Chuyện lỗi là do code chỉ viết cho 32 bit thôi. Nhưng Module1 là không cần thiết -> Xóa
 
Lần chỉnh sửa cuối:
nó lỗi không làm được
218943
Bài đã được tự động gộp:

Cám ơn batman1 rất nhiều nhe mình làm được rồi.
 
Trước tiên vài lời về cấu trúc nội dung mà ta sẽ phải soạn thảo.
Nội dung bắt đầu bằng 2 thẻ:
Mã:
<customUI xmlns="[URL]http://schemas.microsoft.com/office/2006/01/customui[/URL]" >
<ribbon>
và kết thúc bằng
Mã:
</ribbon>
</customUI>
Phần trên là bắt buộc. Mọi cái ta thêm vào thì ta viết trong thẻ:
Mã:
<ribbon>
...
</ribbon>
Tiếp theo nếu ta muốn thêm menu vào nút Office thì ta phài có thẻ
Mã:
<officeMenu>
...
</officeMenu>
Còn nếu ta muốn thêm vào thẻ có sẵn hoặc tạo thẻ mới thì ta phải có thẻ
Mã:
<tabs>
...
</tabs>
Và trong thẻ đó ta phải có "bằng này" thẻ
Mã:
<tab>
...
</tab>
nếu ta muốn thêm menu vào "bằng này" thẻ có sẵn - tạo mới.
Trong mỗi thẻ
Mã:
<officeMenu>
...
</officeMenu>
hoặc
<tab>
...
</tab>
thì nội dung tùy thuộc vào menu mà ta định thêm vào. Mục menu đơn? Nhóm menu? v...v
Tôi đã soạn hình như là đủ mọi kiểu menu.
Tóm lại cấu trúc của văn bản soạn cho Custom UI Editor là:
Mã:
<customUI xmlns="[URL]http://schemas.microsoft.com/office/2006/01/customui[/URL]" >
<ribbon>
<officeMenu>
...
</officeMenu>
<tabs>
<tab>
...
</tab>
...
<tab>
...
</tab>
</tabs>
</ribbon>
</customUI>

Trong ví dụ đính kèm tôi gộp cả 3 loại ví dụ. Tức thêm menu "ở mọi nơi"

--------------------
Một trong các cách thêm các nút lệnh, trình đơn vào trong dải menu của Excel là cách dùng nội dung XML. Cách làm như sau:

1. Cần tải về và cài đặt Custom UI Editor. Tôi cũng đã đính kèm Custom UI Editor ở dưới
Trước khi cài có thể cần cài .NET framework ≥ 3

2. Soạn nội dung mà ta sẽ phải dán vào cửa sổ của Custom UI Editor
Tùy theo việc ta định làm gì mà nội dung khác nhau. Sau đây là 3 nội dung ví dụ:

a. Thêm nút hoặc menu vào Backstage hoặc nút Office. Nội dung:
<!-- Thêm mục mới trong danh sách menu hiển thị sau khi nhấn vào nút Office. Nội dung được thêm vào tập tin chan_dai.xlsm -->
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" >
<!-- Thêm 1 nút và 1 menu có 7 lựa chọn vào menu của Excel trong nút Office-->
<!-- Thêm 1 nút vào menu Print của Excel và thêm 1 nút vào menu Prepare-->
<!-- chú ý cách dùng &amp; để gạch dưới một chữ cái trong tên của menu -->

<ribbon>
<officeMenu>
<!-- Thêm 1 nút vào menu -->
<button id="customButton1" label="&amp;Nút của tôi" onAction="Macro1" imageMso="DirectRepliesTo" />
<!-- Thêm 1 nút và 1 menu có 7 lựa chọn vào menu của Excel -->
<menu id="MyDropdownMenu" label="&amp;Trình đơn của tôi" imageMso="HappyFace" >
<button id="customButton2" label="Nút thứ 2" onAction="Macro2" imageMso="TextAlignGallery" />
<button id="customButton3" label="Nút thứ 3" onAction="Macro3" imageMso="TextAlignGallery" />
<button id="customButton4" label="Nút thứ 4" onAction="Macro4" imageMso="TextAlignGallery" />
<button id="customButton5" label="Nút thứ 5" onAction="Macro5" imageMso="TextAlignGallery" />
<button id="customButton6" label="Nút thứ 6" onAction="Macro6" imageMso="TextAlignGallery" />
<button id="customButton7" label="Nút thứ 7" onAction="Macro7" imageMso="TextAlignGallery" />
<button id="customButton8" label="Nút thứ 8" onAction="Macro8" imageMso="TextAlignGallery" />
</menu>
<!-- Thêm 1 nút vào menu Print của Excel -->
<splitButton idMso="FilePrintMenu">
<menu>
<button id="customButton9" label="Nút thứ 9" onAction="Macro9" imageMso="FilePrint" description="Miêu tả gì đó"/>
</menu>
</splitButton>
<!-- Thêm 1 nút vào menu Prepare của Excel -->
<menu idMso="FilePrepareMenu">
<button id="customButton10" label="Nút thứ 10" onAction="Macro10" imageMso="HappyFace" description="Một chút miêu tả"/>
</menu>
</officeMenu>
</ribbon>
</customUI>

b. Thêm nút hoặc menu vào thẻ có sẵn của Excel. Nội dung:
<!-- Thêm nút hoặc menu vào một thẻ nào đó, vd. thẻ Home -->

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">

<ribbon>
<tabs>
<!-- thêm 1 nhóm gồm 3 nút và menu có 5 mục vào thẻ Home -->
<tab idMso="TabHome" >
<group id="customGroup1" label="Nhóm gì đó" insertAfterMso="GroupEditingExcel" >
<button id="customButton1" label="Nút thứ 1" size="normal" onAction="Macro1" imageMso="DirectRepliesTo" />
<button id="customButton2" label="Nút thứ 2" size="normal" onAction="Macro2" imageMso="AccountMenu" />
<button id="customButton3" label="Nút thứ 3" size="normal" onAction="Macro3" imageMso="RegionLayoutMenu" />
<separator id="MySeparator1" />
<menu id="MyDropdownMenu" label="Menu của riêng tôi" size="large" imageMso="TextAlignGallery" >
<button id="customButton4" label="Nút thứ 4" onAction="Macro4" imageMso="TextAlignGallery" />
<button id="customButton5" label="Nút thứ 5" onAction="Macro5" imageMso="TextAlignGallery" />
<button id="customButton6" label="Nút thứ 6" onAction="Macro6" imageMso="TextAlignGallery" />
<button id="customButton7" label="Nút thứ 7" onAction="Macro7" imageMso="TextAlignGallery" />
<button id="customButton8" label="Nút thứ 8" onAction="Macro8" imageMso="TextAlignGallery" />
</menu>
</group>
</tab>
</tabs>
</ribbon>
</customUI>

c. Thêm thẻ mới vào Ribbon. Nội dung:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<!-- Thêm thẻ mới vào Ribbon -->
<ribbon>
<tabs>
<tab id="MyCustomTab" label="Thẻ riêng của tôi" insertAfterMso="TabHome">
<!-- thêm nhóm gồm 2 nút -->
<group id="customGroup1" label="Nhóm thứ 1">
<button id="customButton1" label="Nút thứ 1" size="normal" onAction="Macro1" imageMso="PrintPreviewShrinkOnePage" />
<separator id="MySeparator1" />
<button id="customButton2" label="Nút thứ 2" size="large" onAction="Macro2" imageMso="ReviewPreviousComment" />
</group>
<!-- thêm nhóm gồm menu có 2 nút -->
<group id="customGroup2" label="Nhóm thứ 2">
<menu id="MyDropdownMenu" label="Menu của tôi" size="large" imageMso="TextAlignGallery" >
<button id="customButton3" label="Nút thứ 3" onAction="Macro3" imageMso="TextAlignGallery" />
<button id="customButton4" label="Nút thứ 4" onAction="Macro4" imageMso="TextAlignGallery" />
</menu>
</group>
<!-- thêm nhóm gồm splitButton trong đó có 1 nút và 1 menu có 2 nút -->
<group id="customGroup3" label="Nhóm thứ 3">
<splitButton id="mySplitButton" size="large">
<button id="customButton5" imageMso="HappyFace" label="Nút thứ 5" supertip="Đây là splitButton." onAction="Macro5"/>
<menu id="splitMenu" itemSize="large">

<button id="customButton6" imageMso="FormatPainter" label="Nút thứ 6" onAction="Macro6" description="Miêu tả gì đó"/>
<button id="customButton7" imageMso="FormatPainter" label="Nút thứ 7" onAction="Macro7" description="Miêu tả nhé"/>
</menu>
</splitButton>
</group>
<!-- thêm nhóm gồm 2 cụm nút, mỗi cụm 2 nút -->
<group id="customGroup4" label="Nhóm thứ 4">
<buttonGroup id="mybuttonGroup1">
<button id="customButton8" label="Nút thứ 8" showLabel="false" onAction="Macro8" imageMso="ReviewPreviousComment" />
<button id="customButton9" label="Nút thứ 9" showLabel="false" onAction="Macro9" imageMso="ReviewPreviousComment" />
</buttonGroup>
<buttonGroup id="mybuttonGroup2">
<button id="customButton10" label="Nút thứ 10" showLabel="false" onAction="Macro10" imageMso="HappyFace" />
<button id="customButton11" label="Nút thứ 11" showLabel="false" onAction="Macro11" imageMso="HappyFace" />
</buttonGroup>
</group>
</tab>
</tabs>
</ribbon>
</customUI>

3. Các bước thực hiện
a. Mở Excel --> lưu lại với tên vd. chan_dai.xlsm --> đóng Excel

b.

View attachment 92948



Mở Custom UI Editor --> mởi tập tin chan_dai.xlsm vừa lưu --> chuột phải vào chan_dai.xlsm và chọn "Office 2007 (2010) Custom UI Part --> dán nội dung ở phần 2 vào cửa sổ bên phải --> nhấn nút cuối cùng trên dải menu (Generate Callbacks) --> bôi đen nội dung vừa được tạo ra và dán vào bộ nhớ đệm (Ctrl + C) --> click vào chan_dai.xlsm ở nửa trái để hiển thị lại nội dung viết ở phần 2 --> lưu lại tập tin chan_dai.xlsm --> đóng Custom UI Editor
Chú ý: Khi mở Excel thì Excel xóa clipboard nên hoặc ta mở Excel xong rồi mới dán vào clipboard hoặc dán vào clipboard rồi từ đó dán tạm thời vào notepad rồi mở Excel.

c. Mở Excel --> mở tập tin chan_dai.xlsm --> ta đã thấy có menu mà ta thêm vào. Nhưng nhấn chuột vào thì chưa có gì, thậm chí Excel thông báo lỗi, vì ta chưa viết code để gán cho các nút ta thêm vào.
Nhấn Alt + F11 để mở VBA. Nhấn Insert --> Module để thêm môđun --> Dán code đã lưu vào bộ nhớ đệm ở điểm b (Ctrl + V) --> bổ sung code để phục vụ các nút.
Chọn save để lưu lại chan_dai.xlsm

d. Nếu chan_dai.xlsm ta định làm addin thì ta làm như sau:
Trong cửa sổ VBA ta nhấn vào ThisWorkbook --> chuyển IsAddin sang TRUE --> chọn save --> VBA chỉ cho phép ta lưu lại thành chan_dai.xlam.
chan_dai.xlam ta thêm vào Add_ins để mỗi lần mở Excel là có.
Chào các bạn
Tôi muốn thêm menu trên excel 2010
Ở bài 7 tôi đã thêm được Menu (xem hình)nó nằm trong Menu Home
1571121493908.png
Cũng đã tạo được Addin chan_dai.xlsm
Khi nhấn Nút thứ 1 thì nó ra hình dưới
1571121519750.png
Và thấy code trong module1:
'Callback for customButton1 onAction
Sub Macro1(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton21 onAction
Sub Macro2(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton24 onAction
Sub Macro3(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton25 onAction
Sub Macro4(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton28 onAction
Sub Macro5(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton31 onAction
Sub Macro6(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton42 onAction
Sub Macro7(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton44 onAction
Sub Macro8(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton36 onAction
Sub Macro9(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton38 onAction
Sub Macro10(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton40 onAction
Sub Macro11(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton22 onAction
Sub Macro12(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton46 onAction
Sub Macro13(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton26 onAction
Sub Macro14(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton29 onAction
Sub Macro15(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton32 onAction
Sub Macro16(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton43 onAction
Sub Macro17(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton45 onAction
Sub Macro18(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton41 onAction
Sub Macro19(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton23 onAction
Sub Macro20(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton47 onAction
Sub Macro21(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton27 onAction
Sub Macro22(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton30 onAction
Sub Macro23(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton33 onAction
Sub Macro24(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton34 onAction
Sub Macro25(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton35 onAction
Sub Macro26(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton37 onAction
Sub Macro27(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton39 onAction
Sub Macro28(control As IRibbonControl)
MsgBox control.ID
End Sub
'Callback for customButton20 onAction
Sub Macro29(control As IRibbonControl)
MsgBox control.ID
End Sub

Bây giờ tôi muốn đưa 1 đoạn code ở dưới vào để tạo addin
Sub DelObjects()
Dim i As Long, wks As Worksheet
On Error Resume Next
Set wks = ActiveSheet
For i = 1 To 10000
wks.Shapes(1).Delete
Next
MsgBox "Còn " & wks.Shapes.Count & " objects"
End Sub
(1)Đưa code vào chỗ nào để bấm vào nút thứ 1 thì nó chạy code?
(2)Muốn đổi tên “Nút thứ 1” thành “DelObjects” thì đổi như thế nào?
(3)Trong mục “Menu của riêng tôi” nó có 5 nút từ Nút thứ 4 -> Nút thứ 8: Nếu tôi muốn thêm các nút thì thế nào ạ?
Tôi đã đọc các bài của mục này nhưng vẫn chưa biết làm,
Xin các bạn hướng dẫn tôi chi tiết vì tôi không biết nhiều về máy tính
Xin cảm ơn các bạn
 
Khi nhấn Nút thứ 1 thì nó ra hình dưới
View attachment 226667
Bạn đang nói tới menu được tạo bởi nội dung sau trong XML
<group id="customGroup1" label="Nho&#769;m gi&#768; &#273;o&#769;" insertAfterMso="GroupEditingExcel" >
<button id="customButton40" label="Nu&#769;t th&#432;&#769; 1" size="normal" onAction="Macro11" imageMso="DirectRepliesTo" />
<button id="customButton22" label="Nu&#769;t th&#432;&#769; 2" size="normal" onAction="Macro12" imageMso="AccountMenu" />
<button id="customButton46" label="Nu&#769;t th&#432;&#769; 3" size="normal" onAction="Macro13" imageMso="RegionLayoutMenu" />

<separator id="MySeparator1" />

<menu id="MyDropdownMenu2" label="Menu cu&#777;a ri&#234;ng t&#244;i" size="large" imageMso="TextAlignGallery" >
<button id="customButton26" label="Nu&#769;t th&#432;&#769; 4" onAction="Macro14" imageMso="TextAlignGallery" />
<button id="customButton29" label="Nu&#769;t th&#432;&#769; 5" onAction="Macro15" imageMso="TextAlignGallery" />
<button id="customButton32" label="Nu&#769;t th&#432;&#769; 6" onAction="Macro16" imageMso="TextAlignGallery" />
<button id="customButton43" label="Nu&#769;t th&#432;&#769; 7" onAction="Macro17" imageMso="TextAlignGallery" />
<button id="customButton45" label="Nu&#769;t th&#432;&#769; 8" onAction="Macro18" imageMso="TextAlignGallery" />
</menu>
</group>
</tab>

Trong code trên có đoạn
<button id="customButton40" label="Nu&#769;t th&#432;&#769; 1" size="normal" onAction="Macro11" imageMso="DirectRepliesTo" />
Tức sẽ có nút có id là "customButton40", hiển thị là "Nút thứ 1", mà khi click nó thì sẽ chạy Macro "Macro11"

Tức khi click "Nút thứ 1" thì chạy
Mã:
'Callback for customButton40 onAction
Sub Macro11(control As IRibbonControl)
    MsgBox control.ID
End Sub
Và thấy code trong module1:
...
'Callback for customButton40 onAction
Sub Macro11(control As IRibbonControl)
MsgBox control.ID
End Sub
...
Bây giờ tôi muốn đưa 1 đoạn code ở dưới vào để tạo addin
Sub DelObjects()
Dim i As Long, wks As Worksheet
On Error Resume Next
Set wks = ActiveSheet
For i = 1 To 10000
wks.Shapes(1).Delete
Next
MsgBox "Còn " & wks.Shapes.Count & " objects"
End Sub
(1)Đưa code vào chỗ nào để bấm vào nút thứ 1 thì nó chạy code?
MsgBox chỉ là ví dụ về code. Trong tập tin thực thì thay MsgBox control.ID bằng code của mình thôi.
Mã:
'Callback for customButton40 onAction
Sub Macro11(control As IRibbonControl)
    DelObjects
End Sub
(2)Muốn đổi tên “Nút thứ 1” thành “DelObjects” thì đổi như thế nào?
Trong code trên có đoạn
label="Nu&#769;t th&#432;&#769; 1"
Vậy thì đổi thành
Mã:
label="DelObjects"
(3)Trong mục “Menu của riêng tôi” nó có 5 nút từ Nút thứ 4 -> Nút thứ 8: Nếu tôi muốn thêm các nút thì thế nào ạ?
Lấy ví dụ nút 4
<button id="customButton26" label="Nu&#769;t th&#432;&#769; 4" onAction="Macro14" imageMso="TextAlignGallery" />

Nhìn kỹ thì thấy 5 nút đều có dạng
<button id="chuỗi định danh nào đó. ID phải là duy nhất trong XML" label="Nhãn hiệu hiển thị trên nút" onAction="Têm macro sẽ được thực thi khi nút được nhấn" imageMso="Một image nào đó" />

Ví dụ bạn muốn thêm nút và gán cho nó ID là "secretButton", hiển thị là "My secret button" mà khi nhấn thì thực thi macro "DoSecretOperation", và có icon là "mặt cười" thì code là
<button id="secretButton" label="My secret button" onAction="DoSecretOperation" imageMso="HappyFace" />

Tức bạn phải: lưu rồi đóng tập tin chan_dai_xlsm -> mở Custom UI Editor -> chọn mở tập tin chan_dai.xlsm -> thêm code ở trên -> nhấn save -> nhấn "Generate Callbacks"

Bạn sẽ thấy ngoài các callback đã có trước thì bây giờ Custom UI Editor tạo hộ bạn callback
Mã:
'Callback for secretButton onAction
Sub DoSecretOperation(control As IRibbonControl)

End Sub

Đóng Custom UI Editor -> mở chan_dai.xlsm -> vào VBE -> thêm callback ở trên -> viết code trong sub DoSecretOperation
 
Cảm ơn sự hướng dẫn tận tình của bạn
Ở bài trên bạn có nói:
Bạn đang nói tới menu được tạo bởi nội dung sau trong XML
Tôi thực sự không biết file XML này ở đâu & mở nó = cái gì? vì code trong File Chân dài chỉ có 1 module1 (đã nói ở trên)
Ở bài 7 của bạn Tôi chỉ biết tải 2 file nén về, rồi chạy OfficeCustomUIEditor.msi
Rồi chạy file chan_dai.xlsm sau đó chọn file này làm addin
 
Nói tóm lại là tìm XML ở đâu để chỉnh trong đó, đó bác!
 
Nói tóm lại là tìm XML ở đâu để chỉnh trong đó, đó bác!
Như thường lệ tôi viết rất kỹ, nắm tay dẫn đi từng bước, mất rất nhiều thời gian. Nhưng người khác không chịu đọc. Tiếc thời gian của mình? Thời gian của người khác thì không tiếc?

Trích bài #7
Mở Custom UI Editor --> mởi tập tin chan_dai.xlsm vừa lưu --> chuột phải vào chan_dai.xlsm và chọn "Office 2007 (2010) Custom UI Part --> dán nội dung ở phần 2 vào cửa sổ bên phải --> nhấn nút cuối cùng trên dải menu (Generate Callbacks) --> bôi đen nội dung vừa được tạo ra và dán vào bộ nhớ đệm (Ctrl + C) --> click vào chan_dai.xlsm ở nửa trái để hiển thị lại nội dung viết ở phần 2 --> lưu lại tập tin chan_dai.xlsm --> đóng Custom UI Editor
...
Một trong các cách thêm các nút lệnh, trình đơn vào trong dải menu của Excel là cách dùng nội dung XML. Cách làm như sau:

1. Cần tải về và cài đặt Custom UI Editor. Tôi cũng đã đính kèm Custom UI Editor ở dưới
Trước khi cài có thể cần cài .NET framework ≥ 3

2. Soạn nội dung mà ta sẽ phải dán vào cửa sổ của Custom UI Editor

Trích bài #24
Tức bạn phải: lưu rồi đóng tập tin chan_dai_xlsm -> mở Custom UI Editor -> chọn mở tập tin chan_dai.xlsm -> thêm code ở trên -> nhấn save -> nhấn "Generate Callbacks"

Xem
chandai.JPG
 
Mới đầu mình cũng mò cũng không biết làm sao để mở ? Sau khi đã mò ra thì cũng không dùng nữa hihi. Thấy bạn hỏi mình nhớ lại mình khi xưa hihihi
 
Mới đầu mình cũng mò cũng không biết làm sao để mở ? Sau khi đã mò ra thì cũng không dùng nữa hihi. Thấy bạn hỏi mình nhớ lại mình khi xưa hihihi
Nhưng bạn không biết mở cái gì?
Tôi viết rất rõ
Mở Custom UI Editor --> mởi tập tin chan_dai.xlsm vừa lưu
Custom UI Editor là một chương trình. "Mở Paint, mở notepad, mở Excel, mở Word, mở Delphi " bạn có hiểu không? Nếu hiểu thì tại sao lại không hiểu "mở Custom UI Editor"?

Còn lý luận kiểu: "tôi không biết tìm nó (hàm ý nói về Custom UI Editor) ở đâu" cũng không thuyết phục. Vì khi ai đó nói: Mở Paint, mở notepad, mở Excel, mở Word, mở Delphi, mà bạn biết mở thì chứng tỏ bạn biết phải làm những gì. Vậy tại sao khi tới "mở Custom UI Editor" thì bạn lại không biết gì?

Tóm lại bạn không biết mở cái gì? Và bạn không biết mở do không ai chỉ dẫn hay người ta chỉ dẫn không rõ ràng? Vì tôi nghĩ tôi đã chỉ rất rõ ràng. Bạn không thể bỏ cái ai đó đã không hướng dẫn bạn hoặc hướng dẫn chung chung và cái tôi hướng dẫn cụ thể vào cùng một giuộc được.
 
Hihi ý em nói là lúc mới ai cũng bở ngỡ chứ không phải là bài viết của anh không rõ ràng.
 
batman1 cho hỏi
Muốn thay đổi icon thì có bản danh sách nào để đổi không, cảm ơn bạn
 
Thầy @batman1 ơi, sao em có bắt chước làm Menu Ribbon với đoạn code này:
Mã:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
  <ribbon startFromScratch="true">
</ribbon>
    <backstage>  
        <button idMso="FileSave" visible="true"/>
        <button idMso="FileSaveAs" visible="false"/>
        <button idMso="FileOpen" visible="false"/>
        <button idMso="FileClose" visible="false"/>
        <button idMso="ApplicationOptionsDialog" visible="false"/>
        <button idMso="FileExit" visible="false"/>
        <button idMso="HistoryTab" visible="false"/>
        <button idMso="OfficeFeedback" visible="false"/>
        <button idMso="FileSave" visible="false"/>
        <tab idMso="TabInfo" visible="false"/>
        <tab idMso="TabRecent" visible="false"/>
        <tab idMso="TabNew" visible="false"/>
        <tab idMso="TabPrint" visible="false"/>
        <tab idMso="TabShare" visible="false"/>
        <tab idMso="TabHelp" visible="false"/>
        <tab idMso="TabPublish" visible="false"/>
        <tab idMso="TabSave" visible="false"/>      
        <tab idMso="TabOfficeStart" visible="false"/>
    <tab idMso="Publish2Tab" visible="false"/>
    <tab idMso="TabOfficeFeedback" visible="false"/>
    </backstage>
<tabs>  
<tab id="tabQLCongViec" label="Qu&#7843;n l&#253; c&#244;ng vi&#7879;c" visible="true">
<group id="NghiepVuNXT" label="Nghi&#7879;p V&#7909; NXT">
<button id="frmPhieuNhap" label="Nh&#7853;p Ph&#7909; Li&#7879;u" onAction="Macro1" imageMso="TableRowsInsertAboveWord" />
<button id="frmPhieuXuat" label="Xu&#7845;t Ph&#7909; Li&#7879;u" onAction="Moacro2" imageMso="TableRowsInsertBelowWord" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
thì khi nhấn CallBacks thì báo lỗi dòng 34 vị trí số 3 ạ. mong Thầy xem dùm em ạ.
 
Thầy @batman1 ơi, sao em có bắt chước làm Menu Ribbon với đoạn code này:
Mã:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
  <ribbon startFromScratch="true">
</ribbon>
    <backstage> 
        <button idMso="FileSave" visible="true"/>
        <button idMso="FileSaveAs" visible="false"/>
        <button idMso="FileOpen" visible="false"/>
        <button idMso="FileClose" visible="false"/>
        <button idMso="ApplicationOptionsDialog" visible="false"/>
        <button idMso="FileExit" visible="false"/>
        <button idMso="HistoryTab" visible="false"/>
        <button idMso="OfficeFeedback" visible="false"/>
        <button idMso="FileSave" visible="false"/>
        <tab idMso="TabInfo" visible="false"/>
        <tab idMso="TabRecent" visible="false"/>
        <tab idMso="TabNew" visible="false"/>
        <tab idMso="TabPrint" visible="false"/>
        <tab idMso="TabShare" visible="false"/>
        <tab idMso="TabHelp" visible="false"/>
        <tab idMso="TabPublish" visible="false"/>
        <tab idMso="TabSave" visible="false"/>     
        <tab idMso="TabOfficeStart" visible="false"/>
    <tab idMso="Publish2Tab" visible="false"/>
    <tab idMso="TabOfficeFeedback" visible="false"/>
    </backstage>
<tabs> 
<tab id="tabQLCongViec" label="Qu&#7843;n l&#253; c&#244;ng vi&#7879;c" visible="true">
<group id="NghiepVuNXT" label="Nghi&#7879;p V&#7909; NXT">
<button id="frmPhieuNhap" label="Nh&#7853;p Ph&#7909; Li&#7879;u" onAction="Macro1" imageMso="TableRowsInsertAboveWord" />
<button id="frmPhieuXuat" label="Xu&#7845;t Ph&#7909; Li&#7879;u" onAction="Moacro2" imageMso="TableRowsInsertBelowWord" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
thì khi nhấn CallBacks thì báo lỗi dòng 34 vị trí số 3 ạ. mong Thầy xem dùm em ạ.
Bạn bắt chước cái anh đi Ma da gì đó hả?

Bạn có 2 lần thẻ </ribbon>: ở dòng 3 và dòng trước cuối. Xóa dòng trước cuối đi.
 
Em xóa dòng trước cuối thì hiện bảng này Thầy ơi"
Untitled.pngUntitled.png
 
Lần chỉnh sửa cuối:
Em xóa dòng trước cuối thì hiện bảng này Thầy ơi"
Nếu bạn dùng Excel 2007 thì phải là
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">

Nói chung nếu bạn muốn tập tin mở cả trên Excel 2007 và mới hơn thì nên đính kèm 2 phiên bản XML: customUI14.xml và customUI.xml

custom.JPG

Chính xác là như sau:

customUI14.xml

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="true">
<contextualTabs>
<tabSet idMso="TabSetSmartArtTools" visible="false" />
<tabSet idMso="TabSetChartTools" visible="false" />
<tabSet idMso="TabSetDrawingTools" visible="false" />
<tabSet idMso="TabSetPictureTools" visible="false" />
<tabSet idMso="TabSetPivotTableTools" visible="false" />
<tabSet idMso="TabSetHeaderAndFooterTools" visible="false" />
<tabSet idMso="TabSetTableToolsExcel" visible="false" />
<tabSet idMso="TabSetPivotChartTools" visible="false" />
<tabSet idMso="TabSetInkTools" visible="false" />
</contextualTabs>
</ribbon>
<backstage>
<button idMso="FileSave" visible="false"/>
<button idMso="FileSaveAs" visible="false"/>
<button idMso="FileOpen" visible="false"/>
<button idMso="FileClose" visible="false"/>
<button idMso="ApplicationOptionsDialog" visible="false"/>
<button idMso="FileExit" visible="false"/>
<tab idMso="TabInfo" visible="false"/>
<tab idMso="TabRecent" visible="false"/>
<tab idMso="TabNew" visible="false"/>
<tab idMso="TabPrint" visible="false"/>
<tab idMso="TabShare" visible="false"/>
<tab idMso="TabHelp" visible="false"/>
</backstage>
</customUI>


customUI.xml

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<commands>
<command idMso="ApplicationOptionsDialog" enabled="false"/>
<command idMso="FileExit" enabled="false"/>
</commands>
<ribbon startFromScratch="true">
<officeMenu>
<button idMso="FileNew" visible="false"/>
<button idMso="FileOpen" visible="false"/>
<button idMso="FileSave" visible="false" />
</officeMenu>
<contextualTabs>
<tabSet idMso="TabSetSmartArtTools" visible="false" />
<tabSet idMso="TabSetChartTools" visible="false" />
<tabSet idMso="TabSetDrawingTools" visible="false" />
<tabSet idMso="TabSetPictureTools" visible="false" />
<tabSet idMso="TabSetPivotTableTools" visible="false" />
<tabSet idMso="TabSetHeaderAndFooterTools" visible="false" />
<tabSet idMso="TabSetTableToolsExcel" visible="false" />
<tabSet idMso="TabSetPivotChartTools" visible="false" />
<tabSet idMso="TabSetInkTools" visible="false" />
</contextualTabs>
</ribbon>
</customUI>
-------

Giải thích cho bạn là tại sao ở đây có thêm thẻ <contextualTabs> mà bạn không có

Giả sử không có dòng

<tabSet idMso="TabSetPictureTools" visible="false" />

Lúc đó nếu trên sheet bạn có ảnh thì khi bạn chọn ảnh thì trên ribbon xuất hiện thẻ "Picture Tools", và trong nó có các mục để bạn thao tác với ảnh. Nễu bạn muốn thế thì xóa dòng trên, ngược lại nếu không muốn xuất hiện "Picture Tools" thì thêm dòng trên.

Nhìn các dòng còn lại của <contextualTabs> thì bạn cũng có thể đoán là khi không có chúng thì những menu nào sẽ xuất hiện trên ribbon và khi nào thì xuất hiện.
--------------------------------
Tóm lại menu tự tạp của bạn sau khi chèn vào customUI14.xml ở trên thì thành

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="true">
<contextualTabs>
<tabSet idMso="TabSetSmartArtTools" visible="false" />
<tabSet idMso="TabSetChartTools" visible="false" />
<tabSet idMso="TabSetDrawingTools" visible="false" />
<tabSet idMso="TabSetPictureTools" visible="false" />
<tabSet idMso="TabSetPivotTableTools" visible="false" />
<tabSet idMso="TabSetHeaderAndFooterTools" visible="false" />
<tabSet idMso="TabSetTableToolsExcel" visible="false" />
<tabSet idMso="TabSetPivotChartTools" visible="false" />
<tabSet idMso="TabSetInkTools" visible="false" />
</contextualTabs>
<tabs>
<tab id="tabQLCongViec" label="Qu&#7843;n l&#253; c&#244;ng vi&#7879;c" visible="true">
<group id="NghiepVuNXT" label="Nghi&#7879;p V&#7909; NXT">
<button id="frmPhieuNhap" label="Nh&#7853;p Ph&#7909; Li&#7879;u" onAction="Macro1" imageMso="TableRowsInsertAboveWord" />
<button id="frmPhieuXuat" label="Xu&#7845;t Ph&#7909; Li&#7879;u" onAction="Moacro2" imageMso="TableRowsInsertBelowWord" />
</group>
</tab>
</tabs>
</ribbon>
<backstage>
<button idMso="FileSave" visible="false"/>
<button idMso="FileSaveAs" visible="false"/>
<button idMso="FileOpen" visible="false"/>
<button idMso="FileClose" visible="false"/>
<button idMso="ApplicationOptionsDialog" visible="false"/>
<button idMso="FileExit" visible="false"/>
<tab idMso="TabInfo" visible="false"/>
<tab idMso="TabRecent" visible="false"/>
<tab idMso="TabNew" visible="false"/>
<tab idMso="TabPrint" visible="false"/>
<tab idMso="TabShare" visible="false"/>
<tab idMso="TabHelp" visible="false"/>
</backstage>
</customUI>
 
Lần chỉnh sửa cuối:
Bạn có 2 lần thẻ </ribbon>: ở dòng 3 và dòng trước cuối. Xóa dòng trước cuối đi.
Em xóa dòng trước cuối thì hiện bảng này Thầy ơi"

Xoá cái thẻ đóng Ribbon </ribbon> ở dòng thứ 3 đi. Mới mở <ribbon startFromScratch="true"> thì đóng mất rồi thì ở dòng kế cuối còn gì mà đóng.
 
Cám ơn !
 
Lần chỉnh sửa cuối:
Bạn đang nói tới menu được tạo bởi nội dung sau trong XML


Trong code trên có đoạn

Tức sẽ có nút có id là "customButton40", hiển thị là "Nút thứ 1", mà khi click nó thì sẽ chạy Macro "Macro11"

Tức khi click "Nút thứ 1" thì chạy
Mã:
'Callback for customButton40 onAction
Sub Macro11(control As IRibbonControl)
    MsgBox control.ID
End Sub

MsgBox chỉ là ví dụ về code. Trong tập tin thực thì thay MsgBox control.ID bằng code của mình thôi.
Mã:
'Callback for customButton40 onAction
Sub Macro11(control As IRibbonControl)
    DelObjects
End Sub

Trong code trên có đoạn

Vậy thì đổi thành
Mã:
label="DelObjects"

Lấy ví dụ nút 4


Nhìn kỹ thì thấy 5 nút đều có dạng


Ví dụ bạn muốn thêm nút và gán cho nó ID là "secretButton", hiển thị là "My secret button" mà khi nhấn thì thực thi macro "DoSecretOperation", và có icon là "mặt cười" thì code là


Tức bạn phải: lưu rồi đóng tập tin chan_dai_xlsm -> mở Custom UI Editor -> chọn mở tập tin chan_dai.xlsm -> thêm code ở trên -> nhấn save -> nhấn "Generate Callbacks"

Bạn sẽ thấy ngoài các callback đã có trước thì bây giờ Custom UI Editor tạo hộ bạn callback
Mã:
'Callback for secretButton onAction
Sub DoSecretOperation(control As IRibbonControl)

End Sub

Đóng Custom UI Editor -> mở chan_dai.xlsm -> vào VBE -> thêm callback ở trên -> viết code trong sub DoSecretOperation
Cho em hỏi anh @batman1 và các anh/chị trên GPE,
Như anh Batman1 có hướng dẫn viết code trên custom UI, việc tạo nút dùng thẻ Button id, tạo menu dùng thẻ menu id...
Nếu em muốn thêm 1 textbox vào Group id, thì code trên custom UI sẽ làm thế nào ạ?
Mục đích: để nhập đường dẫn vào (hoặc có nút Browse chọn đường dẫn đưa vào textbox) xong thực hiện việc lưu file/sheet theo textbox đó.
(ý tưởng như hình vẽ)

z3293985346242_c78255fff60a60864df220c4c0284772.jpg

Cảm ơn các anh/chị.
 
Web KT
Back
Top Bottom