VBA kullanarak özel bir Şerit sekmesi nasıl eklenir?


98

Excel şeridine birkaç düğme taşıyacak özel bir sekme eklemenin bir yolunu arıyorum. Bunu Google aracılığıyla ele alan bazı kaynakları tesadüfen buldum ama hepsi tehlikeli ve aşırı derecede karmaşık görünüyor.

Bunu yapmanın hızlı ve basit yolu nedir? VBA'm Excel'e yüklendiğinde yeni sekmenin yüklenmesini istiyorum ..

GÜNCELLEME : Bu örneği buradan denedim, ancak son talimatta "nesne gerekli" hatası alıyorum:

Public Sub AddHighlightRibbon()
Dim ribbonXml As String

ribbonXml = "<mso:customUI xmlns:mso=""http://schemas.microsoft.com/office/2009/07/customui"">"
ribbonXml = ribbonXml + "  <mso:ribbon>"
ribbonXml = ribbonXml + "    <mso:qat/>"
ribbonXml = ribbonXml + "    <mso:tabs>"
ribbonXml = ribbonXml + "      <mso:tab id=""highlightTab"" label=""Highlight"" insertBeforeQ=""mso:TabFormat"">"
ribbonXml = ribbonXml + "        <mso:group id=""testGroup"" label=""Test"" autoScale=""true"">"
ribbonXml = ribbonXml + "          <mso:button id=""highlightManualTasks"" label=""Toggle Manual Task Color"" "
ribbonXml = ribbonXml + "imageMso=""DiagramTargetInsertClassic"" onAction=""ToggleManualTasksColor""/>"
ribbonXml = ribbonXml + "        </mso:group>"
ribbonXml = ribbonXml + "      </mso:tab>"
ribbonXml = ribbonXml + "    </mso:tabs>"
ribbonXml = ribbonXml + "  </mso:ribbon>"
ribbonXml = ribbonXml + "</mso:customUI>"

ActiveProject.SetCustomUI (ribbonXml)
End Sub

Lütfen hangi Excel sürümünü kullandığınızı onaylayın.
Siddharth Rout

Bu Proje içindir.
Nathan_Sav

Yanıtlar:


146

AFAIK, Excel şeridinde özel sekme oluşturmak için VBA Excel'i kullanamazsınız. Bununla birlikte, VBA kullanarak bir şerit bileşenini gizleyebilir / görünür hale getirebilirsiniz. Ek olarak, yukarıda bahsettiğiniz bağlantı MS Excel için değil MS Project içindir.

Özel Kullanıcı Arabirimi Düzenleyicisi adlı bu ücretsiz yardımcı programı kullanarak Excel Uygulamalarım / Eklentilerim için sekmeler oluşturuyorum .


Düzenleme: OP tarafından yeni talebi karşılamak için

Öğretici

İşte söz verildiği gibi kısa bir eğitim:

  1. Özel Kullanıcı Arayüzü Düzenleyicisini (CUIE) kurduktan sonra açın ve ardından Dosya | İlgili Excel Dosyasını açın ve seçin. CUIE aracılığıyla açmadan önce lütfen Excel Dosyasının kapalı olduğundan emin olun. Örnek olarak yepyeni bir çalışma sayfası kullanıyorum.

    görüntü açıklamasını buraya girin

  2. Aşağıdaki resimde gösterildiği gibi sağ tıklayın ve "Office 2007 Özel Kullanıcı Arayüzü Bölümü" nü tıklayın. "CustomUI.xml" dosyasını ekleyecektir.

    görüntü açıklamasını buraya girin

  3. Sonraki Ekle menüsüne tıklayın | Örnek XML | Özel Sekme. Temel kodun otomatik olarak oluşturulduğunu fark edeceksiniz. Artık, gereksinimlerinize göre düzenlemeye hazırsınız.

    görüntü açıklamasını buraya girin

  4. Kodu inceleyelim

    görüntü açıklamasını buraya girin

    label="Custom Tab": "Özel Sekme" yi sekmenize vermek istediğiniz adla değiştirin. Şimdilik buna "Jerome" diyelim.

    Aşağıdaki bölüm özel bir düğme ekler.

    <button id="customButton" label="Custom Button" imageMso="HappyFace" size="large" onAction="Callback" />

    imageMso: Bu, düğme üzerinde görüntülenecek olan resimdir. "HappyFace" şu anda göreceğiniz şeydir. Buradan daha fazla görsel kimliği indirebilirsiniz .

    onAction="Callback": "Geri arama", butona tıkladığınızda çalışan prosedürün adıdır.

Demo

Bununla birlikte 2 buton oluşturalım ve bunlara "JG Button 1" ve "JG Button 2" diyelim. Birincisinin imajı olarak mutlu yüzü, ikincisi için "Güneş" i tutalım. Değiştirilen kod artık şuna benzer:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="MyCustomTab" label="Jerome" insertAfterMso="TabView">
<group id="customGroup1" label="First Tab">
<button id="customButton1" label="JG Button 1" imageMso="HappyFace" size="large" onAction="Callback1" />
<button id="customButton2" label="JG Button 2" imageMso="PictureBrightnessGallery" size="large" onAction="Callback2" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>

CUIE'de oluşturulan tüm kodu silin ve bunun yerine yukarıdaki kodu yapıştırın. CUIE'yi kaydedin ve kapatın. Şimdi Excel Dosyasını açtığınızda şöyle görünecek:

görüntü açıklamasını buraya girin

Şimdi kod kısmı. VBA Editor'ı açın, bir modül ekleyin ve bu kodu yapıştırın:

Public Sub Callback1(control As IRibbonControl)

    MsgBox "You pressed Happy Face"

End Sub

Public Sub Callback2(control As IRibbonControl)

    MsgBox "You pressed the Sun"

End Sub

Excel dosyasını makro etkin bir dosya olarak kaydedin. Şimdi Smiley veya Güneş'e tıkladığınızda ilgili mesaj kutusunu göreceksiniz:

görüntü açıklamasını buraya girin

Bu yardımcı olur umarım!


6
Evet :) Ron'un web sitesinde pek çok örnek var. rondebruin.nl/ribbon.htm
Siddharth Rout

1
Yeni bir Sekme oluşturmak istiyor musunuz? Evet o zaman daha fazla ayrıntı ve sana XML Kodu :) verecektir
Siddharth Rout

1
20 dakika ver. Yukarıdaki
gönderiyi

6
@SiddharthRout +1 - Herhangi bir Excel kitabına ihtiyacım olmadığını anlıyorum, sadece bir gün içinde öğrenmem gerekenler için gönderilerinizi takip edin (ve bu akşam, Şerit XML!) :)
Bizim Adamımız Muzlar

1
Size temel xml kodu ve VBA kodu ile yeni bir soru oluşturmanızı tavsiye ederim ve sonra oradan alabilir miyiz? @YasserKhalil
Siddharth Rout

30

Bunu Excel 2013'te VBA ile başarabildim. Özel bir düzenleyiciye gerek yok. İhtiyacınız olan tek şey Geliştirici sekmesinden erişilebilen Visual Basic kod düzenleyicisidir. Geliştirici sekmesi varsayılan olarak görünmez, bu nedenle Dosya> Seçenekler> Şeridi Özelleştir'de etkinleştirilmesi gerekir. Geliştirici sekmesinde, Visual Basic düğmesine tıklayın. Kod düzenleyici başlayacak. Soldaki Proje Gezgini bölmesine sağ tıklayın. Ekle menüsünü tıklayın ve modülü seçin. Aşağıdaki her iki aboneyi de yeni modüle ekleyin.

Sub LoadCustRibbon()

Dim hFile As Long
Dim path As String, fileName As String, ribbonXML As String, user As String

hFile = FreeFile
user = Environ("Username")
path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\"
fileName = "Excel.officeUI"

ribbonXML = "<mso:customUI      xmlns:mso='http://schemas.microsoft.com/office/2009/07/customui'>" & vbNewLine
ribbonXML = ribbonXML + "  <mso:ribbon>" & vbNewLine
ribbonXML = ribbonXML + "    <mso:qat/>" & vbNewLine
ribbonXML = ribbonXML + "    <mso:tabs>" & vbNewLine
ribbonXML = ribbonXML + "      <mso:tab id='reportTab' label='Reports' insertBeforeQ='mso:TabFormat'>" & vbNewLine
ribbonXML = ribbonXML + "        <mso:group id='reportGroup' label='Reports' autoScale='true'>" & vbNewLine
ribbonXML = ribbonXML + "          <mso:button id='runReport' label='PTO' "   & vbNewLine
ribbonXML = ribbonXML + "imageMso='AppointmentColor3'      onAction='GenReport'/>" & vbNewLine
ribbonXML = ribbonXML + "        </mso:group>" & vbNewLine
ribbonXML = ribbonXML + "      </mso:tab>" & vbNewLine
ribbonXML = ribbonXML + "    </mso:tabs>" & vbNewLine
ribbonXML = ribbonXML + "  </mso:ribbon>" & vbNewLine
ribbonXML = ribbonXML + "</mso:customUI>"

ribbonXML = Replace(ribbonXML, """", "")

Open path & fileName For Output Access Write As hFile
Print #hFile, ribbonXML
Close hFile

End Sub

Sub ClearCustRibbon()

Dim hFile As Long
Dim path As String, fileName As String, ribbonXML As String, user As String

hFile = FreeFile
user = Environ("Username")
path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\"
fileName = "Excel.officeUI"

ribbonXML = "<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, ribbonXML
Close hFile

End Sub

Wookbook'taki LoadCustRibbon alt çağrısını bile açın ve ThisWorkbook kod dosyasının Before_Close Olayında ClearCustRibbon alt öğesini çağırın.


Bu benim için çalıştı, ancak sadece karşılaştığım birkaç küçük sorun vardı. 1) Before_Close Olayını içinde tutarsam yeni şerit yüklenmedi. 2) Before_Close olayını kaldırarak şeridi çalıştırmayı başardığımda, görünmeden önce Excel'i yeniden yüklemem gerekiyordu. Bunun neden olduğunu söylerseniz, bu harika olur!
Petay87

Kod tamamen aynı mı? Gönderebilir misin Buradaki fikir, Excel'in şerit yüklenmeden önce standart şerit dosyasını değiştirmesi ve çalışma kitabı kapanmadan önce sıfırlaması gerektiğidir. Şeridin sıfırlanması, diğer çalışma kitaplarında görüntülenmemesi için gereklidir.
Roi-Kyi Bryant

3
Bu kod, kullanıcının halihazırda yapmış olabileceği tüm geçerli şerit özelleştirmelerinin üzerine yazar.
Wizzle Bulanık

@WizzleWuzzle Buna gerek yok. Şerit içe aktarılabilir ve çapraz geçiş yapılabilen bir nesneye ayrıştırılabilir. Daha sonra nesneye yeni öğeler eklenebilir. Sonuç bir dosyaya kaydedilebilir. Soru, özel bir şeridin nasıl oluşturulacağıydı; var olanı nasıl değiştireceğiniz değil.
Roi-Kyi Bryant

1
@ Roi-Kyi-Bryant Soru, tüm mevcut özel şeridin üzerine yazmak değil, özel bir şerit öğesi eklemekti. Bu kod, mevcut şeridin üzerine yazar.
Wizzle Bulanıklığı

24

Deli gibi mücadele ettim ama bu aslında doğru cevap. Değeri ne olursa olsun kaçırdığım şey şuydu

  1. Diğerlerinin dediği gibi, VBA ile CustomUI şeridi oluşturulamaz, ancak buna gerek yok!
  2. Buradaki fikir, Excel'in Dosyası> Seçenekler> Şeridi Özelleştir'i kullanarak xml Şerit kodunuzu oluşturmanız ve ardından Şeridi bir .customUI dosyasına aktarmanızdır (bu sadece içinde xml bulunan bir txt dosyasıdır)
  3. Şimdi hile geliyor : yapabilecekleriniz şunlardır burada atıfta MS aracını kullanarak .xlsm dosyasında .customUI kodu, .customUI dosyasından kodu kopyala
  4. .Xlsm dosyasına eklendikten sonra, onu her açtığınızda, tanımladığınız şerit kullanıcının şeridine eklenir - ancak <şerit startFromScratch = "false"> kullanın, aksi takdirde şeridin geri kalanını kaybedersiniz. Çalışma kitabından çıkıldığında şerit çıkarılır.
  5. Bundan sonra basittir, şeridinizi oluşturun, şeridinize özel xml kodunu .customUI dosyasından kopyalayın ve yukarıda gösterildiği gibi bir sarmalayıcıya yerleştirin (... <sekmeler> xml'niz </ sekmeler .. .)

Bu arada, Ron'un sitesinde bunu açıklayan sayfa artık http://www.rondebruin.nl/win/s2/win002.htm adresinde.

Ve işte Şerit üzerindeki düğmeleri nasıl etkinleştirdiğiniz / devre dışı bıraktığınıza dair örneği http://www.rondebruin.nl/win/s2/win013.htm

Diğer xml şerit örnekleri için ayrıca bkz. Http://msdn.microsoft.com/en-us/library/office/aa338202%28v=office.12%29.aspx


2
Yine de (5 yıl sonra) bence en iyi cevap ve belki de OP @BuZz orijinal gönderiyi yenilemek istiyor, en azından bu yanıta işaret ediyor (?). Oldukça uzun bir cevaplar listesinin en altında olduğu için onu zar zor buldum.
Chri.

18

Buradaki cevaplar, özel UI Düzenleyicinin kullanımına özeldir. Arayüzü bu harika program olmadan oluşturmak için biraz zaman harcadım, bu yüzden başka birinin bu özel UI düzenleyicisine ihtiyaç duyup duymadıklarına karar vermesine yardımcı olmak için çözümü burada belgeliyorum.

Şu microsoft yardım web sayfasına rastladım - https://msdn.microsoft.com/en-us/library/office/ff861787.aspx . Bu, arayüzün manuel olarak nasıl kurulacağını gösterir, ancak özel eklenti koduma işaret ederken bazı sorunlar yaşadım.

Düğmelerin özel makrolarınızla çalışmasını sağlamak için, .xlam subs'unuzdaki makroyu, bu SO cevabında açıklandığı gibi çağrılacak şekilde ayarlayın - Şeritten bir excel makrosu çağırma . Temel olarak, bu "IRibbonControl Olarak kontrol" parametresini şerit xml'nizden işaret edilen herhangi bir modüle eklemeniz gerekir. Ayrıca, eklenti tarafından yüklenen herhangi bir modülü doğru şekilde çağırmak için şerit xml'niz onAction = "myaddin! Mymodule.mysub" sözdizimine sahip olmalıdır.

Bu talimatları kullanarak, VBA'm eklenti ile birlikte Excel'e yüklendiğinde yüklenen özel bir sekmeye sahip bir excel eklentisi (.xlam dosyası) oluşturabildim. Düğmeler eklentiden kodu yürütür ve özel sekme ne zaman kaldırılır? Eklentiyi kaldırıyorum.


1
Bu, tüm geliştirme araçlarına sahip olmayanlarımız için çalışıyor. "Basit" çözüm için teşekkürler
Evan

2
İkinci sınıf programlama öğrencilerime bu yöntemi öğretirdim, ancak sonunda CustomUI aracını kullanmanın, erişebilirseniz daha az karmaşık olduğunu keşfettim.
Rick Henderson

8

Roi-Kyi Bryant cevabına ek olarak, bu kod tamamen Excel 2010'da çalışır. ALT + F11 tuşlarına bastığınızda VBA editörü açılır. ThisWorkbookSol tarafa çift ​​tıklayın ve ardından şu kodu yapıştırın:

Private Sub Workbook_Activate()

Dim hFile As Long
Dim path As String, fileName As String, ribbonXML As String, user As String

hFile = FreeFile
user = Environ("Username")
path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\"
fileName = "Excel.officeUI"

ribbonXML = "<mso:customUI      xmlns:mso='http://schemas.microsoft.com/office/2009/07/customui'>" & vbNewLine
ribbonXML = ribbonXML + "  <mso:ribbon>" & vbNewLine
ribbonXML = ribbonXML + "    <mso:qat/>" & vbNewLine
ribbonXML = ribbonXML + "    <mso:tabs>" & vbNewLine
ribbonXML = ribbonXML + "      <mso:tab id='reportTab' label='My Actions' insertBeforeQ='mso:TabFormat'>" & vbNewLine
ribbonXML = ribbonXML + "        <mso:group id='reportGroup' label='Reports' autoScale='true'>" & vbNewLine
ribbonXML = ribbonXML + "          <mso:button id='runReport' label='Trim' " & vbNewLine
ribbonXML = ribbonXML + "imageMso='AppointmentColor3'      onAction='TrimSelection'/>" & vbNewLine
ribbonXML = ribbonXML + "        </mso:group>" & vbNewLine
ribbonXML = ribbonXML + "      </mso:tab>" & vbNewLine
ribbonXML = ribbonXML + "    </mso:tabs>" & vbNewLine
ribbonXML = ribbonXML + "  </mso:ribbon>" & vbNewLine
ribbonXML = ribbonXML + "</mso:customUI>"

ribbonXML = Replace(ribbonXML, """", "")

Open path & fileName For Output Access Write As hFile
Print #hFile, ribbonXML
Close hFile

End Sub

Private Sub Workbook_Deactivate()

Dim hFile As Long
Dim path As String, fileName As String, ribbonXML As String, user As String

hFile = FreeFile
user = Environ("Username")
path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\"
fileName = "Excel.officeUI"

ribbonXML = "<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, ribbonXML
Close hFile

End Sub

Çalışma kitabını kaydetmeyi ve yeniden açmayı unutmayın. Bu yardımcı olur umarım!


Bununla nasıl tartışırsınız? Bunu kullanıyorum, ancak argümanları iletmenin bir yolunu bulamıyorum.
jDave1984

Cevabımı kullanarak, her bir alt rutine bir argüman listesi eklersiniz. LoadCustomRibbon gibi bir şey (String olarak tabName, String olarak groupName, String olarak btnName). Ardından @Erikas'ın belirttiği gibi uygun yerde bu alt rutinleri arayın.
Roi-Kyi Bryant

6

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 .


  1. Ş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.
  2. Yeni oluşturduğunuz her dosya için herhangi bir klasör adıyla bir klasör oluşturun.
  3. Oluşturduğunuz klasörlerin her birinin içine bir customUIve _relsklasör ekleyin .
  4. 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>
  1. İç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.
  2. 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>
  1. Değiştir .relsher dosyaları .zipile dosyada .relsdosyası / dosyaları önceki adımda güncellenmiştir.
  2. .customUIOluşturduğunuz klasörü kopyalayıp .zipdosyanın / dosyaların ana dizinine yapıştırın .
  3. .zipDosya uzantısını oluşturduğunuz Excel dosyalarından kaldırın .
  4. .xlamDosyaları Excel'de oluşturduysanız , bunları Excel eklentilerinize ekleyin.
  5. 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.

CallBacks Modülü

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

Tamamlanmış ürün


Bazı kapanış ipuçları

  1. 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.
  2. 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.

0

Buna bir başka yaklaşım, Jan Karel Pieterse'nin ücretsiz Açık XML sınıfı modülünü bu sayfadan indirmek olabilir: VBA kullanarak bir OpenXML dosyasındaki öğeleri düzenleme

Bu, VBA projenize eklendikten sonra, Excel dosyasını açabilir, XML'yi değiştirmek için VBA'yı kullanabilir, ardından dosyaları yeniden sınıflandırmak için sınıfı kullanabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.