Maika8008
Thành viên gạo cội
Việc tạo custom ribbon menu trên GPE đã có từ lâu và đã có nhiều công cụ được các thành viên viết ra để hỗ trợ cú pháp, tìm tên icon và tất nhiên là có cả cách làm được nhiều thành viên khác trình bày trong phần bình luận. Tuy nhiên không dễ gì nắm bắt được 1 cách cơ bản việc tạo ra nó như thế nào, để từ đó làm nền tảng cho việc tùy biến, chỉnh sửa phù hợp với nhu cầu từng người. Việc có 1 cái menu đẹp và gọn gàng cho file của mình tuy cũng hơi phù phiếm nhưng cũng mang lại sự thu hút đáng kể đối với mọi người, cũng hay hay ấy chứ nhề.
Có 2 cách làm:
I- Cách 1- Dùng VBA: dễ làm, dùng với những menu đơn giản, dành cho những ai không thích rối rắm hoặc không rành lắm, có code sẵn đấy sửa lại tí là xong.
Dùng VBA có nhược điểm là khá hạn chế trong việc hỗ trợ gõ dấu tiếng Việt. Một số nguyên âm có dấu như ồ, ố, ổ, ệ, ị, ớ… không thể gõ dấu được. Gặp mấy chữ này thì đành chừa dấu lại hoặc xử lý tình thế như ồ thay bằng ô` , ớ thay bằng ơ’ , Thôi vào đề luôn.
UPDATE: vụ này là do tôi hạn chế chưa nghiên cứu tới chứ giải pháp đã có từ lâu. Dựa vào mã số ký tự unicode để mã hóa các nguyên âm có dấu, từ đó code sẽ viết vào file hiển thị caption của menu. Ví dụ chữ ổ được viết lại thành ổ
Anh em dùng hàm ở bài #2 để lấy mã tiếng Việt cho ribbon nhé!
1. Trước tiên cần tạo 2 sự kiện Workbook như sau để tạo và xóa ribbon khi mở và đóng file
2. Tiếp đến, cẩn thận từng dòng cho sub tạo ribbon:
Muốn gõ dấu, phải dùng bảng mã UTF-8 Literal của Unikey. Khi gõ nó ra như chữ tượng hình cứ kệ nó đi, lên menu thì OK. Gõ chữ nào nhảy ra dấu ? là không xong rồi, phải xử lý như trên đã nói.
Code ở trên chỉ là ví dụ cho 1 group và 2 button của nó. Cứ chép thêm dòng cần thiết xuống rồi chỉnh sửa lại, miễn sao cứ có <mso:group ABC chi đó> thì phải có <mso:button ... /> <mso:button ... /> và cuối cùng là </mso:group>
Chạy sub luôn để xem thành quả. Khi chỉnh sửa ngay trong phiên làm việc thì các label là có hiệu lực ngay, còn với imagemso phải đóng file rồi mở lại mới được.
3. Thêm sub xóa ribbon nữa là xong:
II- Nạp và liên kết file xml ngoài:
Đây là cách cơ bản giải quyết được bài toán dấu tiếng Việt. Nó không cần bật VBA để hiện menu, chỉ cần mở file lên là có sẵn. Cách làm cơ bản như sau:
1. Mở file Excel .xlsm cần tạo menu, chép các macro để chạy khi bấm vào các công cụ trên menu. Có thể tạo sau cũng được nhưng nhất thiết các macro đó phải có đối số trong ngoặc, ví dụ:
Bình thường là Goto_sheet1() nhưng để chạy từ menu phải là Goto_sheet1(control As IribbonControl) và phải nhớ tên để điền vào file xml khi thiết kế.
Code hay dở thì tùy người nhưng theo lời khuyên của nhiều anh em có kinh nghiệm thì nên đặt ID trùng với tên sheet để dễ dàng lấy từ thuộc tính control.id dùng cho code. Đặt thêm thuộc tính Tag để dùng cho nhiều giải thuật khác nhau. File đính kèm bên dưới là 1 ví dụ rất hay.
2. Đổi đuôi file .xlsm thành .zip
3. Tạo 1 thư mục tên là customUI
4. Chạy NotePad++ mở 1 trang text mới, chép các dòng sau đây vào:
Đấy mới chỉ là code của 1 group gồm 2 buton. Cứ theo cú pháp như vậy để làm tiếp với lưu ý:
Id không được trùng nhau
Sau onAction= là tên macro
Sau imageMso= là tên các icon (thứ này tìm trên GPE, có file hỗ trợ)
5. Lưu trang text với tên là customUI14.xml vào thư mục customUI đã tạo ở bước 3 (chọn định dạng *.xml; *.xaml; *.xsl; *xslt; *.xsd; *.kml; *.wsdl; *.xlf; *.xliff; *.config… trong hộp Save as type).
6. Chuột phải vào thư mục customUI, chọn 7-zip -> Add to Archive -> Duyệt tìm file .zip tạo ở bước 2 -> Bấm OK để hoàn tất đưa cái thư mục customUI vào bên trong file .zip.
(Tôi không cài WinRAR nên không biết làm với RAR thế nào, nhưng 7-zip dùng tốt lại miễn phí do đó khuyến nghị nhân dịp này anh em nên cài 7-zip)
7. Chuột phải vào file .zip cần làm menu chọn 7-zip -> Open archive -> vào bên trong thư mục _rels, chuột phải vào .rels -> Edit -> Chép đoạn code sau thay thế cho code có sẵn trong file đó:
8. Đóng file -> chọn Save để lưu lại -> chọn Yes để lưu file .zip -> Đóng cửa sổ 7-Zip.
9. Đổi đuôi file .zip trở lại thành .xlsm rồi mở lên xem thành quả.
10. Muốn thêm group, button vào menu, có 2 cách:
- Cách 1: hãy chuyển file lại thành zip rồi mở lên như ở bước 7 -> vào trong thư mục customUI -> chuột phải vào file customUI14.xml -> Edit -> chỉnh sửa trong đó hoặc copy dán vào -> Save -> Update file zip.
- Cách 2: Làm hoàn chỉnh code xml rồi mới tạo file customUI14.xml như ở bước 4 và 5.
Kỹ thuật làm menu nâng cao rất phong phú, anh em tự nghiên cứu đào sâu thêm. Hết rồi
Có 2 cách làm:
I- Cách 1- Dùng VBA: dễ làm, dùng với những menu đơn giản, dành cho những ai không thích rối rắm hoặc không rành lắm, có code sẵn đấy sửa lại tí là xong.
Dùng VBA có nhược điểm là khá hạn chế trong việc hỗ trợ gõ dấu tiếng Việt. Một số nguyên âm có dấu như ồ, ố, ổ, ệ, ị, ớ… không thể gõ dấu được. Gặp mấy chữ này thì đành chừa dấu lại hoặc xử lý tình thế như ồ thay bằng ô` , ớ thay bằng ơ’ , Thôi vào đề luôn.
UPDATE: vụ này là do tôi hạn chế chưa nghiên cứu tới chứ giải pháp đã có từ lâu. Dựa vào mã số ký tự unicode để mã hóa các nguyên âm có dấu, từ đó code sẽ viết vào file hiển thị caption của menu. Ví dụ chữ ổ được viết lại thành ổ
Anh em dùng hàm ở bài #2 để lấy mã tiếng Việt cho ribbon nhé!
1. Trước tiên cần tạo 2 sự kiện Workbook như sau để tạo và xóa ribbon khi mở và đóng file
PHP:
Private Sub Workbook_Open()
CreateRibbon
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ClearRibbon
End Sub
PHP:
Private Sub Workbook_Open()
CreateRibbon
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ClearRibbon
End Sub
2. Cẩn thận từng dòng cho sub tạo ribbon:
Sub CreateRibbon()
Dim hFile As Long
Dim path As String, fileName As String, ribnXML As String, user As String
hFile = FreeFile
user = Environ("Username")
path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\"
fileName = "Excel.officeUI"
ribnXML = "<mso:customUI xmlns:mso='http://schemas.microsoft.com/office/2009/07/customui'>" & vbNewLine
ribnXML = ribnXML + " <mso:ribbon>" & vbNewLine
ribnXML = ribnXML + " <mso:qat/>" & vbNewLine
ribnXML = ribnXML + " <mso:tabs>" & vbNewLine
ribnXML = ribnXML + " <mso:tab id=' CustomTab ' label='Hoat dong cua toi' >" & vbNewLine
ribnXML = ribnXML + " <mso:group id='GiaiTri' label='Giai tri' autoScale='true'>" & vbNewLine
ribnXML = ribnXML + " <mso:button id=' NgheNhac ' label= 'Nghe Nhac ' " & vbNewLine
ribnXML = ribnXML + "imageMso='ListNumFieldInsert' onAction='Goto_Nhac'/>" & vbNewLine
ribnXML = ribnXML + " <mso:button id='XemPhim' label='Xem phim' " & vbNewLine
ribnXML = ribnXML + "imageMso='ListSetNumberingValue' onAction='Goto_Phim'/>" & vbNewLine
ribnXML = ribnXML + " </mso:group>" & vbNewLine
ribnXML = ribnXML + " </mso:tab>" & vbNewLine
ribnXML = ribnXML + " </mso:tabs>" & vbNewLine
ribnXML = ribnXML + " </mso:ribbon>" & vbNewLine
ribnXML = ribnXML + "</mso:customUI>"
ribnXML = Replace(ribnXML, """", "")
Open path & fileName For Output Access Write As hFile
Print #hFile, ribnXML
Close hFile
End Sub
Code ở trên chỉ là ví dụ cho 1 group và 2 button của nó. Cứ chép thêm dòng cần thiết xuống rồi chỉnh sửa lại, miễn sao cứ có <mso:group ABC chi đó> thì phải có <mso:button ... /> <mso:button ... /> và cuối cùng là </mso:group>
Chạy sub luôn để xem thành quả. Khi chỉnh sửa ngay trong phiên làm việc thì các label là có hiệu lực ngay, còn với imagemso phải đóng file rồi mở lại mới được.
3. Thêm sub xóa ribbon nữa là xong:
PHP:
Sub ClearRibbon()
Dim hFile As Long
Dim path As String, fileName As String, ribnXML As String, user As String
hFile = FreeFile
user = Environ("Username")
path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\"
fileName = "Excel.officeUI"
ribnXML = "<mso:customUI xmlns:mso=""http://schemas.microsoft.com/office/2009/07/customui"">" & _
"<mso:ribbon></mso:ribbon></mso:customUI>"
Open path & fileName For Output Access Write As hFile
Print #hFile, ribnXML
Close hFile
End Sub
II- Nạp và liên kết file xml ngoài:
Đây là cách cơ bản giải quyết được bài toán dấu tiếng Việt. Nó không cần bật VBA để hiện menu, chỉ cần mở file lên là có sẵn. Cách làm cơ bản như sau:
1. Mở file Excel .xlsm cần tạo menu, chép các macro để chạy khi bấm vào các công cụ trên menu. Có thể tạo sau cũng được nhưng nhất thiết các macro đó phải có đối số trong ngoặc, ví dụ:
Bình thường là Goto_sheet1() nhưng để chạy từ menu phải là Goto_sheet1(control As IribbonControl) và phải nhớ tên để điền vào file xml khi thiết kế.
Code hay dở thì tùy người nhưng theo lời khuyên của nhiều anh em có kinh nghiệm thì nên đặt ID trùng với tên sheet để dễ dàng lấy từ thuộc tính control.id dùng cho code. Đặt thêm thuộc tính Tag để dùng cho nhiều giải thuật khác nhau. File đính kèm bên dưới là 1 ví dụ rất hay.
2. Đổi đuôi file .xlsm thành .zip
3. Tạo 1 thư mục tên là customUI
4. Chạy NotePad++ mở 1 trang text mới, chép các dòng sau đây vào:
Mã:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon>
<tabs>
<tab id="CustomTab" label="Hoạt động của tôi" >
<group id="GiaiTri"
label="Giải trí" >
<button
id="NgheNhac"
label="Nghe nhạc"
size="normal"
onAction="Goto_Nhac"
imageMso="ListNumFieldInsert" />
<button
id="XemPhim"
label="Xem phim"
size="normal"
onAction="Goto_Phim"
imageMso="ListNumFieldInsert" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Id không được trùng nhau
Sau onAction= là tên macro
Sau imageMso= là tên các icon (thứ này tìm trên GPE, có file hỗ trợ)
5. Lưu trang text với tên là customUI14.xml vào thư mục customUI đã tạo ở bước 3 (chọn định dạng *.xml; *.xaml; *.xsl; *xslt; *.xsd; *.kml; *.wsdl; *.xlf; *.xliff; *.config… trong hộp Save as type).
6. Chuột phải vào thư mục customUI, chọn 7-zip -> Add to Archive -> Duyệt tìm file .zip tạo ở bước 2 -> Bấm OK để hoàn tất đưa cái thư mục customUI vào bên trong file .zip.
(Tôi không cài WinRAR nên không biết làm với RAR thế nào, nhưng 7-zip dùng tốt lại miễn phí do đó khuyến nghị nhân dịp này anh em nên cài 7-zip)
7. Chuột phải vào file .zip cần làm menu chọn 7-zip -> Open archive -> vào bên trong thư mục _rels, chuột phải vào .rels -> Edit -> Chép đoạn code sau thay thế cho code có sẵn trong file đó:
HTML:
<?xml version="1.0" encoding="utf-8"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml" Id="rId3" />
<Relationship Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml" Id="rId2" />
<Relationship Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml" Id="rId1" />
<Relationship Type="http://schemas.microsoft.com/office/2007/relationships/ui/extensibility" Target="customUI/customUI14.xml" Id="rId4" />
</Relationships>
9. Đổi đuôi file .zip trở lại thành .xlsm rồi mở lên xem thành quả.
10. Muốn thêm group, button vào menu, có 2 cách:
- Cách 1: hãy chuyển file lại thành zip rồi mở lên như ở bước 7 -> vào trong thư mục customUI -> chuột phải vào file customUI14.xml -> Edit -> chỉnh sửa trong đó hoặc copy dán vào -> Save -> Update file zip.
- Cách 2: Làm hoàn chỉnh code xml rồi mới tạo file customUI14.xml như ở bước 4 và 5.
Kỹ thuật làm menu nâng cao rất phong phú, anh em tự nghiên cứu đào sâu thêm. Hết rồi
File đính kèm
Lần chỉnh sửa cuối: