2012-01-13 8 views
72

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

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

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

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

कृपया पुष्टि करें कि आप किस Excel संस्करण का उपयोग कर रहे हैं? –

+0

मैं 2007 – Jerome

+0

का उपयोग कर रहा हूं जो परियोजना के लिए है। –

उत्तर

123

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

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


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

ट्यूटोरियल

यहाँ एक संक्षिप्त ट्यूटोरियल के रूप में देने का वादा किया है:

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

    enter image description here

  2. राइट क्लिक करें। यह "customUI.xml"

    enter image description here

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

    enter image description here

  4. के कोड

    enter image description here

    label="Custom Tab" का निरीक्षण करते हैं: नाम जो आप अपने टैब देना चाहता हूँ के साथ "कस्टम टैब" बदलें। उस समय के लिए इसे "जेरोम" कहें।

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

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

    imageMso: यह वह छवि है जो बटन पर प्रदर्शित होगी। "हैप्पीफेस" इस समय आप देखेंगे। You can download more image ID's here

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

डेमो

इसी के साथ

, के 2 बटन बनाने और उन्हें "जेजी बटन 1" और "जेजी बटन 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 में जनरेट किया गया था और फिर उस के एवज में ऊपर कोड पेस्ट को हटा दें। बचाओ और बंद करें CUIE। अब जब आप खोलने Excel फ़ाइल यह इस तरह दिखेगा:

enter image description here

अब कोड हिस्सा। ओपन 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 फ़ाइल।

enter image description here

आशा इस मदद करता है: अब जब आप स्माइली या सूर्य पर क्लिक करें आप प्रासंगिक संदेश बॉक्स देखेंगे!

+0

बस चीज़ डाउनलोड की। क्या आप किसी भी उदाहरण पृष्ठ की सिफारिश करते हैं? – Jerome

+5

हां :) रॉन की वेबसाइट पर बहुत सारे उदाहरण हैं। http://www.rondebruin.nl/ribbon.htm –

+0

ठीक है, मेरे पास पहला उदाहरण चल रहा है। लेकिन प्रदान किया गया एक्सएमएल "होम" टैब में जोड़ना है। किसी चुने हुए नाम के साथ एक टैब कैसे जोड़ें? मैंने चारों ओर खेलने की कोशिश की लेकिन एक पॉप अप नहीं कर सका। – Jerome

18

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

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

तरीका पेज है कि यह रॉन की साइट पर बताते करके यहाँ http://www.rondebruin.nl/win/s2/win002.htm

में है और कैसे आप रिबन http://www.rondebruin.nl/win/s2/win013.htm

अन्य के लिए पर/अक्षम बटन सक्षम पर अपने उदाहरण है रिबन के एक्सएमएल उदाहरण कृपया http://msdn.microsoft.com/en-us/library/office/aa338202%28v=office.12%29.aspx

14

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

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

अपने कस्टम मैक्रोज़ के साथ काम करने के लिए बटन प्राप्त करने के लिए, अपने एसओ उत्तर में वर्णित अनुसार अपने .xlam subs में मैक्रो सेट करें - Calling an excel macro from the ribbon। असल में, आपको अपने रिबन एक्सएमएल से इंगित किसी भी मॉड्यूल के लिए "आईरिबोन कंट्रोल के रूप में नियंत्रण" को जोड़ना होगा। साथ ही, आपके रिबन एक्सएमएल में एडएक्शन = "myaddin! Mymodule.mysub" सिंटैक्स होना चाहिए जो

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

+1

के बारे में निश्चित नहीं है, यह उन लोगों के लिए काम करता है जिनके पास सभी विकास उपकरण नहीं हैं। "सरल" समाधान – Evan

+1

के लिए धन्यवाद, मैं अपने दूसरे साल के प्रोग्रामिंग छात्रों को इस विधि को पढ़ाने के लिए प्रयोग करता था, लेकिन अंत में पाया गया कि कस्टमयूआई उपकरण का उपयोग करना आप कम कर सकते हैं यदि आप इसे एक्सेस कर सकते हैं। –

20

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

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 उप भी खोल सकते हैं और ThisWorkbook कोड फ़ाइल के Before_Close घटना में ClearCustRibbon उप कहते हैं।

+0

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

+0

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

4

रोई-कीई ब्रायंट उत्तर के अलावा, यह कोड एक्सेल 2010 में पूरी तरह से काम करता है। ALT + F11 और VBA संपादक पॉप अप करें।

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 

बचाने के लिए और फिर से खुल कार्यपुस्तिका के लिए मत भूलना: बाईं ओर ThisWorkbook पर डबल क्लिक करें, तो यह कोड पेस्ट करें। उम्मीद है की यह मदद करेगा!

+0

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