Birden fazla eklenti şeridi değiştirmeye çalıştığında Roi-Kyi Bryant'ın çözümünde zorluklarla karşılaştım . Ayrıca iş bilgisayarımda yönetici erişimim yok, bu da Custom UI Editor. Yani, benimle aynı teknedeyseniz , şeridi yalnızca Excel kullanarak özelleştirmenin alternatif bir örneğini burada bulabilirsiniz . Not, benim çözümüm Microsoft kılavuzundan alınmıştır .
- Şeritlerini özelleştirmek istediğiniz Excel dosyası / dosyaları oluşturun. Benim durumumda, iki
.xlamdosya oluşturdum Chart Tools.xlamve Priveleged UDFs.xlambirden çok eklentinin Şerit ile nasıl etkileşime girebileceğini göstermek için.
- Yeni oluşturduğunuz her dosya için herhangi bir klasör adıyla bir klasör oluşturun.
- Oluşturduğunuz klasörlerin her birinin içine bir
customUIve _relsklasör ekleyin .
- Her
customUIklasörün içinde bir customUI.xmldosya oluşturun. customUI.xmlExcel kurdeleli etkileşim dosyaları nasıl dosya ayrıntıları. Microsoft kılavuzunun 2. Bölümü , customUI.xmldosyadaki öğeleri kapsar .
Benim customUI.xmliçin dosya Chart Tools.xlamböyle görünüyor
<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>
Benim customUI.xmliçin dosya Priveleged UDFs.xlamböyle görünüyor
<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>
- İçin her dosyaya Eğer eki bir adım 1'de oluşturduğunuz
.zipkendi dosya adına. Benim durumumda, ben değiştirildi Chart Tools.xlametmek Chart Tools.xlam.zipve Privelged UDFs.xlamkarşı Priveleged UDFs.xlam.zip.
- Her
.zipdosyayı açın ve _relsklasöre gidin . .relsDosyayı _rels3. Adımda oluşturduğunuz klasöre kopyalayın. Her .rels dosyayı bir metin düzenleyiciyle düzenleyin. Gönderen Microsoft rehber
Son <Relationship>öğe ile kapanış
<Relationships>öğesi arasına, belge dosyası ile özelleştirme dosyası arasında bir ilişki oluşturan bir çizgi ekleyin. Klasör ve dosya adlarını doğru belirlediğinizden emin olun.
<Relationship Type="http://schemas.microsoft.com/office/2006/
relationships/ui/extensibility" Target="/customUI/customUI.xml"
Id="customUIRelID" />
Benim .relsiçin dosya Chart Tools.xlamböyle görünüyor
<?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>
Benim .relsiçin dosya Priveleged UDFsböyle görünüyor.
<?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>
- Değiştir
.relsher dosyaları .zipile dosyada .relsdosyası / dosyaları önceki adımda güncellenmiştir.
.customUIOluşturduğunuz klasörü kopyalayıp .zipdosyanın / dosyaların ana dizinine yapıştırın .
.zipDosya uzantısını oluşturduğunuz Excel dosyalarından kaldırın .
.xlamDosyaları Excel'de oluşturduysanız , bunları Excel eklentilerinize ekleyin.
- Mümkünse, eklentilerinizin her birinde geri çağırmalar oluşturun. 4. Adımda,
onActiondüğmelerimde anahtar kelimeler var . onActionAnahtar kelime içeren eleman tetiklendiğinde, Excel uygulama hemen sonra tırnak kaplı alt rutin tetikleyecek, belirten onActionanahtar kelime. Bu, geri arama olarak bilinir . Benim içinde .xlamdosyalar, ben adlı bir modüle sahip CallBacksbenim geri arama alt rutinleri yer verdik nerede.

Benim CallBacksiçin modül Chart Tools.xlamgibi görünüyor
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
Benim CallBacksiçin modül Priveleged UDFs.xlamgibi görünüyor
Seçenek Açık
Public Sub InitialisePrivelegedUDFsCallBack(ByRef control As IRibbonControl)
ThisWorkbook.InitialisePrivelegedUDFs
End Sub
Public Sub DeInitialisePrivelegedUDFsCallBack(ByRef control As IRibbonControl)
ThisWorkbook.DeInitialisePrivelegedUDFs
End Sub
Farklı öğelerin farklı bir geri arama alt rutin imzası vardır. Düğmeler için gerekli alt rutin parametresi şudur ByRef control As IRibbonControl. Gerekli geri arama imzasına uymazsanız, VBA projenizi / projelerinizi derlerken bir hata alırsınız. Microsoft kılavuzunun 3. Bölümü , tüm geri arama imzalarını tanımlar.
İşte bitmiş örneğim şöyle görünüyor

Bazı kapanış ipuçları
- Eklentilerin Şerit öğelerini paylaşmasını istiyorsanız,
idQve xlmns:anahtar sözcüğünü kullanın . Örneğimde, Chart Tools.xlamve Priveleged UDFs.xlamher ikisi de idQ's eşittir x:chartToolsTabve ' olan öğelere erişebilir x:privelgedUDFsTab. İşe Bunun için x:benim ilk satırında onun ad tanımladıktan gerekli edilir ve customUI.xmldosyanın <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">. Bölüm Akıcı UI özelleştirme İki Yolu içinde Microsoft kılavuz biraz daha ayrıntılı bilgi verir.
- Eklentilerin Excel ile birlikte gönderilen Şerit öğelerine erişmesini istiyorsanız
isMSOanahtar sözcüğü kullanın . Bölüm Akıcı UI özelleştirme İki Yolu içinde Microsoft kılavuz biraz daha ayrıntılı bilgi verir.