Tôi đã gặp khó khăn với giải pháp của Roi-Kyi Bryant khi nhiều phần bổ trợ cố gắng sửa đổi dải băng. Tôi cũng không có quyền truy cập quản trị trên máy tính làm việc của mình, điều này đã loại trừ việc cài đặt Custom UI Editor
. Vì vậy, nếu bạn ở cùng thuyền với tôi, đây là một ví dụ thay thế để tùy chỉnh dải băng chỉ bằng Excel. Lưu ý, giải pháp của tôi có nguồn gốc từ hướng dẫn của Microsoft .
- Tạo tệp / tệp Excel có dải băng bạn muốn tùy chỉnh. Trong trường hợp của tôi, tôi đã tạo hai
.xlam
tệp Chart Tools.xlam
và Priveleged UDFs.xlam
để chứng minh cách nhiều phần bổ trợ có thể tương tác với Ribbon.
- Tạo một thư mục, với bất kỳ tên thư mục nào, cho mỗi tệp bạn vừa tạo.
- Bên trong mỗi thư mục bạn đã tạo, hãy thêm một
customUI
và _rels
thư mục.
- Bên trong mỗi
customUI
thư mục, hãy tạo một customUI.xml
tệp. Các customUI.xml
chi tiết hồ sơ như thế nào Excel tập tin tương tác với các ribbon. Phần 2 của hướng dẫn Microsoft bao gồm các phần tử trong customUI.xml
tệp.
customUI.xml
Tệp của tôi cho Chart Tools.xlam
trông giống như thế này
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">
<ribbon>
<tabs>
<tab idQ="x:chartToolsTab" label="Chart Tools">
<group id="relativeChartMovementGroup" label="Relative Chart Movement" >
<button id="moveChartWithRelativeLinksButton" label="Copy and Move" imageMso="ResultsPaneStartFindAndReplace" onAction="MoveChartWithRelativeLinksCallBack" visible="true" size="normal"/>
<button id="moveChartToManySheetsWithRelativeLinksButton" label="Copy and Distribute" imageMso="OutlineDemoteToBodyText" onAction="MoveChartToManySheetsWithRelativeLinksCallBack" visible="true" size="normal"/>
</group >
<group id="chartDeletionGroup" label="Chart Deletion">
<button id="deleteAllChartsInWorkbookSharingAnAddressButton" label="Delete Charts" imageMso="CancelRequest" onAction="DeleteAllChartsInWorkbookSharingAnAddressCallBack" visible="true" size="normal"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
customUI.xml
Tệp của tôi cho Priveleged UDFs.xlam
trông giống như thế này
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">
<ribbon>
<tabs>
<tab idQ="x:privelgedUDFsTab" label="Privelged UDFs">
<group id="privelgedUDFsGroup" label="Toggle" >
<button id="initialisePrivelegedUDFsButton" label="Activate" imageMso="TagMarkComplete" onAction="InitialisePrivelegedUDFsCallBack" visible="true" size="normal"/>
<button id="deInitialisePrivelegedUDFsButton" label="De-Activate" imageMso="CancelRequest" onAction="DeInitialisePrivelegedUDFsCallBack" visible="true" size="normal"/>
</group >
</tab>
</tabs>
</ribbon>
</customUI>
- Đối với mỗi tệp bạn đã tạo ở Bước 1, đặt hậu tố a
.zip
vào tên tệp của chúng. Trong trường hợp của tôi, tôi đổi tên Chart Tools.xlam
để Chart Tools.xlam.zip
, và Privelged UDFs.xlam
để Priveleged UDFs.xlam.zip
.
- Mở từng
.zip
tệp và điều hướng đến _rels
thư mục. Sao chép .rels
tệp vào _rels
thư mục bạn đã tạo ở Bước 3. Chỉnh sửa từng .rels
tệp bằng trình soạn thảo văn bản. Từ hướng dẫn của Microsoft
Giữa <Relationship>
phần tử cuối cùng và phần tử đóng
<Relationships>
, hãy thêm một dòng tạo mối quan hệ giữa tệp tài liệu và tệp tùy chỉnh. Đảm bảo rằng bạn chỉ định chính xác tên thư mục và tệp.
<Relationship Type="http://schemas.microsoft.com/office/2006/
relationships/ui/extensibility" Target="/customUI/customUI.xml"
Id="customUIRelID" />
.rels
Tệp của tôi cho Chart Tools.xlam
trông giống như thế này
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
<Relationship Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="/customUI/customUI.xml" Id="chartToolsCustomUIRel" />
</Relationships>
.rels
Tệp của tôi cho Priveleged UDFs
trông giống như thế này.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
<Relationship Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="/customUI/customUI.xml" Id="privelegedUDFsCustomUIRel" />
</Relationships>
- Thay thế các
.rels
tệp trong mỗi .zip
tệp bằng .rels
tệp / tệp bạn đã sửa đổi ở bước trước.
- Sao chép và dán
.customUI
thư mục bạn đã tạo vào thư mục chính của .zip
tệp / tệp.
- Xóa
.zip
phần mở rộng tệp khỏi tệp Excel bạn đã tạo .
- Nếu bạn đã tạo
.xlam
tệp, trở lại Excel, hãy thêm chúng vào phần bổ trợ Excel của bạn.
- Nếu có thể, hãy tạo lệnh gọi lại trong mỗi phần bổ trợ của bạn. Trong Bước 4, có
onAction
các từ khóa trong các nút của tôi. Các onAction
từ khóa chỉ ra rằng, khi các yếu tố chứa được kích hoạt, ứng dụng Excel sẽ kích hoạt các tiểu thường xuyên bọc trong dấu ngoặc kép trực tiếp sau khi các onAction
từ khóa. Đây được gọi là một cuộc gọi lại . Trong .xlam
các tệp của mình , tôi có một mô-đun được gọi là CallBacks
nơi tôi đã bao gồm các quy trình con gọi lại của mình.
CallBacks
Mô-đun của tôi Chart Tools.xlam
trông giống như
Option Explicit
Public Sub MoveChartWithRelativeLinksCallBack(ByRef control As IRibbonControl)
MoveChartWithRelativeLinks
End Sub
Public Sub MoveChartToManySheetsWithRelativeLinksCallBack(ByRef control As IRibbonControl)
MoveChartToManySheetsWithRelativeLinks
End Sub
Public Sub DeleteAllChartsInWorkbookSharingAnAddressCallBack(ByRef control As IRibbonControl)
DeleteAllChartsInWorkbookSharingAnAddress
End Sub
CallBacks
Mô-đun của tôi Priveleged UDFs.xlam
trông giống như
Tùy chọn rõ ràng
Public Sub InitialisePrivelegedUDFsCallBack(ByRef control As IRibbonControl)
ThisWorkbook.InitialisePrivelegedUDFs
End Sub
Public Sub DeInitialisePrivelegedUDFsCallBack(ByRef control As IRibbonControl)
ThisWorkbook.DeInitialisePrivelegedUDFs
End Sub
Các phần tử khác nhau có một chữ ký phụ quy trình gọi lại khác nhau. Đối với các nút, tham số quy trình phụ bắt buộc là ByRef control As IRibbonControl
. Nếu bạn không tuân theo chữ ký gọi lại được yêu cầu, bạn sẽ gặp lỗi khi biên dịch dự án / dự án VBA của mình. Phần 3 của hướng dẫn Microsoft xác định tất cả các chữ ký gọi lại.
Đây là ví dụ đã hoàn thành của tôi trông như thế nào
Một số mẹo đóng cửa
- Nếu bạn muốn phần bổ trợ chia sẻ các phần tử Ruy-băng, hãy sử dụng từ khóa
idQ
và xlmns:
. Trong ví dụ của tôi, Chart Tools.xlam
và Priveleged UDFs.xlam
cả hai đều có quyền truy cập vào các phần tử với idQ
's bằng x:chartToolsTab
và x:privelgedUDFsTab
. Để điều này hoạt động, điều x:
này là bắt buộc và, tôi đã xác định không gian tên của nó trong dòng đầu tiên của customUI.xml
tệp của tôi <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">
,. Phần Hai cách để tùy chỉnh giao diện người dùng Fluent trong hướng dẫn của Microsoft cung cấp thêm một số chi tiết.
- Nếu bạn muốn phần bổ trợ truy cập các phần tử Ruy-băng được vận chuyển cùng với Excel, hãy sử dụng
isMSO
từ khóa. Phần Hai cách để tùy chỉnh giao diện người dùng Fluent trong hướng dẫn của Microsoft cung cấp thêm một số chi tiết.