Adăugarea unui Callback în Access

În secțiunea anterioară, ați modificat Panglica adăugând trei elemente la aceasta: o filă, un grup și un control. Acum este timpul să vedeți cum de adaugă un Callback. Urmați acești pași:

1. Deschideți baza de date care conține fila specială Execute de pe panglica pe care ați utilizat-o în pasul anterior.

2. Apăsați Alt+F11 pentru a deschide VBA Editor în Access. Înainte de a putea comunica din controalele panglicii la o procedură VBA în Access, trebuie să specificați o referință la o bibliotecă de obiecte (acest pas nu este necesar în celelalte aplicații Office 2016).

3. Alegeți Tools > References în VBA Editor. Observați că Microsoft Office 15.0 Access database engine Object Library este selectată în mod implicit. Cu toate acestea, trebuie să defilați în jos până la Microsoft Office 16.0 Object Library și bifați caseta de selectare. Dacă nu reușiți să faceți acest pas, apelurile callback VBA nu vor funcționa—veți vedea mesajul de eroare "Microsoft Office cannot run the macro or callback function 'togtest'. Make sure the macro or function exists and takes the correct parameters."

Insist asupra acestui lucru, deoarece se poate omite adăugarea Office 16.0 Object Library (cel puțin a fost pentru mine-mi-a luat ore pentru a da seama de asta). Am citit că o trimitere la acea bibliotecă era necesară, dar când am deschis caseta de dialog References și m-am uitat la ea, am văzut Microsoft Access 15.0 Object Library și a crezut că asta este. Așa că am închis caseta de dialog fără a adăuga referința esențială la biblioteca Office 16.0.

4. Faceţi clic pe OK pentru a închide caseta de dialog References.

5. Faceţi dublu clic pe Module1 din VBA Editor Project Explorer. Dacă nu există Module1, alegeți Insert > Module.

6. Introduceți această procedură în modul:

Sub togtest(control As IRibbonControl, down As Boolean)
   If down Then
      MsgBox "Button Down"
   Else
      MsgBox "Button Up"
   End If
End Sub

Această procedură analizează argumentul numit down, și dacă returnează o valoare de True, înseamnă că butonul de comutare a fost apăsat pe Panglică. În cazul în care returnează valoarea False, asta înseamnă că butonul de comutare a fost apăsat din nou. Codul If down Then este doar o versiune mai scurtă a If down = True Then.

7. Acum faceți clic pe butonul Click To Toggle de pe fila Execute de pe panglica Access. Ar trebui să vedeți o casetă de mesaje în care scrie "Button Down."

Comunicare direct cu VBA

Este posibil să vă amintiți din secțiunea "Descrierea Access Object Model și a Key Objects", că utilizatorul nu poate executa direct o procedură VBA dintr-un buton din bara de instrumente Quick Access Toolbar. În schimb, trebuie să creați mai întâi în Access o "macrocomandă" în stil vechi care utilizează comanda RunCode pentru a executa procedura VBA. Cu toate acestea, tehnica de apelare inversă (Callback) pe care ați învățat-o în această secțiune permite utilizatorului să facă clic pe un buton (sau alt control) din Panglică care execută direct o funcție VBA, fără a trece printr-o "macrocomandă" Access de stil vechi.

Ce trebuie să verificați dacă lucrurile merg prost

Particularizarea panglicii – deși utilă și importantă – este un teritoriu nou pentru mulți programatori. Aveți de-a face cu XML ca o platformă de cod, unele tehnici de programare neobișnuite (cum ar fi scrierea descriptiv a codului "markup" în XML și codul de programare tradițional din VBA), comunicarea între XML și VBA prin callbacks, controale noi, enumerare noi ( cum ar fi setul de pictograme pe care îl puteți utiliza cu ImageMso) și așa mai departe.

Bug-uri se întâmplă chiar și atunci când scrie cod într-o tehnologie pe care este posibil să o fi fost utilizat de zeci de ani, cum ar fi Visual Basic. Deci, nu este o surpriză faptul că programarea panglicii, care are mai multe caracteristici unice – să aibă bug-uri. Următoarele secțiuni descriu unele strategii pentru tratarea bug-urilor comune legate de panglică.

Folosirea instrumentelor Error-Message

Iată doi pași preliminari pe care îi puteți folosi pentru a evita, sau repara bug-uri.

Mai întâi, activați o caracteristică de raportare a erorilor care este dezactivată în mod implicit. Acesta vă permite să vedeți anumite tipuri de mesaje de eroare dacă ceva este în neregulă cu particularizarea Panglicii. Faceți clic pe fila File de pa Panglică, apoi alegeți Options pentru a deschide caseta de dialog Options a aplicației. Faceți clic pe butonul Advanced (sau, dacă lucrați în Access, faceți clic pe butonul Client Settings). Defilați în jos până la secțiunea General și asigurați-vă că este bifată caseta de selectare Show Add-in User Interface Errors.

XML în sine nu afișează mesaje de eroare sau crash - doar nu face nimic dacă există o problemă, și, în general, așa procedează în browsere, dacă au cod XML cu erori. Cu alte cuvinte, nu se întâmplă nimic: nu apare o filă nouă, nu este ascunsă o filă încorporată, modificările de formatare așteptate într-un browser nu sunt văzute și așa mai departe. Dar dacă activați caracteristica Show Add-in User Interface Errors, veți vedea o explicație descriptivă a motivului pentru care o panglică nu a fost modificată.

Mesajul de eroare va afișa ceva de genul mesajului afișat în figura următoare.

Mesajul de eroare vă spune că eroarea în XML se află pe linia 12 din următorul cod:

1. <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
2. <ribbon>
3.    <tabs>
4.       <tab id="t1" label="Execute">
5.          <group id="g1" label="Run Test">
6.       
7.       
8.          <toggleButton id="tb1"
9.             label="Change me."
10.            supertip="Dynamically changes this button's label"
11.
12.            onActon="tix"
13.            />
14.         </group>
15.      </tab>
16.   </tabs>
17. </ribbon>
18. </customUI> 

Mesajul mai spune că elementul toggleButton nu are niciun atribut numit onActon, și într-adevăr nu are. Trebuia tastat onAction, deci aici e o greșeală de scriere. Majoritatea erorilor se fac la scrierea incorectă a caracterelor. De exemplu, ați scris corect atributul sau alt element de cod, dar ați tastat OnAction în loc de onAction – scris corect. Amintiți-vă că limbajului XML îi pasă de capitalizare, deci caracterele trebuie să se potrivească exact. Nerespectarea acestei reguli este sursa multor bug-uri în XML. Verificați întotdeauna literele majuscule atunci când urmăriți o problemă XML. O nepotrivire este ușor de trecut cu vederea.

Al doilea pas preliminar de făcut atunci când remediați erorile este să utilizați un editor XML capabil să valideze codul XML. Un astfel de editor este inclus în unele versiuni de Visual Basic (cum ar fi VB Express, care nu este VBA încorporat în aplicațiile Office, ci mai degrabă versiunea de sine stătătoare a limbajului de programare de bază din Visual Studio de la Microsoft).

Puteți găsi, de asemenea, editoare gratuite XML de exemplu pe MajorGeeks.com. Sau, puteți utiliza instrumentul Custom UI Editor pentru Microsoft Office pe care l-ați descărcat mai devreme în această secțiune. Programele de editare XML vă pot oferi mesaje de eroare utile dacă codul XML este defect - linia pe care se află problema și, uneori, o bună descriere a erorii. Există o suprapunere între mesajele de eroare de validare XML și cele afișate de opțiunea Show Add-In User Interface Errors pe care ați activat-o în pasul anterior. Dar când vine vorba de repararea bug-uri, mai multe mesaje pot fi binevenite.

Probleme de programare la interfața obișnuită de utilizator

Acum, haideți să explorăm câteva mesaje de eroare obișnuite pentru a vedea ce puteți face în legătură cu acestea.

Probleme Callback: Bad Reference, Missing VBA Procedure, sau SECURITY ISSUES

Primul mesaj de eroare la care ne vom uita vă spune că există o problemă cu o apelare Callback pe care o încercați. Codul XML nu poate executa atributul onAction (vezi figura următoare). Acest mesaj de eroare să apară atunci când nu ați setat o referință la biblioteca Microsoft Access 16.0 Object Library, așa cum este descris în pasul 3 din secțiunea Adăugarea unui apel înapoi în Access mai devreme în această secțiune (o variantă a acestui mesaj de eroare este descrisă în acea secțiune).

Când faceți clic pe butonul new din Panglică pentru a-l testa, este posibil să vedeți acest mesaj de eroare.

Acest mesaj de eroare poate fi, de asemenea, cauzate de cele două probleme menționate în mesajul de eroare. În primul rând, fie ați scris greșit, fie nu ați scris niciodată procedura la care vă referiți. De exemplu, nu există nici o procedură numită tix:

onActon="tix"

Sau, în al doilea rând, trebuie să activați macrocomenzile făcând clic pe fila File de pe Panglică, pe Options, apoi pe butonul Trust Center din caseta de dialog, făcând clic pe butonul Trust Center Settings și făcând clic pe una dintre casetele de selectare care permit macrocomenzi.

Alte probleme Callback

Următorul mesaj de eroare (a se vedea figura următoare) înseamnă oricare dintre cele două lucruri. În primul rând, ați neglijat să puneți în argumentul necesar IRibbonControl. Ați scris

Sub trigger()

în loc de

Sub trigger(IRibbonControl)

Acest mesaj de eroare apare ca rezultat atunci când nu furnizați argumentele necesare.

Sau, în al doilea rând, ați neglijat să furnizați argumente suplimentare necesare. De exemplu, butonul de comutare trece două argumente la VBA, IRibbonControl (pe care toate callback-urile îl trec întotdeauna) și starea butonului, în sus sau în jos, o valoare booleană, astfel:

Sub test(control As IRibbonControl, down As Boolean)

Greșeli în codul XML

Următoarea eroare descrisă poate fi făcută ușor. Dacă încălcați structura de imbricare XML - de exemplu punând o etichetă pentru group în afara unei etichete pentru tag, veți primi mesajul de eroare afișat în figura următoare:

<button idMso="WindowNext"/>
      </tab>
</group>

Elementul group se presupune a fi într-un element tab, nu invers. Sau, dacă omiteți caracterele pentru închidere (semnificată de />), veți primi același mesaj de eroare. Mai jos lipsesc caracterele de închidere </tab>:

</group>
</tabs>

Cu toate acestea, dacă validați codul XML într-un editor XML cum ar fi Custom UI Editor pentru Microsoft Office, Editorul în sine va semnala anumite probleme, de exemplu această imbricare incorectă.

Încotro puteți merge de aici înainte

După cum ați văzut, Panglica poate fi personalizată prin program într-o varietate de moduri. Aici au fost prezentate tehnicile esențiale. Cu toate acestea, există mai multe lucruri de explorat. Puteți experimenta cu controlul interesant Gallery sau puteți crea efecte dinamice pe Panglică, cum ar fi dezactivarea, ascunderea sau schimbarea etichetei pe un control în timp ce se execută macrocomanda, după ce se justifică condițiile. De fapt, puteți crea o panglică complet nouă de la zero folosind atributul startFromScratch.

Dacă sunteți interesat să mergeți mai departe în programarea Panglicii, iată câteva resurse online utile:

  • descărcați RibbonX Visual Designer. Acest utilitar puternic vă poate ajuta în toate tipurile de modificări la Panglică. Faceți un tur al caracteristicilor sale la

www.andypope.info/vba/ribboneditor.htm

  • încercați MSDN white papers. Consultați sistemul de ajutor online Microsoft pentru dezvoltatori— MSDN. Acesta include un tutorial lung, în trei părți, despre peogramarea panglicii, care poate fi găsit la

http://msdn2.microsoft.com/en-us/library/aa338202.aspx

  • acest tutorial util acoperă subiecte avansate, cum ar fi utilizarea programelor de completare COM și actualizarea dinamică a panglicii; răspunsuri la cele mai frecvente întrebări; și o referință completă la numeroasele atribute, callback-uri și elemente copil implicate în programarea Panglicii. Sau, aruncati o privire aici

http://msdn.microsoft.com/en-us/library/office/ff862537.aspx

  • vizitați forumul Windows Ribbon Development Forum. Forumul dezvoltatorilor panglicii pentru Windows plin cu întrebări și răspunsuri privind programarea panglicii. Aici puteți posta întrebarea dumneavoastră și experții vă vor răspunde

http://social.msdn.microsoft.com/Forums/en-US/windowsribbondevelopment.