Lucrul cu barele de instrumente și meniuri în VBA

Lucrul cu barele de instrumente și meniuri în VBA, obiect CommandBar, CommandBarControl, CommandBarPopup, meniuri contextuale

Foarte des în aplicația VBA, veți avea nevoie de propriul set de meniuri și bare de instrumente în loc de standard furnizat de aplicație. Utilizarea meniurilor și barele de instrumente oferă o colecție de CommandBars. care este aplicația obiect (despre acest subiect important, vom discuta în următoarele module). colectare CommandBars conține, după cum sugerează și numele, un set de obiecte CommandBar (bare de instrumente și meniuri), fiecare dintre ele, la rândul său - o CommandBarControls de colectare (set de elemente care alcătuiesc panoul / meniu), iar această colecție este un depozit de elemente de care alcătuiesc meniul. Astfel de elemente pot fi trei:

  • CommandBarButton - buton sau element de meniu, care este folosit pentru a rula programul sau subrutina;
  • CommandBarComboBox - / Panou de control (câmp de introducere, o listă drop-down din caseta combo) meniu complicat;
  • CommandBarPopup - meniu sau submeniu.

Exemplu de a crea propria bara de instrumente poate arata foarte simplu:

Dim CBar1 Ca CommandBar

Set CBar1 = CommandBars.Add ( "Documente", msoBarTop)

Avem un nou Documente din bara de instrumente (a se vedea figura 8.1 ..), care poate, de exemplu, pentru a elimina meniul Setări -> Bare de instrumente, cu toate acestea, până când acesta este complet inutil: ea nu are nici un buton. Pentru ca ele să apară, trebuie să adăugați un nou tip de element CommandBarControl (unul dintre cele trei tipuri enumerate mai sus) CommandBarControls de colectare pentru acest meniu.

Lucrul cu barele de instrumente și meniuri în VBA

Fig. 8.1 În centrul imaginii - o bară de instrumente gol Documente

Dar mai întâi - despre unele dintre cele mai importante proprietăți și metode ale obiectelor CommandBar:

  • Builtin - Această proprietate determină dacă un panou / meniu dat construit pentru această aplicație (adică, dezvoltatorii de aplicații de birou furnizat). Modificați valoarea acestei proprietăți este imposibil. Această proprietate este foarte convenabil de a utiliza, pentru a elimina toate din meniu standard, sau, invers, pentru a elimina toate din meniul său, lăsând doar standardul;
  • Context - defineste exact unde codul pentru meniul de utilizator (Normal.dot, un fișier document, etc.). Acesta poate fi utilizat pentru controalele în cazul unor potențiale de apel diferite meniuri cu același nume;
  • Controale - prin această proprietate poate fi accesată de colectare a CommandBarControls de controale pe care le vor avea probabil nevoie;
  • Activat - "on / off" panou;
  • Înălțime. Stânga. Sus și W Suprafață - proprietăți evidente referitoare la bara de locație în fereastra aplicației;
  • Index. Numele și NameLocal - aceste proprietăți ne permit să găsim panoul din dreapta, în colecția CommandBars. Nume - numele unui obiect de software, NameLocal - numele care va fi vizibil pentru utilizator, Index - este doar un număr al panoului;
  • Protecția - vă permite să împiedicați utilizatorului să îndepărteze butoanele vechi din panoul sau nou loc pentru ea;
  • Tip - probabil cea mai importantă proprietate. Stabilește ce se va prezenta / meniu (bara de instrumente, meniu sau meniul contextual obișnuit, accesibil prin clic dreapta) panou. Cu toate acestea, această proprietate este read-only. CommandBar tip de obiect este determinată atunci când metoda de colectare Adăugați () CommandBars, cu un mod foarte inteligent determinat - prin al doilea parametru al metodei. În cazul nostru, această metodă de asteptare arata ca

Set CBar1 = CommandBars.Add ( "Documente", msoBarTop, Adevărat, Fals)

Primul parametru ( „Documente“) - este, desigur, numele obiectului (numele panoului). Al doilea parametru (msoBarTop) - o dispoziție a unui panou andocat (msoBarTop, msoBarBottom, msoBarLeft, msoBarRight), sau un semn care nepristykovana panoul (msoBarFloating), sau, în general, o indicație a faptului că este - meniul contextual care este de a-clic dreapta nu vizibil (msoBarPopup). Vizibil proprietate pentru meniul contextual nu se aplică.

Cum va arăta în panoul final - ca un meniu sau bară de instrumente depinde de elementele pe care ai pus acolo.

După crearea panoului este finalizat, este necesar de a plasa elemente. De exemplu, creați bara de instrumente ar trebui să arate:

Dim But1 Ca CommandBarControl

Set But1 = CBar1.Controls.Add (msoControlButton)

But1.Caption = "Buton 1"

Se pare că nu sa întâmplat nimic - vom vedea același panou gol. Cu toate acestea, dacă mutați cursorul mouse-ului în partea de sus a panoului, este posibil să se vadă un buton martor, care se numește butonul „1“ (vezi. Fig. 8.2).

Lucrul cu barele de instrumente și meniuri în VBA

Fig. 8.2 Pe documentele care apar pe bara de instrumente butonul aproape invizibil 1

După cum se poate observa din codul am folosit pentru a crea control (butonul din bara de instrumente) Adăugați () metoda de colectare a comenzilor obiect CommandBar (l-am numit CBar1). Proprietăți și metode din această colecție sunt standard, la fel ca în multe alte colecții:

  • Cererea de proprietate returnează o referință la obiectul de aplicare (Word, Excel, etc.)
  • Contele de proprietate vă permite să știi cât de mult toate controalele plasate în această colecție;
  • Postul de proprietate permite indicele (număr) pentru a obține un control al CommandBarControl de referință obiect în această colecție;
  • Metoda Adauga () (pe care am profitat) vă permite să adăugați un control în această colecție (eliminarea controalelor deja efectuate prin metoda Delete () controlul în sine).

Dim But1 Ca CommandBarControl

Set But1 = CBar1.Controls.Add (msoControlPopup)

But1.Caption = "Meniu 1"

Lucrul cu barele de instrumente și meniuri în VBA

Fig. 8.3 Instrumente pe panoul am creat meniul aparut

Parametrii rămași ai tehnicii includ crearea de ID-ul de control, poziția sa în raport cu alte controale, și dacă ar trebui să fie permanent sau temporar.

Desigur, lucrul cu panoul de control / meniu nu a fost finalizată. Avem nevoie de mai multe proprietăți de tweaking ale controalelor. De exemplu, un buton în primul exemplu, noi, cel puțin, trebuie să ne definim, de asemenea, imaginea care este pe buton și procedura este că, atunci când faceți clic pe el va fi numit. Pentru CommandBarButton obiecta proprietățile cele mai importante, metode și evenimente sunt enumerate mai jos:

  • Legendă - inscripția de pe controlul. Pentru butonul este afișat ca un sfat instrument, așa cum este pentru elementul de meniu - numele elementului.
  • Activat - pentru a activa sau dezactiva controlul ActiveX. Acesta este frecvent utilizat pentru a preveni erori de utilizator.
  • FaceID (numai pentru butoane) - capacitatea de a profita de imaginea sistemului pentru buton (fără a atribui funcția corespunzătoare s). De exemplu, valoarea 4 va atribui imaginea imprimantei. câteva mii de icoane încorporate în Word și Excel, și așa mai departe în loc să creeze icoane, există întotdeauna posibilitatea de a alege gata.
  • Id-ul - ID-ul funcției încorporate alocate acestui buton. Dacă atribuiți acest buton procedura de utilizator, apoi Id-ul este întotdeauna valoarea 1.
  • Index - numărul de control în colecția Controls. Acesta este utilizat pentru a efectua toate operațiunile de service la controale.
  • Masca - posibilitatea de a pune pe modelul masca obiectului pentru a afișa doar o parte a imaginii. Masca apare ca o imagine separată, din care o parte trebuie să fie transparent, de culoare albă și opac - negru.
  • OnAction - cea mai importantă proprietate a controlului. Valoarea sa este utilizat atunci când este activat controlul (click pe un element de buton sau meniu, completarea introducerea textului în câmpul text, selectați o valoare nouă în listă). Acesta este destinat să indice o procedură declanșată, sau o aplicație externă (COM Add-In). Exemplu: But1.OnAction = "MySub".
  • Parametrul - este posibil să se utilizeze proprietatea pentru a trece parametrii la o subrutină numit sau pur și simplu pentru a stoca datele lor. Lucrul cu tipul de date String.
  • Imagine - această caracteristică vă permite să atribuiți un buton imagine (pictogramă) din bara de instrumente. Cel mai adesea nu este în uz, și FaceId de proprietate (de mai sus). Dacă este necesar, pictogramele necesare pot fi selectate dintr-o colecție mare de care este în Visual Studio, sau de a folosi una dintre pictogramele generatoare disponibile în mod liber.
  • ShortcutText - text care descrie combinația tastatură atribuită acelui buton sau element de meniu.
  • De stat - a butonului - normală, înec sau cadru încercuite.
  • Stil - o altă proprietate care afectează aspectul. Acesta vă permite să se determine modul în care butonul va arata: Numai pictograma va fi afișată, doar o inscripție sau o combinație a celor două împreună în diferite moduri.
  • SfatEcran - definește textul tooltip. În mod implicit, „apare“ valoarea proprietății Legendă.
  • Tip - returnează tipul de comandă (utilizat pentru a schimba tipul nu poate fi!)
  • Vizibil - dacă acest control vizibil sau nu.
  • Delete () metoda - vă permite să eliminați butonul din colecția butonul;
  • Executare () metoda - execută ceea ce este definit de OnAction de proprietate;
  • Reset () - a reveni la butonul de setări inițiale, după efectuarea modificărilor;

Această facilitate este singurul eveniment - click. De asemenea, vă permite să se determine răspunsul la un clic pe butonul, dar mult mai dificil de a lucra cu el decât cu proprietatea OnAction.

În principiu, funcționează cu bare de instrumente, care este suficient. Cu toate acestea, meniul - care curge și contextul - este ceva mai complicat. În meniul drop-down, veți avea nevoie de mai multe investiții pentru a determina elementele, iar în meniul contextual - chiar și atașați acest meniu pentru orice obiect.

Pentru a lucra cu meniul imbricate este exact aceeași colecție de controale, pe care le-am folosit deja. Singura diferență - nu face parte din obiectul CommandBar de colectare a comenzilor, și obiect CommandBarPopup - adică, un alt meniu! În exemplul nostru, atașamentul va arata astfel:

„Creați obiect CommandBar standard de

Dim CBar1 Ca CommandBar

Set CBar1 = CommandBars.Add ( "Documente", msoBarTop)

Dim Menu1 Ca CommandBarPopup

SubMenu1 Dim Ca CommandBarPopup

Dim SubMenu1Item Ca CommandBarButton