Utilizarea meniurilor și listelor

Deși butonul este cel mai folosit control pe Panglică (sau într-adevăr în orice interfață cu utilizatorul), puteți utiliza și alte controale. De exemplu, dacă doriți să oferiți utilizatorului mai multe opțiuni, cum ar fi alegerea între executarea a trei macrocomenzi diferite – se poate folosi o casetă cu o listă pe verticală sau un meniu în locul adăugării a trei butoane în partea de sus a panglicii (care vor fi întotdeauna vizibile în filă).

Adăugarea meniurilor

Iată cum se poate adăuga în Panglică un meniu care, atunci când faceți clic, afișează trei butoane, iar fiecare dintre acestea lansează o macrocomandă diferită:

1. Deschideți RibbonTest.docm în Custom UI Editor.

2. Tastați acest cod XML în Custom UI Editor:

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> <ribbon>
   <tabs>
      <tab id="t1" label="Execute">
         <group id="g1" label="Macrocomenzi preferate">
<menu id="m1" label="Choose a macro">
   <button id="b1"
      imageMso="InkDeleteAllInk"
      label="Convert case"
      onAction="ThisDocument.ConvertCase" />
   <button id="b2"
      imageMso="DataRefreshAll"
      label="Replace 5pt with 10pt"
      onAction="ThisDocument.UpSize" />
   <button id="b3"
      imageMso="PictureBrightnessGallery"
      label="Memo Format"
      onAction="ThisDocument.Memo" />
   </menu>
         </group>
      </tab>
   </tabs>
</ribbon>
</customUI>

Rețineți că am ales pictogramele imageMso care simbolizează diferitele acțiuni întreprinse de aceste macrocomenzi (vezi figura).

Faceți clic pe meniul Alegeti o macrocomandă, iar elementele de meniu sunt afișate ca un set de butoane, gata să lanseze diverse macrocomenzi atunci când se face clic pe ele.

3. Faceți clic pe butonul Validate din Custom UI Editor, iar dacă mesajul spune că codul nu are typos (ceea ce înseamnă că este bine format), alegeți Fișier > Salvare în Editorul UI pentru a stoca acest cod XML în fișierul RibbonTest.docm.

4. Deschideți RibbonTest.docm în Word și apăsați Alt+F11 pentru a deschideVBA Editor. Asigurați-vă că aveți cele trei macrocomenzi în modulul ThisDocument, numite ConvertCase, UpSize și Memo. Ar trebui să arate așa:

Sub ConvertCase(control As IRibbonControl)
   MsgBox "convert"
End Sub
Sub UpSize(control As IRibbonControl)
   MsgBox "upsize"
End Sub
Sub Memo(control As IRibbonControl)
   MsgBox "memo"
End Sub

(Aceste casete de mesaj folosite doar pentru testare; procedura reală va conține, desigur, macrocomenzi reale care convertesc caracterele, redimensionează fonturile și afișează un formular de memo.)

Acum puteți reveni la documentul RibbonTest.docm și încercați noul meniu. Clic pe butonul Execute, și observați meniul Alegeți o macrocomanda Choose A Macro din grupul Favorite Macros. Meniul este indicat pe Panglică de o pictogramă săgeată în jos pe care utilizatorul face clic pentru a afișa elementele de meniu, așa se arată în Figura 31.5.

Dacă preferați, puteți trimite toate butoanele de meniu la o singură macrocomandă și apoi să alegeți între ele în codul VBA al macrocomenzii prin testarea atributului lor de id (care este transmis codului VBA de proprietatea ID a obiectului de control). Codul VBA ar arăta astfel:

Sub choosemacro(control As IRibbonControl)
   Select Case control.ID
      Case "b1"
         MsgBox ("button1")
      Case "b2"
         MsgBox ("button2")
      Case "b3"
         MsgBox ("button3")
   End Select
End Sub

Pentru ca această tehnică de selectare să funcționeze, trebuie să modificați codul XML în acest exemplu, astfel încât fiecare buton să execute aceeași procedură de alegere macrocomandă - choosemacro:

<menu id="m1" label="Choose a macro">
   <button id="b1"
      imageMso="InkDeleteAllInk"
      label="Convert Case"
      onAction="ThisDocument.choosemacro" />
   <button id="b2"
      imageMso="DataRefreshAll"
      label="Replace 5pt with 10pt"
      onAction="ThisDocument.choosemacro" />
   <button id="b3"
      imageMso="PictureBrightnessGallery"
      label="Memo Format"
      onAction="ThisDocument.choosemacro" />
</menu>

Adăugarea unui control listă verticală

Puteți utiliza un control listă verticală - DropDown List ca și cum ar fi un meniu atunci când doriți să oferiți utilizatorului un set de opțiuni. Iată un exemplu de cod XML care afișează o listă verticală în Panglică. Acest exemplu afișează utilizatorului aceleași opțiuni (trei macrocomenzi) ca și exemplul anterior. Dar aici vom folosi o listă verticală în loc de meniu:

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon>
   <tabs>
      <tab id="t1" label="Execute">
         <group id="g1" label="Favorite Macros">

<dropDown id="ddlist1" 

getSelectedItemIndex="setfirst"

         label="Favorite Macros"
         onAction="ThisDocument.test">

      <item id="i1" label="Convert Case"/>
      <item id="i2" label="Replace 5pt with 10pt"/>
</dropDown>
         </group>
      </tab>
   </tabs>
</ribbon>
</customUI>

Creați un control DropDown List adăugând un element vertical în codul XML și apoi adăugați elemente (item) copil în elementul părinte dropDown. (Amintiți-vă că XML ține cont de literele mari și mici. Dacă scrieți dropdown în loc de dropDown, veți provoca o eroare, deoarece codul XML nu va fi bine format.)

Ar trebui să includeți un atribut getSelectedItemIndex, așa este ilustrat mai devreme, astfel încât caseta de text a controlului Listă verticală nu va fi inițial necompletată, derutând utilizatorul. Acest atribut execută o macrocomandă denumită setfirst, pe care trebuie să o scrieți. Această macrocomandă returnează numărul de index al elementului pe care doriți să îl afișați inițial în caseta text a controlului Listă verticală. În acest exemplu, macrocomanda returnează un zero (ceea ce înseamnă afișarea primului element). Deci, în acest exemplu, va fi afișat Convert Case. Iată macrocomanda care provoacă acest lucru prin setarea argumentul valoare return (trecut înapoi în variabila denumită x) la zero:

Sub setfirst(ByVal control As IRibbonControl, ByRef x) 
   x = 0 
End Sub

Acordați o atenție deosebită acestui atribut GetSelectedItemIndex. Rețineți că acest atribut transferă executarea la o procedură VBA atunci când documentul este încărcat (înainte ca utilizatorul să vadă Panglica), deci este o formă de inițializare. (Pentru alte tipuri de inițializare, puteți utiliza alte atribute din setul de atribute get încorporate, inclusiv getEnabled, getImageMso, get Label și getVisible.)

De asemenea, trebuie scrisă o macrocomandă suplimentară. Această a doua macrocomandă (indicată de atributul onAction în codul XML) răspunde corespunzător atunci când utilizatorul face clic pe un element din listă:

Sub test(control As IRibbonControl, id As String, index As Integer)
   Select Case index 
      Case 0
         MsgBox ("item1")
      Case 1
         MsgBox ("item2")
      Case 2
         MsgBox ("item3")
   End Select
End Sub

Când utilizatorul face clic pe un element din listă, valorile atât ale id-ului elementului, cât și ale atributelor index sunt transmise macrocomenzii. Deci, puteți utiliza oricare dintre ele pentru a decide ce cod se va executa. În acest exemplu, este folosit numărul de index, dar se poate folosi și șirul id -ului (cum ar fi Case "i1") pentru a detecta ID-ul de la fiecare element.

Utilizarea unui DialogBoxLauncher

Unele dintre grupurile încorporate pe Panglică afișează o săgeată mică în colțul din dreapta jos (de exemplu, vedeți în Word, file Home, grupul Font). Faceți clic pe săgeata respectivă și apare o casetă de dialog sau un panou de activități. Aceasta este o modalitate de a restrânge spațiul de pe Panglică, pentru că afișarea în orice moment pe Panglică a mai multor opțiuni este greu de gestionat.

Dacă doriți să adăugați o casetă de dialog la unul dintre grupurile particularizate, utilizați controlul DialogBoxLauncher scriind un cod XML ca acesta:

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon>
   <tabs>
      <tab id="t1" label="Execute">
         <group id="g1"
            imageMso="StartAfterPrevious"
            label="Insert Date">

<dialogBoxLauncher>

      <button id="b1"
      onAction="test" />

</dialogBoxLauncher>
         </group>
      </tab>
   </tabs>
</ribbon>
</customUI>

Acest DialogBoxLauncher transferă doar executarea la o macrocomandă (denumită Test în acest exemplu). Deci, atunci când utilizatorul face clic pe săgeata mică din partea de jos a grupului particularizat numit Execute, macrocomanda de testare afișează orice casetă de dialog încorporată este adecvată. Scrieți acest cod, iar macrocomanda afișează caseta de dialog Dată și oră:

Sub test(control As IRibbonControl)
Dialogs(wdDialogInsertDateTime).Show 
End Sub

Editorul VBA vă va afișa o listă a casetelor de dialog disponibile imediat ce tastați paranteza din stânga în Dialoguri(. (Acest lucru presupune că ați activat caracteristica Auto List Members la îndemână în Editorul VBA. Alegeți Tools > Options, apoi faceți clic pe fila Editor din caseta de dialog Opțiuni.)

Testați acest exemplu. Acesta va insera data curentă, formatată după cum alege utilizatorul, selectând o opțiune din caseta de dialog Dată și oră.