VBA का उपयोग करके एक कस्टम रिबन टैब कैसे जोड़ें?


98

मैं एक्सेल रिबन में एक कस्टम टैब जोड़ने का एक तरीका ढूंढ रहा हूं जो कुछ बटन ले जाएगा। मैंने Google के माध्यम से इसे संबोधित करने वाले कुछ संसाधनों पर विचार किया, लेकिन सभी दिखावटी और अपमानजनक रूप से जटिल हैं।

ऐसा करने का एक त्वरित और सरल तरीका क्या है? मैं नया टैब लोड करना चाहूंगा जब मेरा VBA एक्सेल में लोड हो जाएगा।

अद्यतन : मैंने इस उदाहरण को यहाँ से आज़माया लेकिन अंतिम निर्देश पर "आवश्यक वस्तु" त्रुटि प्राप्त करें:

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

कृपया पुष्टि करें कि आप किस एक्सेल संस्करण का उपयोग कर रहे हैं?
सिद्धार्थ राउत

वह प्रोजेक्ट के लिए है।
नाथन_साव

जवाबों:


146

AFAIK आप Excel रिबन में कस्टम टैब बनाने के लिए VBA Excel का उपयोग नहीं कर सकते। हालाँकि आप VBA का उपयोग करके एक रिबन घटक को छिपा सकते हैं / दृश्य कर सकते हैं। इसके अतिरिक्त, आपके द्वारा ऊपर उल्लिखित लिंक एमएस प्रोजेक्ट के लिए है, एमएस एक्सेल के लिए नहीं।

मैं कस्टम यूआई संपादक नामक इस मुफ्त उपयोगिता का उपयोग करके अपने एक्सेल एप्लिकेशन / ऐड-इन के लिए टैब बनाता हूं ।


संपादित करें: ओपी द्वारा नए अनुरोध को समायोजित करने के लिए

ट्यूटोरियल

यहाँ एक छोटा ट्यूटोरियल है जैसा कि वादा किया गया है:

  1. कस्टम UI संपादक (CUIE) स्थापित करने के बाद, इसे खोलें और फिर फ़ाइल पर क्लिक करें प्रासंगिक Excel फ़ाइल खोलें और चुनें। कृपया सुनिश्चित करें कि एक्सेल फ़ाइल को CUIE के माध्यम से खोलने से पहले बंद कर दिया गया है। मैं एक नए वर्कशीट को एक उदाहरण के रूप में उपयोग कर रहा हूं।

    यहां छवि विवरण दर्ज करें

  2. नीचे दी गई छवि के अनुसार राइट क्लिक करें और "ऑफिस 2007 कस्टम यूआई पार्ट" पर क्लिक करें। यह "customUI.xml" डालेगा

    यहां छवि विवरण दर्ज करें

  3. अगला मेनू मेनू पर क्लिक करें | नमूना XML | कस्टम टैब। आप देखेंगे कि मूल कोड अपने आप जेनरेट हो जाता है। अब आप अपनी आवश्यकताओं के अनुसार इसे संपादित करने के लिए पूरी तरह तैयार हैं।

    यहां छवि विवरण दर्ज करें

  4. कोड का निरीक्षण करते हैं

    यहां छवि विवरण दर्ज करें

    label="Custom Tab": "कस्टम टैब" को उस नाम से बदलें, जिसे आप अपना टैब देना चाहते हैं। फिलहाल इसे "जेरोम" कहते हैं।

    नीचे का हिस्सा एक कस्टम बटन जोड़ता है।

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

    imageMso: यह वह छवि है जो बटन पर प्रदर्शित होगी। "हैप्पीफेस" वही है जो आप इस समय देखेंगे। आप यहाँ अधिक छवि आईडी डाउनलोड कर सकते हैं

    onAction="Callback": "कॉलबैक" उस प्रक्रिया का नाम है जो बटन पर क्लिक करने पर चलती है।

डेमो

इसके साथ, 2 बटन बनाते हैं और उन्हें "JG बटन 1" और "JG बटन 2" कहते हैं। आइए पहले वाले की छवि के रूप में खुश चेहरा रखें और दूसरे के लिए "सूर्य" रखें। संशोधित कोड अब इस तरह दिखता है:

<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 में उत्पन्न सभी कोड को हटा दें और फिर उपरोक्त कोड को उसके बदले में पेस्ट करें। सेव करें और बंद करें। अब जब आप एक्सेल फाइल खोलेंगे तो यह इस तरह दिखाई देगा:

यहां छवि विवरण दर्ज करें

अब कोड भाग। VBA संपादक खोलें, एक मॉड्यूल डालें, और इस कोड को पेस्ट करें:

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 फ़ाइल को मैक्रो सक्षम फ़ाइल के रूप में सहेजें। अब जब आप स्माइली या सूर्य पर क्लिक करेंगे तो आपको संबंधित संदेश बॉक्स दिखाई देगा:

यहां छवि विवरण दर्ज करें

उम्मीद है की यह मदद करेगा!


6
हाँ :) रॉन अपनी वेबसाइट में बहुत सारे उदाहरण हैं। rondebruin.nl/ribbon.htm
सिद्धार्थ राउत

1
क्या आप एक नया टैब बनाना चाहते हैं? यदि हाँ, तो अधिक जानकारी प्रदान करें और मैं आपको XML कोड :)
सिद्धार्थ राउत

1
गिममे 20 मि। प्रासंगिक कोड और स्नैपशॉट के साथ उपरोक्त पोस्ट को अपडेट करना :)
सिद्धार्थ राउत

6
@SiddharthRout +1 - मुझे पता चल रहा है कि मुझे किसी एक्सेल किताबों की ज़रूरत नहीं है, बस एक दिन के काम में मुझे जो सीखने की ज़रूरत है, उसके लिए अपनी पोस्ट का पालन करें (और आज शाम को, यह रिबन XML है!) :)
हमारा आदमी

1
मैं आपको मूल xml कोड और VBA कोड के साथ एक नया quesiton बनाने की सलाह दूंगा और फिर हम इसे वहां ले जा सकते हैं? @YasserKhalil
सिद्धार्थ राउत

30

मैं Excel 2013 में VBA के साथ इसे पूरा करने में सक्षम था। किसी विशेष संपादक की आवश्यकता नहीं थी। आपको केवल विजुअल बेसिक कोड एडिटर चाहिए, जिसे डेवलपर टैब पर एक्सेस किया जा सकता है। डेवलपर टैब डिफ़ॉल्ट रूप से दिखाई नहीं देता है इसलिए इसे फ़ाइल> विकल्प> कस्टमाइज़ रिबन में सक्षम करने की आवश्यकता है। डेवलपर टैब पर, Visual Basic बटन पर क्लिक करें। कोड एडिटर लॉन्च होगा। बाईं ओर प्रोजेक्ट एक्सप्लोरर फलक में राइट क्लिक करें। इन्सर्ट मेनू पर क्लिक करें और मॉड्यूल चुनें। नए मॉड्यूल के नीचे दोनों उप जोड़ें।

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 में भी LoadCustRibbon उप को कॉल करें और यहां तक ​​कि ClearWustRibbon उप को इसWorkbook कोड फ़ाइल के पहले_क्लिक करें इवेंट में कॉल करें।


यह मेरे लिए काम करता है, लेकिन केवल कुछ मामूली मुद्दों के साथ, जिनमें मैं भाग गया था। 1) अगर मैंने पहले की घटना को रखा तो नया रिबन लोड नहीं हुआ। 2) जब मैं रिबन से पहले के इवेंट को हटाकर काम पाने में कामयाब रहा, तो मुझे एक्सेल को प्रदर्शित होने से पहले फिर से लोड करना होगा। यदि आप सलाह दे सकते हैं कि ऐसा क्यों हो रहा है, तो यह बहुत अच्छा होगा!
पेटे87

क्या कोड बिल्कुल समान है? क्या आप इसे पोस्ट कर सकते हैं? यह विचार है कि Excel को रिबन लोड होने से पहले मानक रिबन फ़ाइल को संशोधित करना चाहिए और कार्यपुस्तिका बंद होने से पहले इसे रीसेट करना चाहिए। रिबन को रीसेट करना आवश्यक है, इसलिए इसे अन्य कार्यपुस्तिकाओं में प्रदर्शित नहीं किया गया है।
रोई-की ब्रायंट

3
यह कोड उन सभी मौजूदा रिबन कस्टमाइज़ेशन को अधिलेखित कर देता है, जो उपयोगकर्ता ने पहले ही बना लिए होंगे।
WizzleWuzzle

@WizzleWuzzle यह करने के लिए नहीं है। रिबन को आयात किया जा सकता है और एक ऐसी वस्तु में रखा जा सकता है जिसे ट्रैवर्स किया जा सकता है। नए तत्वों को तब ऑब्जेक्ट में जोड़ा जा सकता है। परिणाम को किसी फ़ाइल में सहेजा जा सकता है। सवाल यह था कि एक कस्टम रिबन कैसे बनाया जाए; किसी मौजूदा को संशोधित करने का तरीका नहीं।
रोई-क्यूई ब्रायंट

1
@ रोई-क्ये-ब्रायंट सवाल एक कस्टम रिबन आइटम को जोड़ने का था, न कि पूरे वर्तमान कस्टम रिबन को ओवरराइट करने का। यह कोड वर्तमान रिबन को ओवरराइट करता है।
WizzleWuzzle

24

मैं पागल की तरह संघर्ष करता रहा, लेकिन यह वास्तव में सही जवाब है। इसके लायक क्या है, जो मैंने याद किया वह यह है:

  1. जैसा कि दूसरों का कहना है, कोई भी VBA के साथ CustomUI रिबन नहीं बना सकता है, हालाँकि , आपको इसकी आवश्यकता नहीं है!
  2. यह विचार है कि आप एक्सेल की फ़ाइल> विकल्प> कस्टमाइज़ रिबन का उपयोग करके अपना xml रिबन कोड बनाएँ, और फिर रिबन को एक .customUI फ़ाइल में निर्यात करें (यह सिर्फ एक txt फ़ाइल है, जिसमें xml है)
  3. अब चाल आती है : आप कर सकते हैं .customUI फ़ाइल से कोड को कॉपी करके, वे MS टूल का उपयोग करके .xlsm कोड को अपने .xlsm फ़ाइल में शामिल हैं
  4. एक बार इसे .xlsm फ़ाइल में शामिल करने के बाद, हर बार जब आप इसे खोलते हैं, तो आपके द्वारा परिभाषित रिबन है को उपयोगकर्ता के रिबन जोड़ा जाता है - लेकिन <रिबन startFromScratch = "गलत"> का उपयोग करें या आप रिबन के बाकी हिस्सों को खो दें। वर्कबुक से बाहर निकलने पर, रिबन को हटा दिया जाता है।
  5. यहाँ से यह सरल है, अपना रिबन बनाएँ, xml कोड की प्रतिलिपि बनाएँ जो आपके रिबन से .customUI फ़ाइल के लिए विशिष्ट है, और इसे एक आवरण में रखें जैसा कि ऊपर दिखाया गया है ... (<टैब> आपका xml </ tabs .. ।)

वैसे पेज जो रॉन की साइट पर इसे समझाता है वह अब है http://www.rondebruin.nl/win/s2/win002.htm पर है

और यहाँ उसका उदाहरण है कि आप रिबन पर बटन कैसे सक्षम / अक्षम करते हैं http://www.rondebruin.nl/win/s2/win013.htm

रिबन के अन्य xml उदाहरणों के लिए कृपया http://msdn.microsoft.com/en-us/library/office/aa338202%28v=office.12%29.aspx भी देखें


2
फिर भी (5 साल बाद) मेरी राय में सबसे अच्छा जवाब और शायद ओपी @ बज़्ज़ मूल पोस्ट को ताज़ा करना चाहते हैं, कम से कम इस जवाब (?) की ओर इशारा करते हुए। मैंने मुश्किल से इसे पाया क्योंकि यह उत्तर की लंबी सूची के नीचे स्थित था।
Chri.s

18

कस्टम UI संपादक का उपयोग करने के लिए यहां दिए गए उत्तर विशिष्ट हैं। मैंने उस अद्भुत कार्यक्रम के बिना इंटरफ़ेस बनाने में कुछ समय बिताया, इसलिए मैं किसी और को यह तय करने में मदद करने के लिए यहां समाधान का दस्तावेजीकरण कर रहा हूं कि उन्हें उस कस्टम यूआई संपादक की आवश्यकता है या नहीं।

मैं निम्नलिखित Microsoft मदद वेबपेज पर आया था - https://msdn.microsoft.com/en-us/library/office/ff861787.aspx । यह दिखाता है कि इंटरफ़ेस को मैन्युअल रूप से कैसे सेट किया जाए, लेकिन मेरे कस्टम ऐड-इन कोड को इंगित करते समय मुझे कुछ परेशानी हुई।

अपने कस्टम मैक्रो के साथ काम करने के लिए बटन प्राप्त करने के लिए, अपने .xlam उप में मैक्रो को सेटअप करें जिसे इस SO उत्तर में वर्णित किया जाए - रिबन से एक्सेल मैक्रो को कॉल करना । मूल रूप से, आपको अपने रिबन xml से इंगित किए गए किसी भी मॉड्यूल के लिए उस "नियंत्रण के रूप में IRibbonControl" को जोड़ने की आवश्यकता होगी। इसके अलावा, आपके रिबन xml में उचित रूप से ऐड द्वारा लोड किए गए किसी भी मॉड्यूल को कॉल करने के लिए onAction = "myaddin! Mymodule.mysub" सिंटैक्स होना चाहिए।

उन निर्देशों का उपयोग करके मैं एक .xlam फ़ाइल में एक एक्सेल ऐड बनाने में सक्षम था, जिसमें एक कस्टम टैब लोड होता है जब मेरा VBA ऐड के साथ एक्सेल में लोड हो जाता है। बटन ऐड इन और कस्टम टैब अनइंस्टॉल से कोड निष्पादित करते हैं। मैं ऐड को अंदर निकालता हूं


1
यह उन सभी के लिए काम करता है जिनके पास सभी विकास उपकरण नहीं हैं। "सरल" समाधान के लिए धन्यवाद
इवान

2
मैं अपने दूसरे वर्ष के प्रोग्रामिंग छात्रों को यह तरीका सिखाता था, लेकिन अंततः पाया कि अगर आप इसे एक्सेस कर सकते हैं तो CustomUI टूल का उपयोग करना कम जटिल है।
रिक हेंडरसन

8

Roi-Kyi ब्रायंट उत्तर के अलावा, यह कोड पूरी तरह से Excel 2010 में काम करता है। ALT + F11 दबाएँ और VBA संपादक पॉप अप होगा। ThisWorkbookबाईं ओर डबल क्लिक करें , फिर इस कोड को पेस्ट करें:

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

सेवबुक को सेव और री-ओपन करना न भूलें। उम्मीद है की यह मदद करेगा!


आप इसके साथ तर्क कैसे पारित करेंगे? मैं इसका उपयोग कर रहा हूं, लेकिन तर्कों को पारित करने का तरीका नहीं खोज सकता।
jDave1984

मेरे उत्तर का उपयोग करते हुए, आप प्रत्येक उप रूटीन में एक तर्क सूची जोड़ेंगे जैसे कुछ LoadCustomRibbon (स्ट्रिंग के रूप में नाम, स्ट्रिंग के रूप में समूहनाम, स्ट्रिंग के रूप में btnName)। फिर उन सब रूटीन को उचित स्थान पर कॉल करें जैसा कि @ एरिकस ने बताया।
रोई-की ब्रायंट

6

जब कई ऐड-इन ने रिबन को संशोधित करने की कोशिश की तो मुझे रोई-काई ब्रायंट के समाधान में मुश्किलें आईं । मेरे पास अपने कार्य-कंप्यूटर पर व्यवस्थापक पहुंच भी नहीं है, जिसने इसे स्थापित करने से इनकार कर दिया है Custom UI Editor। इसलिए, यदि आप मेरे समान नाव में हैं, तो यहां केवल एक्सेल का उपयोग करके रिबन को कस्टमाइज़ करने का एक वैकल्पिक उदाहरण है। ध्यान दें, मेरा समाधान Microsoft गाइड से लिया गया है ।


  1. एक्सेल फ़ाइल / फाइलें बनाएँ जिनके रिबन आप अनुकूलित करना चाहते हैं। मेरे मामले में, मैंने दो .xlamफाइलें बनाई हैं , Chart Tools.xlamऔर Priveleged UDFs.xlam, यह दर्शाने के लिए कि रिबन के साथ कितने ऐड-इन्स बातचीत कर सकते हैं।
  2. आपके द्वारा बनाए गए प्रत्येक फ़ाइल के लिए, किसी भी फ़ोल्डर के नाम के साथ एक फ़ोल्डर बनाएँ ।
  3. फ़ोल्डरों आपके द्वारा बनाया गया में से प्रत्येक के अंदर, एक जोड़ने customUIऔर_rels फ़ोल्डर ।
  4. प्रत्येक customUIफ़ोल्डर के अंदर , एक customUI.xmlफ़ाइल बनाएँ । customUI.xmlफ़ाइल विवरण कैसे एक्सेल रिबन के साथ सहभागिता फ़ाइलें। Microsoft गाइड का भाग 2customUI.xml फ़ाइल में तत्वों को शामिल करता है ।

मेरी customUI.xmlफाइल Chart Tools.xlamइस तरह दिखती है

<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फाइल Priveleged UDFs.xlamइस तरह दिखती है

<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. चरण 1 में आपके द्वारा बनाई गई प्रत्येक फ़ाइल के लिए , .zipउनके फ़ाइल नाम के लिए प्रत्यय । मेरे मामले में, मैं नाम दिया Chart Tools.xlamकरने के लिए Chart Tools.xlam.zip, और Privelged UDFs.xlamकरने के लिए Priveleged UDFs.xlam.zip
  2. प्रत्येक .zipफ़ाइल खोलें , और _relsफ़ोल्डर में नेविगेट करें । चरण 3 में आपके द्वारा बनाए .relsगए _relsफ़ोल्डर में फ़ाइल की प्रतिलिपि बनाएँ । प्रत्येक .rels फ़ाइल को एक पाठ संपादक के साथ संपादित करें । से माइक्रोसॉफ्ट गाइड

अंतिम <Relationship>तत्व और समापन <Relationships>तत्व के बीच, एक पंक्ति जोड़ें जो दस्तावेज़ फ़ाइल और अनुकूलन फ़ाइल के बीच संबंध बनाता है। सुनिश्चित करें कि आप फ़ोल्डर और फ़ाइल नामों को सही ढंग से निर्दिष्ट करते हैं।

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

मेरी .relsफाइल Chart Tools.xlamइस तरह दिखती है

<?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फाइल Priveleged UDFsइस तरह दिखती है।

<?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. पिछले चरण में आपके द्वारा संशोधित फ़ाइल / फ़ाइलों के साथ .relsप्रत्येक .zipफ़ाइल में फ़ाइलों को बदलें .rels
  2. फ़ाइल / फ़ाइलों .customUIकी होम डायरेक्टरी में आपके द्वारा बनाए गए फ़ोल्डर को कॉपी और पेस्ट .zipकरें।
  3. .zipआपके द्वारा बनाई गई Excel फ़ाइलों से फ़ाइल एक्सटेंशन निकालें
  4. यदि आपने .xlamफ़ाइलें बनाई हैं , तो Excel में, उन्हें अपने Excel ऐड-इन्स में जोड़ें।
  5. यदि लागू हो, तो अपने प्रत्येक ऐड-इन्स में कॉलबैक बनाएँ । चरण 4 में, onActionमेरे बटन में कीवर्ड हैं। onActionकीवर्ड इंगित करता है कि, जब युक्त तत्व शुरू हो रहा है, एक्सेल आवेदन उप दिनचर्या सीधे के बाद उद्धरण चिह्नों में encased ट्रिगर किया जाएगा onActionकीवर्ड। इसे कॉलबैक के रूप में जाना जाता है । मेरी .xlamफाइलों में, मेरे पास एक मॉड्यूल है, CallBacksजहां मैंने अपने कॉलबैक सब-रूटिन को शामिल किया है।

कॉलबैक मॉड्यूल

मेरा CallBacksमॉड्यूल Chart Tools.xlamजैसा दिखता है

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मॉड्यूल Priveleged UDFs.xlamजैसा दिखता है

विकल्प स्पष्ट

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

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

विभिन्न तत्वों का एक अलग कॉलबैक सब-रूटीन हस्ताक्षर है। बटन के लिए, आवश्यक उप-रूटीन पैरामीटर है ByRef control As IRibbonControl। यदि आप आवश्यक कॉलबैक हस्ताक्षर के अनुरूप नहीं हैं, तो आपको अपने VBA प्रोजेक्ट / परियोजनाओं को संकलित करते समय एक त्रुटि प्राप्त होगी। Microsoft गाइड का भाग 3 सभी कॉलबैक हस्ताक्षरों को परिभाषित करता है।


यहाँ मेरा तैयार उदाहरण कैसा दिखता है

तैयार उत्पाद


कुछ समापन टिप्स

  1. यदि आप रिबन तत्वों को साझा करने के लिए ऐड-इन्स चाहते हैं, तो कीवर्ड idQऔर xlmns:कीवर्ड का उपयोग करें । मेरे उदाहरण में, Chart Tools.xlamऔर Priveleged UDFs.xlamदोनों के तत्वों की पहुँच idQसमान है x:chartToolsTabऔर x:privelgedUDFsTab। यह काम करने के लिए, x:आवश्यक है, और, मैंने अपनी customUI.xmlफ़ाइल की पहली पंक्ति में इसके नाम स्थान को परिभाषित किया है <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">। खंड दो तरीके Fluent यूआई अनुकूलित करने में माइक्रोसॉफ्ट गाइड कुछ और जानकारी देता है।
  2. यदि आप एड-इन्स के साथ भेजे गए रिबन तत्वों तक पहुँचने के लिए ऐड-इन्स चाहते हैं, तो isMSOकीवर्ड का उपयोग करें । खंड दो तरीके Fluent यूआई अनुकूलित करने में माइक्रोसॉफ्ट गाइड कुछ और जानकारी देता है।

0

इसका एक और तरीका इस पृष्ठ से जन कारेल पीटरस का मुफ्त ओपन एक्सएमएल क्लास मॉड्यूल डाउनलोड करना होगा: वीबीए का उपयोग करके ओपनएक्सएमएल फ़ाइल में तत्वों का संपादन।

अपने VBA प्रोजेक्ट में जोड़े जाने के साथ, आप एक्सेल फ़ाइल को अनज़िप कर सकते हैं, XML को संशोधित करने के लिए VBA का उपयोग कर सकते हैं, फिर फ़ाइलों को रिज़िप करने के लिए क्लास का उपयोग कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.