Bagaimana cara menambahkan tab Pita khusus menggunakan VBA?

98

Saya mencari cara untuk menambahkan tab kustom di pita Excel yang akan membawa beberapa tombol. Saya menemukan beberapa sumber yang mengatasinya melalui Google tetapi semuanya terlihat cerdik dan sangat rumit.

Apa cara cepat dan sederhana untuk melakukan itu? Saya ingin tab baru dimuat saat VBA saya dimuat ke Excel ..

PEMBARUAN : Saya mencoba contoh ini dari sini tetapi mendapatkan kesalahan "diperlukan objek" pada instruksi terakhir:

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
Berdengung
sumber
Harap konfirmasi versi Excel mana yang Anda gunakan?
Rute Siddharth
Itu untuk Project.
Nathan_Sav

Jawaban:

146

AFAIK Anda tidak bisa menggunakan VBA Excel untuk membuat tab kustom di pita Excel. Namun Anda dapat menyembunyikan / menampilkan komponen pita menggunakan VBA. Selain itu, tautan yang Anda sebutkan di atas adalah untuk MS Project dan bukan MS Excel.

Saya membuat tab untuk Aplikasi / Add-In Excel saya menggunakan utilitas gratis ini yang disebut Editor UI Khusus .


Edit: Untuk mengakomodasi permintaan baru oleh OP

Tutorial

Berikut tutorial singkat seperti yang dijanjikan:

  1. Setelah Anda menginstal Custom UI Editor (CUIE), buka dan kemudian klik File | Buka dan pilih File Excel yang relevan. Harap pastikan bahwa File Excel ditutup sebelum Anda membukanya melalui CUIE. Saya menggunakan lembar kerja baru sebagai contoh.

    masukkan deskripsi gambar di sini

  2. Klik kanan seperti yang ditunjukkan pada gambar di bawah dan klik "Office 2007 Custom UI Part". Ini akan memasukkan "customUI.xml"

    masukkan deskripsi gambar di sini

  3. Selanjutnya Klik menu Sisipkan | Contoh XML | Tab Kustom. Anda akan melihat bahwa kode dasar dibuat secara otomatis. Sekarang Anda siap untuk mengeditnya sesuai kebutuhan Anda.

    masukkan deskripsi gambar di sini

  4. Mari kita periksa kodenya

    masukkan deskripsi gambar di sini

    label="Custom Tab": Ganti "Tab Khusus" dengan nama yang ingin Anda berikan pada tab Anda. Untuk saat ini sebut saja "Jerome".

    Bagian di bawah menambahkan tombol kustom.

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

    imageMso: Ini adalah gambar yang akan ditampilkan di tombol. "HappyFace" adalah apa yang akan Anda lihat saat ini. Anda dapat mengunduh lebih banyak ID gambar di sini .

    onAction="Callback": "Callback" adalah nama prosedur yang dijalankan saat Anda mengklik tombol.

Demo

Dengan itu, mari buat 2 tombol dan beri nama "Tombol JG 1" dan "Tombol JG 2". Mari kita pertahankan wajah bahagia sebagai gambar yang pertama dan mari kita jaga "Matahari" untuk yang kedua. Kode yang diubah sekarang terlihat seperti ini:

<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>

Hapus semua kode yang dihasilkan di CUIE dan kemudian tempel kode di atas sebagai gantinya. Simpan dan tutup CUIE. Sekarang ketika Anda membuka File Excel akan terlihat seperti ini:

masukkan deskripsi gambar di sini

Sekarang bagian kode. Buka VBA Editor, masukkan modul, dan tempel kode ini:

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

Simpan file Excel sebagai file berkemampuan makro. Sekarang ketika Anda mengklik Smiley atau Matahari Anda akan melihat kotak pesan yang relevan:

masukkan deskripsi gambar di sini

Semoga ini membantu!

Rute Siddharth
sumber
6
Ya :) Ron punya banyak contoh di situsnya. rondebruin.nl/ribbon.htm
Siddharth
1
Apakah Anda ingin membuat Tab baru? Jika ya, berikan detail lebih lanjut dan saya akan memberi Anda Kode XML :)
Siddharth Rout
1
Beri aku 20 menit. Memperbarui posting di atas dengan kode dan snapshot yang relevan :)
Siddharth Rout
6
@SiddharthRout +1 - Saya menemukan bahwa saya tidak memerlukan buku Excel apa pun, cukup ikuti posting Anda untuk apa yang perlu saya pelajari dalam pekerjaan sehari-hari (dan malam ini, itu adalah Ribbon XML!) :)
Our Man in Pisang
1
Saya akan merekomendasikan membuat pertanyaan baru dengan Anda kode xml dasar dan kode VBA dan kemudian kita dapat mengambilnya dari sana? @YasserKhalil
Siddharth
30

Saya dapat melakukannya dengan VBA di Excel 2013. Tidak diperlukan editor khusus. Yang Anda butuhkan hanyalah editor kode Visual Basic yang dapat diakses di tab Pengembang. Tab Pengembang tidak terlihat secara default sehingga perlu diaktifkan di File> Opsi> Kustomisasi Pita. Pada tab pengembang, klik tombol Visual Basic. Editor kode akan diluncurkan. Klik kanan di panel Project Explorer di sebelah kiri. Klik menu sisipkan dan pilih modul. Tambahkan kedua sub di bawah ini ke modul baru.

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

Panggil sub LoadCustRibbon di Wookbook bahkan buka dan panggil sub ClearCustRibbon di Acara Before_Close dari file kode Buku Ini.

Roi-Kyi Bryant
sumber
Ini berhasil untuk saya tetapi hanya dengan beberapa masalah kecil yang saya hadapi. 1) Jika saya menyimpan Acara Before_Close, pita baru tidak dimuat. 2) Ketika saya berhasil mendapatkan pita untuk bekerja dengan menghapus acara Before_Close, saya harus memuat ulang Excel sebelum muncul. Jika Anda dapat memberi tahu mengapa ini terjadi, itu akan bagus!
Petay87
Apakah kodenya sama persis? Bisakah Anda mempostingnya? Idenya adalah Excel harus mengubah file pita standar sebelum pita dimuat dan mengatur ulang sebelum buku kerja ditutup. Mereset pita diperlukan agar tidak ditampilkan di buku kerja lain.
Roi-Kyi Bryant
3
Kode ini menimpa semua kustomisasi pita saat ini yang mungkin telah dibuat pengguna.
WizzleWuzzle
@WizzleWuzzle Itu tidak harus. Pita dapat diimpor dan diurai menjadi objek yang dapat dilintasi. Elemen baru kemudian dapat ditambahkan ke objek. Hasilnya bisa disimpan ke file. Pertanyaannya adalah bagaimana membuat pita kustom; bukan bagaimana memodifikasi yang sudah ada.
Roi-Kyi Bryant
1
@ Roi-Kyi-Bryant Pertanyaannya adalah menambahkan item pita kustom, bukan menimpa seluruh pita kustom saat ini. Kode ini menimpa pita saat ini.
WizzleWuzzle
24

Saya berjuang sekuat tenaga, tetapi ini sebenarnya jawaban yang benar. Untuk apa nilainya, apa yang saya lewatkan adalah ini:

  1. Seperti yang dikatakan orang lain, seseorang tidak dapat membuat pita CustomUI dengan VBA, namun Anda tidak perlu melakukannya!
  2. Idenya adalah Anda membuat kode Pita xml Anda menggunakan File> Opsi> Sesuaikan Pita di Excel, lalu ekspor Pita ke file .customUI (ini hanya file txt, dengan xml di dalamnya)
  3. Sekarang datang triknya : Anda dapat memasukkan kode .customUI di file .xlsm Anda menggunakan alat MS yang mereka rujuk di sini, dengan menyalin kode dari file .customUI
  4. Setelah itu disertakan dalam file .xlsm, setiap kali Anda membukanya, pita yang Anda tentukan akan ditambahkan ke pita pengguna - tetapi gunakan <ribbon startFromScratch = "false"> atau Anda kehilangan sisa pita. Saat keluar dari buku kerja, pita dihapus.
  5. Dari sini mudah, buat pita Anda, salin kode xml yang khusus untuk pita Anda dari file .customUI, dan letakkan di pembungkus seperti yang ditunjukkan di atas (... <tab> xml Anda </ tab .. .)

Omong-omong, halaman yang menjelaskannya di situs Ron sekarang ada di http://www.rondebruin.nl/win/s2/win002.htm

Dan berikut ini contohnya tentang bagaimana Anda mengaktifkan / menonaktifkan tombol di Ribbon http://www.rondebruin.nl/win/s2/win013.htm

Untuk contoh pita xml lainnya, lihat juga http://msdn.microsoft.com/en-us/library/office/aa338202%28v=office.12%29.aspx

Jan Wijninckx
sumber
2
Masih (5 tahun kemudian) jawaban terbaik menurut saya dan mungkin OP @BuZz ingin me-refresh postingan aslinya, setidaknya mengarah ke jawaban ini (?). Saya hampir tidak menemukannya karena terletak di bagian bawah daftar jawaban yang agak panjang.
Chri.s
18

Jawaban di sini khusus untuk menggunakan Editor UI khusus. Saya menghabiskan beberapa waktu membuat antarmuka tanpa program luar biasa itu, jadi saya mendokumentasikan solusi di sini untuk membantu orang lain memutuskan apakah mereka membutuhkan editor UI khusus itu atau tidak.

Saya menemukan halaman web bantuan microsoft berikut - https://msdn.microsoft.com/en-us/library/office/ff861787.aspx . Ini menunjukkan cara mengatur antarmuka secara manual, tetapi saya mengalami beberapa masalah saat menunjuk ke kode tambahan khusus saya.

Untuk mendapatkan tombol agar bekerja dengan makro kustom Anda, atur makro di subs .xlam Anda agar dipanggil seperti yang dijelaskan dalam jawaban SO ini - Memanggil makro excel dari pita . Pada dasarnya, Anda harus menambahkan parameter "control As IRibbonControl" ke modul apa pun yang diarahkan dari pita xml Anda. Selain itu, pita xml Anda harus memiliki sintaks onAction = "myaddin! Mymodule.mysub" untuk memanggil modul apa pun yang dimuat oleh add in dengan benar.

Dengan menggunakan instruksi tersebut, saya dapat membuat add in excel (file .xlam) yang memiliki tab kustom yang dimuat saat VBA saya dimuat ke Excel bersama dengan add in. Tombol menjalankan kode dari add in dan tab kustom mencopot pemasangannya saat Saya menghapus add in.

Jomtung
sumber
1
Ini berfungsi untuk kita yang tidak memiliki semua alat pengembangan. Terima kasih untuk solusi "sederhana"
Evan
2
Saya biasa mengajari siswa pemrograman tahun kedua saya metode ini, tetapi akhirnya menemukan bahwa menggunakan alat CustomUI tidak terlalu rumit jika Anda dapat mengaksesnya.
Rick Henderson
8

Selain jawaban Roi-Kyi Bryant, kode ini sepenuhnya berfungsi di Excel 2010. Tekan ALT + F11 dan editor VBA akan muncul. Klik dua kali di ThisWorkbooksisi kiri, lalu tempel kode ini:

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

Jangan lupa untuk menyimpan dan membuka kembali workbook. Semoga ini membantu!

Erikas
sumber
Bagaimana Anda akan memperdebatkan hal ini? Saya telah menggunakan ini, tetapi tidak dapat menemukan cara untuk menyampaikan argumen.
jDave1984
Menggunakan jawaban saya, Anda akan menambahkan daftar argumen ke setiap sub rutin Sesuatu seperti LoadCustomRibbon (tabName sebagai String, groupName sebagai String, btnName sebagai String). Kemudian panggil sub rutin tersebut di tempat yang sesuai seperti yang ditunjukkan @Erikas.
Roi-Kyi Bryant
6

Saya mengalami kesulitan dengan solusi Roi-Kyi Bryant ketika beberapa add-in mencoba memodifikasi pita. Saya juga tidak memiliki akses admin di komputer kerja saya, yang mengesampingkan pemasangan Custom UI Editor. Jadi, jika Anda berada di perahu yang sama dengan saya, berikut adalah contoh alternatif untuk menyesuaikan pita hanya dengan menggunakan Excel. Catatan, solusi saya berasal dari panduan Microsoft .


  1. Buat file / file Excel yang pita ingin Anda sesuaikan. Dalam kasus saya, saya telah membuat dua .xlamfile, Chart Tools.xlamdan Priveleged UDFs.xlam, untuk mendemonstrasikan bagaimana beberapa add-in dapat berinteraksi dengan Ribbon.
  2. Buat folder, dengan nama folder apa saja, untuk setiap file yang baru saja Anda buat.
  3. Di dalam setiap folder yang Anda buat, tambahkan folder customUIdan _rels.
  4. Di dalam setiap customUIfolder, buat customUI.xmlfile. The customUI.xmlrincian file bagaimana Excel file berinteraksi dengan pita. Bagian 2 dari panduan Microsoft mencakup elemen di dalam customUI.xmlfile.

customUI.xmlFile saya untuk Chart Tools.xlamterlihat seperti ini

<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.xmlFile saya untuk Priveleged UDFs.xlamterlihat seperti ini

<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. Untuk setiap file yang Anda buat pada Langkah 1, akhiran a .zipuntuk nama file mereka. Dalam kasus saya, saya mengganti nama Chart Tools.xlammenjadi Chart Tools.xlam.zip, dan Privelged UDFs.xlammenjadi Priveleged UDFs.xlam.zip.
  2. Buka setiap .zipfile, dan navigasikan ke _relsfolder. Salin .relsfile ke _relsfolder yang Anda buat pada Langkah 3. Edit setiap .rels file dengan editor teks. Dari panduan Microsoft

Di antara <Relationship>elemen terakhir dan elemen penutup <Relationships>, tambahkan garis yang membuat hubungan antara file dokumen dan file kustomisasi. Pastikan Anda menentukan folder dan nama file dengan benar.

<Relationship Type="http://schemas.microsoft.com/office/2006/
  relationships/ui/extensibility" Target="/customUI/customUI.xml" 
  Id="customUIRelID" />

.relsFile saya untuk Chart Tools.xlamterlihat seperti ini

<?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>

.relsFile saya untuk Priveleged UDFsterlihat seperti ini.

<?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. Mengganti .relsfile di setiap .zipfile dengan .relsfile / file yang dimodifikasi pada langkah sebelumnya.
  2. Salin dan tempel .customUIfolder yang Anda buat ke direktori home dari .zipfile / files.
  3. Hapus .zipekstensi file dari file Excel yang Anda buat .
  4. Jika Anda telah membuat .xlamfile, kembali ke Excel, tambahkan file ke add-in Excel Anda.
  5. Jika memungkinkan, buat panggilan balik di setiap add-in Anda. Pada Langkah 4, ada onActionkata kunci di tombol saya. Kata onActionkunci menunjukkan bahwa, ketika elemen yang mengandung dipicu, aplikasi Excel akan memicu sub-rutin yang dibungkus dalam tanda kutip tepat setelah onActionkata kunci. Ini dikenal sebagai panggilan balik . Dalam .xlamfile saya , saya memiliki modul yang disebut di CallBacksmana saya telah memasukkan sub-rutinitas panggilan balik saya.

Modul CallBacks

CallBacksModul saya untuk Chart Tools.xlamtampilannya

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

CallBacksModul saya untuk Priveleged UDFs.xlamtampilannya

Opsi Eksplisit

Public Sub InitialisePrivelegedUDFsCallBack(ByRef control As IRibbonControl)
  ThisWorkbook.InitialisePrivelegedUDFs
End Sub

Public Sub DeInitialisePrivelegedUDFsCallBack(ByRef control As IRibbonControl)
  ThisWorkbook.DeInitialisePrivelegedUDFs
End Sub

Elemen yang berbeda memiliki tanda tangan sub-rutin callback yang berbeda. Untuk tombol, parameter sub-rutin yang diperlukan adalah ByRef control As IRibbonControl. Jika Anda tidak mengikuti tanda tangan panggilan balik yang diperlukan, Anda akan menerima pesan kesalahan saat menyusun proyek / proyek VBA Anda. Bagian 3 dari panduan Microsoft mendefinisikan semua tanda tangan panggilan balik.


Inilah contoh saya yang sudah selesai

Produk jadi


Beberapa tip penutup

  1. Jika Anda ingin add-in untuk berbagi elemen Ribbon, gunakan kata kunci idQdan xlmns:. Dalam contoh saya, Chart Tools.xlamdan Priveleged UDFs.xlamkeduanya memiliki akses ke elemen idQsama dengan x:chartToolsTabdan x:privelgedUDFsTab. Agar ini berfungsi, x:diperlukan, dan, saya telah menetapkan namespace-nya di baris pertama customUI.xmlfile saya <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">,. Bagian Dua Cara Menyesuaikan UI Lancar di panduan Microsoft memberikan beberapa detail lebih lanjut.
  2. Jika Anda ingin add-in mengakses elemen Pita yang dikirimkan dengan Excel, gunakan isMSOkata kunci. Bagian Dua Cara Menyesuaikan UI Lancar di panduan Microsoft memberikan beberapa detail lebih lanjut.
Joshua Daly
sumber
0

Pendekatan lain untuk ini adalah mengunduh modul kelas Open XML gratis Jan Karel Pieterse dari halaman ini: Mengedit elemen dalam file OpenXML menggunakan VBA

Dengan ini ditambahkan ke proyek VBA, Anda dapat mengekstrak file Excel, menggunakan VBA untuk mengubah XML, lalu menggunakan kelas untuk membuat file zip kembali.

John Korchok
sumber