VBA - Visual Basic Partner Working

Una dintre cele mai remarcabile calități ale Visual Basic este că este o complet mediu de dezvoltare. Orice vrei să faci, există o „aromă” de Visual Basic care te va ajuta să faci treaba! Puteți utiliza Visual Basic pentru dezvoltare desktop și mobilă și de la distanță (VB.NET), scripting (VBScript) și dezvoltare Office (VBA !) Dacă ați încercat VBA și doriți să aflați mai multe despre cum să îl utilizați, acesta este tutorialul pentru tine. (Acest curs se bazează pe versiunea VBA găsită în Microsoft Office 2010.)

Dacă căutați un curs în Microsoft Visual Basic .NET, ați găsit și locul potrivit. Consultați: Visual Basic .NET 2010 Express - Un tutorial „De la sol”

VBA ca concept general va fi acoperit în acest articol. VBA este mai mult decât ai putea crede! Puteți găsi articole despre surorile Office VBA:

Există practic două moduri de a dezvolta programe care pot lucra cu aplicații Office: VBA și VSTO. În octombrie 2003, Microsoft a introdus o îmbunătățire a mediului de programare profesională Visual Studio .NET numit Visual Studio Tools for Office - VSTO. Dar, chiar dacă VSTO folosește avantajele considerabile ale .NET în Office, VBA rămâne mai popular decât VSTO. VSTO necesită utilizarea versiunii profesionale sau superioare a Visual Studio - care probabil vă va costa mai mult decât aplicația Office pe care o utilizați - pe lângă aplicația Office. Dar, deoarece VBA este integrat cu aplicația Office gazdă, nu aveți nevoie de nimic altceva.

VBA este utilizat în principal de experții Office care doresc să își facă munca mai rapid și mai ușor. Rareori vezi sisteme mari scrise în VBA. VSTO, pe de altă parte, este folosit de programatorii profesioniști din organizații mai mari pentru a crea suplimente care pot fi destul de sofisticate. O aplicație de la o terță parte, cum ar fi o companie de hârtie pentru Word sau o firmă de contabilitate pentru Excel, este mai probabil să fie scrisă folosind VSTO.

În documentația lor, Microsoft observă că există în principiu trei motive pentru a utiliza VBA:

-> Automatizare și repetiție - Calculatoarele pot face același lucru de mai multe ori mult mai bine și mai repede decât pot oamenii.

-> Extensii la interacțiunea cu utilizatorul - Doriți să sugerați exact cum ar trebui cineva să formateze un document sau să salveze un fișier? VBA poate face asta. Doriți să validați ceea ce intră cineva? VBA poate face și asta.

-> Interacțiunea dintre aplicațiile Office 2010 - Un articol ulterior din această serie se numește Word și Excel care lucrează împreună. Dar dacă acest lucru este ceea ce aveți nevoie, poate doriți să luați în considerare Automatizari pentru birou, adică scrierea sistemului folosind VB.NET și apoi folosirea funcțiilor dintr-o aplicație Office, cum ar fi Word sau Excel, după cum este necesar.

Microsoft a declarat că vor continua să sprijine VBA și este prezentat în mod deosebit în Oficial Foaie de parcurs pentru dezvoltare Microsoft Office 2010. Așadar, aveți la fel de multă asigurare ca Microsoft oferă vreodată că investiția dvs. în dezvoltarea VBA nu va fi învechită în viitorul apropiat.

Pe de altă parte, VBA este ultimul produs Microsoft rămas care depinde de tehnologia VB6 "COM". Are peste douăzeci de ani acum! În anii umani, asta ar face-o mai veche decât Lestat Vampirul. S-ar putea să vedeți acest lucru ca fiind „încercat, testat și adevărat” sau s-ar putea să vă gândiți la acesta drept „vechi, uzat și învechit”. Tind să favorizez prima descriere, dar ar trebui să fiți conștienți de fapte.

Primul lucru de înțeles este relația dintre aplicațiile VBA și Office precum Word și Excel. Aplicația Office este a gazdă pentru VBA. Un program VBA nu poate fi niciodată executat de unul singur. VBA este dezvoltat în mediul gazdă (folosind Dezvoltator fila din panglica aplicației Office) și trebuie executată ca parte a unui document Word, a unei cărți de lucru Excel, a unei baze de date Access sau a unei alte gazde Office.

Modul în care este utilizat efectiv VBA este, de asemenea, diferit. Într-o aplicație precum Word, VBA este utilizat în principal ca o modalitate de a accesa obiectele mediului gazdă, cum ar fi accesarea paragrafelor dintr-un document cu obiectul Word.Document.Paragraphs Word. Fiecare mediu gazdă contribuie cu obiecte unice care nu sunt disponibile în celelalte medii gazdă. (De exemplu, nu există un „manual de lucru” într-un document Word. Un manual de lucru este unic Excel.) Codul Visual Basic este în principal pentru a face posibilă utilizarea obiectelor personalizate pentru fiecare aplicație gazdă Office..

Fuziunea dintre VBA și codul specific gazdă poate fi văzută în acest eșantion de cod (preluat din baza de date Microsoft Northwind), unde codul VBA este afișat în roșu, iar codul specific Access este afișat în albastru. Codul roșu ar fi același în Excel sau Word, dar codul albastru este unic pentru această aplicație Access.

VBA în sine este aproape la fel cum a fost de ani buni. S-a îmbunătățit modul în care se integrează cu aplicația Office gazdă și cu sistemul de ajutor.

Versiunea din 2010 a Office nu afișează în mod implicit fila Dezvoltator. Fila Dezvoltator te duce în partea din aplicație unde poți crea programe VBA, astfel încât primul lucru pe care trebuie să-l faci este să schimbi această opțiune. Pur și simplu accesați fila Fișier, Opțiuni, Personalizați panglică și faceți clic pe caseta Dezvoltator din filele principale.

Sistemul de ajutor funcționează mult mai bine decât are în versiunile anterioare. Puteți obține ajutor pentru întrebările VBA fie offline, de la un sistem instalat cu aplicația Office sau online de la Microsoft pe Internet. Cele două interfețe sunt proiectate să arate la fel:

--------
Faceți clic aici pentru a afișa ilustrația
--------

Dacă conexiunea dvs. la Internet este rapidă, ajutorul online vă va oferi mai multe informații și mai bune. Dar versiunea instalată local va fi probabil mai rapidă și în cele mai multe cazuri este la fel de bună. S-ar putea să doriți ca ajutorul local să fie implicit și apoi să utilizați ajutorul online dacă versiunea locală nu vă oferă ceea ce doriți. Cel mai rapid mod de a merge online este să selectați pur și simplu „All Word” (sau „All Excel” sau altă aplicație) din meniul Căutare din ajutor. Aceasta va merge imediat online și va efectua aceeași căutare, dar nu va reseta selecția implicită.

--------
Faceți clic aici pentru a afișa ilustrația
--------

În pagina următoare, vom începe cum să creăm efectiv un program VBA.

Când VBA este „găzduit” de o aplicație precum Word sau Excel, programul „trăiește” în fișierul document folosit de gazdă. De exemplu, în Word puteți salva „macro-ul Word” (este nu o „macro”, dar nu vom discuta despre terminologie chiar acum) într-un document Word sau un șablon Word.

Să presupunem acum că acest program VBA este creat în Word (acest program simplu schimbă fontul cu caractere aldine pentru o linie selectată) și este salvat într-un document Word:

 Sub AboutMacro () "AboutMacro Macro" Macro înregistrat 9/9/9999 de către Dan Mabbutt 'Selection.HomeKey Unit: = wdStory Selection.EndKey Unit: = wdLine, Extend: = wdExtend Selection.Font.Bold = wdToggle Selection.EndKey Unit: = wdStory End Sub 

În versiunile anterioare ale Office, puteți vedea clar codul VBA stocat ca parte a fișierului de documente în documentul Word salvat, vizualizându-l în Notepad, unde se poate vedea tot ce este în documentul Word. Această ilustrare a fost produsă cu o versiune anterioară a Word, deoarece Microsoft a modificat formatul documentului în versiunea curentă, iar codul programului VBA nu mai apare clar ca text simplu. Dar principalul este același. În mod similar, dacă creați o foaie de calcul Excel cu o „macro Excel”, acesta va fi salvat ca parte a unui fișier .xlsm.

--------
Faceți clic aici pentru a afișa ilustrația
--------

VBA și securitate

Unul dintre cele mai eficiente trucuri antivirus din trecut a fost introducerea codului VBA rău intenționat într-un document Office. Cu versiunile anterioare ale Office, când un document a fost deschis, virusul ar putea rula automat și poate crea ravagii pe mașina dvs. Această gaură deschisă de securitate din Office începe să afecteze vânzările Office și asta chiar a atras atenția Microsoft. Cu actuala generație din 2010 de Office, Microsoft a introdus în întregime gaura. În plus față de îmbunătățirile menționate aici, Microsoft a îmbunătățit securitatea Office în moduri pe care s-ar putea să nu le observați chiar până la nivelul hardware. Dacă nu ezitați să folosiți VBA, deoarece ați auzit că nu este sigur, asigurați-vă că Microsoft a plecat de la ora actuală pentru a schimba asta.

Cea mai importantă modificare a fost crearea unui tip de document special doar pentru documentele Office care includ programe VBA. În Word, de exemplu, MyWordDoc.docx nu poate conține un program VBA, deoarece Word nu va permite programele dintr-un fișier salvat cu o extensie de fișier "docx". Fișierul trebuie salvat ca „MyWordDoc.docm” pentru ca programarea VBA să fie permisă ca parte a fișierului. În Excel, extensia de fișier este ".xlsm".

Pentru a merge împreună cu acest tip de document îmbunătățit, Microsoft a creat un subsistem de securitate nou în Office numit Trust Center. În esență, puteți personaliza modul în care aplicația Office tratează documentele care conțin cod VBA în detalii fine. Deschideți Centrul de încredere din fila Dezvoltator din aplicația Office făcând clic pe Macro Security în secțiunea Cod a panglicii.

--------
Faceți clic aici pentru a afișa ilustrația
--------

Unele dintre opțiuni sunt concepute pentru a „întări” aplicațiile Office, astfel încât codul rău intenționat să nu funcționeze, iar altele sunt concepute pentru a facilita utilizarea dezvoltatorilor și utilizatorilor VBA fără a avea securitatea să încetinească inutil lucrurile. După cum puteți vedea, există o mulțime de modalități prin care puteți personaliza securitatea și parcurgerea tuturor acestora este cu mult peste obiectul acestui articol. Din fericire, site-ul Microsoft are o documentare extinsă pe această temă. Și, de asemenea, este norocos că setările implicite de securitate sunt bune pentru majoritatea cerințelor.

Deoarece VBA este legat de aplicația Office gazdă, trebuie să o rulați acolo. Acest subiect este tratat începând de la pagina următoare.

Cum execut o aplicație VBA

Aceasta este de fapt o întrebare foarte bună, deoarece este prima pe care o vor pune utilizatorii aplicației tale. Există practic două moduri:

-> Dacă decideți să nu utilizați un control, precum un buton, pentru a porni programul, atunci trebuie să utilizați comanda Macros de pe panglică (fila Dezvoltator, grupul de coduri). Selectați programul VBA și faceți clic pe Run. Dar acest lucru poate părea un pic prea mult pentru unii dintre utilizatorii dvs. De exemplu, este posibil să nu doriți ca fila Dezvoltator să fie chiar disponibilă pentru ei. În acest caz ...

-> Trebuie să adăugați ceva pe care utilizatorul poate face clic sau să tasteze pentru a porni aplicația. În acest articol, vom analiza controlul Button. Dar ar putea fi un clic pe o comandă rapidă, o pictogramă pe o bară de instrumente sau chiar actul de introducere a datelor. Acestea sunt numite evenimente și ceea ce vom scrie în acest articol și în articolele ulterioare este cod eveniment - cod de program care este rulat automat atunci când se întâmplă un anumit eveniment - cum ar fi clic pe un buton control -.

UserForms, Control Form și Control ActiveX

Dacă nu selectați doar o macrocomandă, cel mai obișnuit mod de a rula un program VBA este să faceți clic pe un buton. Acest buton poate fi fie a controlul formei sau un Control ActiveX. Într-o anumită măsură, alegerile dvs. depind de aplicația Office pe care o utilizați. Excel oferă opțiuni ușor diferite decât Word, de exemplu. Dar aceste tipuri fundamentale de controale sunt aceleași.

Deoarece oferă cea mai mare flexibilitate, să ne uităm la ce poți face cu Excel 2010. Un mesaj text simplu va fi introdus într-o celulă atunci când se fac clic pe mai multe butoane diferite doar pentru a face diferențele mai clare.

Pentru a începe, creați un nou registru de lucru Excel și selectați fila Dezvoltator. (Dacă aveți o altă aplicație Office, o variație a acestor instrucțiuni ar trebui să funcționeze.)

Faceți clic pe pictograma Inserare. Vom acționa mai întâi cu butonul Forms Controls.

Controalele de formă sunt tehnologia mai veche. În Excel, au fost introduse pentru prima dată în versiunea 5.0 în 1993. Vom lucra cu VF UserForms în continuare, dar nu pot fi utilizate controale de formulare cu acestea. De asemenea, nu sunt compatibile cu internetul. Comenzile de formular sunt plasate direct pe suprafața foii de lucru. Pe de altă parte, unele controale ActiveX - pe care le considerăm în continuare - nu pot fi utilizate direct pe foile de lucru.

Controalele de formulare sunt utilizate cu o tehnică de „clic și desen”. Faceți clic pe butonul de control al formularului. Indicatorul mouse-ului se va schimba într-un semn plus. Trageți controlul trăgând peste suprafață. Când eliberați butonul mouse-ului, apare o fereastră de dialog care solicită o comandă macro pentru a vă conecta cu butonul.

--------
Faceți clic aici pentru a afișa ilustrația
--------

Mai ales când creați un control pentru prima dată, nu veți avea o macrocomandă VBA în așteptare pentru a fi conectat cu butonul, așa că faceți clic pe Nou și Editorul VBA se va deschide cu numele propus deja completat în shell-ul unui eveniment subrutină.

--------
Faceți clic aici pentru a afișa ilustrația
--------

Pentru a completa această aplicație foarte simplă, trebuie doar să introduceți această declarație de cod VBA în Sub:

 Celule (2, 2) .Value = "Buton Formular Clicat" 

Un buton ActiveX este aproape exact același. O diferență este că VBA plasează acest cod în foaia de lucru, nu într-un modul separat. Iată codul complet al evenimentului.

 Private Sub CommandButton1_Click () Cells (4, 2) .Value = "Butonul ActiveX a dat clic" Sub final 

Pe lângă plasarea acestor controale direct pe foaia de lucru, puteți adăuga și un userform în locul proiectului și plasează controale pentru asta. UserForms - cam la fel ca formularele Windows - prezintă o mulțime de avantaje în a vă putea gestiona controalele mai mult ca o aplicație Visual Basic normală. Adăugați un UserForm la proiect în editorul Visual Basic. Utilizați meniul Vizualizare sau faceți clic dreapta pe Exploratorul de proiecte.

--------
Faceți clic aici pentru a afișa ilustrația
--------

Valoarea implicită pentru un UserForm este să nu afișează formularul. Așadar, pentru a-l face vizibil (și a face controalele de pe acesta la dispoziția utilizatorului), executați metoda Show a formularului. Am adăugat un alt buton de formular doar pentru asta.

 Sub Button2_Click () UserForm1.Show Sub End 

Veți observa că UserForm este modal în mod implicit. Aceasta înseamnă că atunci când formularul este activ, orice altceva din aplicație este inactiv. (Faceți clic pe celelalte butoane nu face nimic, de exemplu.) Puteți schimba acest lucru schimbând proprietatea ShowModal a UserForm în False. Dar asta ne adâncește în programare. Următoarele articole din această serie vor explica mai multe despre acest lucru.

Codul pentru UserForm este plasat în obiectul UserForm. Dacă selectați Vizualizare cod pentru toate obiectele din Exploratorul de proiecte, veți vedea că există trei subrutine de eveniment Click clic separate care sunt conținute în trei obiecte diferite. Dar toate sunt disponibile aceluiași carnet de muncă.

--------
Faceți clic aici pentru a afișa ilustrația
--------

Pe lângă forțarea unui eveniment, făcând clic pe un buton, VBA este de asemenea utilizat pentru a reacționa la evenimentele din obiectele din aplicația de găzduire. De exemplu, puteți detecta când se schimbă o foaie de calcul în Excel. Sau puteți detecta când un rând este adăugat la o bază de date în Access și scrieți un program pentru a gestiona acel eveniment.

Pe lângă butoanele de comandă familiare, căsuțele de text și alte componente pe care le vedeți în programe tot timpul, puteți adăuga componente care sunt de fapt parte din foaia de calcul Excel în documentul dvs. Word. Sau faceți invers. Acest lucru merge mult dincolo de „copiere și lipire”. De exemplu, puteți afișa o foaie de calcul Excel într-un document Word.

VBA vă permite să folosiți întreaga putere a unei aplicații Office în alta. De exemplu, Word are o capacitate de calcul relativ simplă încorporată. Dar Excel - bine - „excelează” la calcul. Presupunem că ați dorit să utilizați jurnalul natural al funcției Gamma (un calcul matematic relativ sofisticat) în documentul dvs. Word? Cu VBA, puteți trece valori la acea funcție în Excel și puteți obține răspunsul în documentul Word.

Și puteți utiliza mult mai mult decât aplicațiile Office! Dacă faceți clic pe pictograma „Mai multe controale”, puteți vedea o listă considerabilă de lucruri instalate pe computer. Nu toate acestea funcționează „în afara cutiei” și ar trebui să aveți documentația pentru fiecare dintre ele disponibile, dar vă oferă o idee despre cât de larg este suportul pentru VBA.

Dintre toate funcțiile din VBA, există una care este clar mai utilă decât oricare alta. Aflați ce este în pagina următoare.

Am salvat cele mai bune pentru ultimul rând! Iată o tehnică care se aplică la toate aplicațiile Office. Te vei descoperi că îl folosești foarte mult, așa că îl acoperim aici în Introducere.

Pe măsură ce începeți să codificați programe VBA mai sofisticate, una dintre primele probleme în care veți avea probleme este cum să aflați despre metodele și proprietățile obiectelor Office. Dacă scrieți un program VB.NET, de multe ori veți căuta exemple de cod și exemple pentru a rezolva această problemă. Dar, atunci când aveți în vedere toate aplicațiile de găzduire diferite și faptul că fiecare dintre ele are sute de obiecte noi, de obicei nu puteți găsi ceva care să se potrivească exact cu ceea ce trebuie să faceți.

Răspunsul este „Record Macro…”

Ideea de bază este să porniți „Record Macro”, parcurgeți pașii unui proces care este similar cu ceea ce doriți să realizeze programul dvs., apoi verificați codul și ideile programului rezultat VBA..

Mulți oameni fac greșeala de a crede că trebuie să poți înregistra exact programul de care ai nevoie. Dar nu este deloc necesar să fie exact. De obicei este suficient de bun pentru a înregistra un program VBA care este doar „aproape” de ceea ce doriți și apoi adăugați modificările codului pentru a-l face să facă treaba cu exactitate. Este atât de ușor și util încât uneori voi înregistra o duzină de programe cu ușoare diferențe doar pentru a vedea care sunt diferențele de cod în rezultat. Nu uitați să ștergeți toate experimentele când ați terminat să le priviți!

Ca exemplu, am făcut clic pe Record Macro în editorul Word Visual Basic și am tastat mai multe linii de text. Iată rezultatul. (Au fost adăugate continuările liniei pentru a le face mai scurte.)

 Sub Macro1 () "Macro1 Macro" Selection.TypeText Text: = _ "Acestea sunt momentele în care" Selection.TypeText Text: = _ "încearcă sufletele bărbaților. Textul" Selection.TypeText: = _ "summer summer" Selection.TypeText Text: = _ "și soarele patriot" Selection.TypeText Text: = _ "va reduce, în aceste momente, de la" Selection.TypeText Text: = _ "serviciul țării lor." Selection.MoveUp Unit: = wdLine, Count: = 1 Selection.HomeKey Unit: = wdLine Selection.MoveRight Unit: = wdCharacter, _ Count: = 5, Extend: = wdExtend Selection.Font.Bold = wdToggle End Sub 

Nimeni nu studiază VBA doar pentru sine. O folosiți întotdeauna împreună cu o aplicație Office specifică. Deci, pentru a continua învățarea, există articole aici care demonstrează utilizarea VBA atât cu Word cât și cu Excel:

-> Noțiuni introductive folosind VBA: Partenerul de lucru al cuvântului

-> Noțiuni introductive cu VBA: Partenerul de lucru Excel