En av de mest fremragende egenskapene til Visual Basic er at det er en fullstendig utviklingsmiljø. Uansett hva du vil gjøre, er det en 'smak' av Visual Basic som hjelper deg med å gjøre jobben! Du kan bruke Visual Basic for desktop og mobil og fjernutvikling (VB.NET), scripting (VBScript) og Office-utvikling (VBA !) Hvis du har prøvd VBA og vil vite mer om hvordan du bruker den, dette er opplæringen for deg. (Dette kurset er basert på versjonen av VBA som er funnet i Microsoft Office 2010.)
Hvis du søker på et kurs i Microsoft Visual Basic .NET, har du også funnet det rette stedet. Sjekk ut: Visual Basic .NET 2010 Express - En "Fra grunnen opp" -opplæringen
VBA som et generelt konsept vil bli dekket i denne artikkelen. Det er mer med VBA enn du kanskje tror! Du kan også finne artikler om Office VBA-søstrene:
Det er i utgangspunktet to måter å utvikle programmer som kan fungere med Office-applikasjoner: VBA og VSTO. I oktober 2003 introduserte Microsoft en forbedring til det profesjonelle programmeringsmiljøet Visual Studio .NET kalt Visual Studio Tools for Office - VSTO. Men selv om VSTO utnytter de betydelige fordelene med .NET i Office, er VBA fortsatt mer populært enn VSTO. VSTO krever bruk av Professional eller høyere versjon av Visual Studio - som sannsynligvis vil koste deg mer enn Office-applikasjonen du bruker - i tillegg til Office-applikasjonen. Men siden VBA er integrert med verts Office-applikasjonen, trenger du ikke noe annet.
VBA brukes først og fremst av Office-eksperter som ønsker å gjøre arbeidet raskere og enklere. Du ser sjelden store systemer skrevet i VBA. VSTO brukes derimot av profesjonelle programmerere i større organisasjoner for å lage tillegg som kan være ganske sofistikerte. Det er mer sannsynlig at en applikasjon fra en tredjepart, som et papirfirma for Word eller et regnskapsfirma for Excel, blir skrevet med VSTO.
I dokumentasjonen sin bemerker Microsoft at det i utgangspunktet er tre grunner til å bruke VBA:
-> Automasjon og repetisjon - Datamaskiner kan gjøre det samme om og om igjen mye bedre og raskere enn folk kan.
-> Utvidelser til brukerinteraksjon - Vil du foreslå nøyaktig hvordan noen skal formatere et dokument eller lagre en fil? Det kan VBA gjøre. Vil du validere hva noen legger inn? Det kan VBA også.
-> Samhandling mellom Office 2010-applikasjoner - En senere artikkel i denne serien heter Word og Excel Working Together. Men hvis dette er det du trenger, kan det være lurt å vurdere Kontorautomatisering, det vil si, skrive systemet ved å bruke VB.NET og deretter bruke funksjonene fra en Office-applikasjon som Word eller Excel etter behov.
Microsoft har uttalt at de vil fortsette å støtte VBA, og det er fremtredende i Offisielt Microsoft Office 2010 Utvikling veikart. Så du har så mye forsikring som Microsoft noensinne gir at investeringen din i VBA-utvikling ikke blir foreldet i løpet av den nærmeste fremtiden.
På den annen side er VBA det siste gjenværende Microsoft-produktet som er avhengig av VB6 "COM" -teknologi. Det er over tjue år nå! I menneskelige år ville det gjøre det eldre enn Lestat the Vampire. Du kan se det som "prøvd, testet og sann", eller du kan tenke på det som "gammelt, utslitt og foreldet". Jeg pleier å gå inn for den første beskrivelsen, men du bør være klar over fakta.
Den første tingen å forstå er forholdet mellom VBA og Office-applikasjoner som Word og Excel. Office-applikasjonen er en vert for VBA. Et VBA-program kan aldri kjøres av seg selv. VBA er utviklet i vertsmiljøet (bruker Utvikler fanen i Office-applikasjonsbåndet), og det må utføres som en del av et Word-dokument, en Excel-arbeidsbok, en Access-database eller en annen Office-vert.
Måten VBA faktisk brukes er annerledes også. I en applikasjon som Word brukes VBA først og fremst som en måte å få tilgang til objektene i vertsmiljøet, for eksempel tilgang til avsnittene i et dokument med Word-ordet. Dokument. Avsnitt objekt. Hvert vertsmiljø bidrar med unike objekter som ikke er tilgjengelige i de andre vertsmiljøene. (For eksempel er det ingen "arbeidsbok" i et Word-dokument. En arbeidsbok er unik for Excel.) Visual Basic-koden er hovedsakelig der for å gjøre det mulig å bruke objekter tilpasset for hver Office-vertsapplikasjon.
Fusjonen mellom VBA og vertsspesifikk kode kan sees i denne kodeprøven (hentet fra Microsoft Northwind-eksempeldatabase) der rent VBA-kode vises i rødt og Access-spesifikk kode vises i blå. Den røde koden vil være den samme i Excel eller Word, men den blå koden er unik for denne Access-applikasjonen.
VBA i seg selv er nesten den samme som den har vært i årevis. Måten den integreres med verts Office-applikasjonen og hjelpesystemet er blitt forbedret mer.
2010-versjonen av Office viser ikke Developer-fanen som standard. Utvikler-fanen tar deg med i den delen av applikasjonen der du kan lage VBA-programmer, så det første du trenger å gjøre er å endre det alternativet. Bare gå til Fil-fanen, Alternativer, Tilpass bånd og klikk på Utvikler-boksen i Hovedfanen.
Hjelpesystemet fungerer mye jevnere enn det har gjort i tidligere versjoner. Du kan få hjelp til VBA-spørsmålene dine enten frakoblet, fra et system som er installert med Office-applikasjonen din, eller online fra Microsoft over Internett. De to grensesnittene er designet for å se mye like ut:
Klikk her for å vise illustrasjonen
Hvis Internett-tilkoblingen din er rask, vil onlinehjelpen gi deg mer og bedre informasjon. Men den lokalt installerte versjonen vil sannsynligvis være raskere og i de fleste tilfeller er den like bra. Det kan være lurt å gjøre den lokale hjelpen til standardverdien og deretter bruke onlinehjelpen hvis den lokale versjonen ikke gir deg det du vil ha. Den raskeste måten å gå på nettet er å bare velge "All Word" (eller "All Excel" eller annen app) fra rullegardinlisten Søk i hjelpen. Dette vil umiddelbart gå online og utføre det samme søket, men det vil ikke tilbakestille standardvalget.
Klikk her for å vise illustrasjonen
På neste side kommer vi i gang med hvordan du faktisk lager et VBA-program.
Når VBA "vert" av et program som Word eller Excel, "lever" programmet i dokumentfilen som brukes av verten. I Word kan du for eksempel lagre 'Word-makroen' (det er ikke en 'makro', men vi vil ikke diskutere om terminologi akkurat nå) verken i et Word-dokument eller en Word-mal.
Anta at dette VBA-programmet er opprettet i Word (dette enkle programmet endrer bare skriften til fet skrift for en valgt linje) og lagres i et Word-dokument:
Sub AboutMacro () ' 'AboutMacro Macro. 'Makro spilte inn 9/9/9999 av Dan Mabbutt. ' Utvalg. HomeKey Unit: = wdStory. Utvalg. EndKey Unit: = wdLine, Extend: = wdExtend. Utvalg. Font. Fet = wdToggle. Utvalg. EndKey Unit: = wdStory. Slutt sub.
I tidligere versjoner av Office kunne du tydelig se VBA-koden som er lagret som en del av dokumentet fil i det lagrede Word-dokumentet ved å se det i Notisblokk der alt i Word-dokumentet kan sett. Denne illustrasjonen ble produsert med en tidligere versjon av Word fordi Microsoft endret dokumentformatet i den gjeldende versjonen og VBA-programkoden ikke vises tydelig som ren tekst lenger. Men rektoren er den samme. På samme måte, hvis du oppretter et Excel-regneark med en "Excel-makro", vil det bli lagret som en del av en .xlsm-fil.
Klikk her for å vise illustrasjonen
VBA og sikkerhet
Et av de mest effektive triksene for datavirus i fortiden var å sette inn ondsinnet VBA-kode i et Office-dokument. Når tidligere dokumenter ble åpnet, kunne viruset kjøres automatisk og skape ødeleggelser på maskinen din. Dette åpne sikkerhetshullet i Office begynte å påvirke Office-salget, og det fikk virkelig Microsofts oppmerksomhet. Med den nåværende Office-generasjonen i 2010, har Microsoft plugget hullet grundig. I tillegg til forbedringene som er nevnt her, har Microsoft forbedret Office-sikkerheten på måter du kanskje ikke engang legger merke til helt ned til maskinvarenivået. Hvis du nøler med å bruke VBA fordi du hørte at det ikke var trygt, kan du være trygg på at Microsoft har gått den ekstra kilometeren for å endre det nå.
Den viktigste endringen var å lage en spesiell dokumenttype bare for Office-dokumenter som inkluderer VBA-programmer. I Word, for eksempel, kan ikke MyWordDoc.docx inneholde et VBA-program fordi Word ikke tillater programmer i en fil som er lagret med en "docx" -filtypen. Filen må lagres som en "MyWordDoc.docm" for at VBA-programmering skal tillates som en del av filen. I Excel er filtypen ".xlsm".
For å gå sammen med denne forbedrede dokumenttypen, opprettet Microsoft et nytt sikkerhetsundersystem i Office kalt Trust Center. I hovedsak kan du tilpasse hvordan Office-applikasjonen din behandler dokumenter som inneholder VBA-kode i detalj. Du åpner tillitssenteret fra Utvikler-fanen i Office-applikasjonen din ved å klikke på makrosikkerhet i kodedelen i båndet.
Klikk her for å vise illustrasjonen
Noen av alternativene er designet for å "herde" Office-applikasjonene dine slik at ondsinnet kode ikke kjøres og andre er det designet for å gjøre det enklere for utviklere og brukere å bruke VBA uten å ha sikkerhet unødvendig tregere ting ned. Som du kan se, det er mange måter du kan tilpasse sikkerhet på, og å gå gjennom dem alle er langt utenfor omfanget av denne artikkelen. Heldigvis har Microsofts side omfattende dokumentasjon om dette emnet. Og det er også heldig at standard sikkerhetsinnstillingene er bra for de fleste krav.
Siden VBA er bundet til verts Office-applikasjonen, må du kjøre den dit. Dette emnet dekkes fra neste side.
Hvordan kjører jeg en VBA-applikasjon
Det er faktisk et veldig godt spørsmål fordi det er det første brukere av applikasjonen din vil stille. Det er i utgangspunktet to måter:
-> Hvis du bestemmer deg for å ikke bruke en kontroll, som en knapp, for å starte programmet, må du bruke makro-kommandoen på båndet (Utvikler-kategori, kodegruppe). Velg VBA-programmet og klikk Kjør. Men dette kan virke litt for mye for noen av brukerne dine. For eksempel vil du kanskje ikke at Utvikler-fanen engang skal være tilgjengelig for dem. I så fall ...
-> Du må legge til noe som brukeren kan klikke på eller skrive for å starte applikasjonen. I denne artikkelen vil vi se på knappkontrollen. Men det kan være å klikke på en snarvei, et ikon på en verktøylinje eller til og med å legge inn data. Disse kalles arrangementer og hva vi vil skrive i denne og senere artikler er hendelseskode - programkode som automatisk kjøres når en bestemt hendelse - som å klikke på en knappkontroll - skjer.
UserForms, skjemakontroller og ActiveX-kontroller
Hvis du ikke bare velger en makro, er den vanligste måten å kjøre et VBA-program på å klikke på en knapp. Den knappen kan enten være en skjema kontroll eller en ActiveX-kontroll. Til en viss grad avhenger valgene dine av Office-applikasjonen du bruker. Excel gir litt andre valg enn for eksempel Word. Men disse grunnleggende typene kontroller er de samme.
Fordi det gir mest fleksibilitet, la oss se på hva du kan gjøre med Excel 2010. En enkel tekstmelding blir satt inn i en celle når flere forskjellige knapper blir klikket bare for å gjøre forskjellene mer klare.
For å komme i gang, opprett en ny Excel-arbeidsbok og velg kategorien Utvikler. (Hvis du har en annen Office-applikasjon, bør en variant av disse instruksjonene fungere.)
Klikk på Sett inn-ikonet. Vi jobber først med skjemakontrollknappen.
Skjemakontroller er den eldre teknologien. I Excel ble de først introdusert i versjon 5.0 i 1993. Vi jobber videre med VBA UserForms, men skjemakontroller kan ikke brukes med dem. De er heller ikke kompatible med nettet. Skjemakontroller plasseres direkte på arbeidsarkets overflate. På den annen side kan noen ActiveX-kontroller - som vi vurderer neste - ikke brukes direkte på regneark.
Skjemakontroller brukes med en "klikk og tegning" -teknikk. Klikk på knappskjemakontrollen. Musepekeren endres til et pluss tegn. Tegn kontrollen ved å dra over overflaten. Når du slipper museknappen, dukker det opp en dialogrute der du ber om en makrokommando for å koble til med knappen.
Klikk her for å vise illustrasjonen
Spesielt når du oppretter en kontroll for første gang, vil du ikke ha en VBA-makro som venter på å bli koblet til -knappen, så klikk på Ny og VBA Editor åpnes med det foreslåtte navnet som allerede er fylt ut i skallet til en hendelse subrutine.
Klikk her for å vise illustrasjonen
For å fullføre denne veldig enkle applikasjonen, skriver du bare denne VBA-kodeuttalelsen i Sub:
Cells (2, 2) .Value = "Form-knappen klikket"
En ActiveX-knapp er nesten nøyaktig den samme. En forskjell er at VBA plasserer denne koden i arbeidsarket, ikke i en egen modul. Her er den komplette hendelseskoden.
Privat underkommandoButton1_Klikk () Cells (4, 2) .Value = "ActiveX-knapp klikket" Slutt sub.
I tillegg til å plassere disse kontrollene direkte på arbeidsarket, kan du også legge til en Userform til prosjektet og plasser kontroller på det i stedet. UserForms - omtrent det samme som Windows-skjemaer - har mange fordeler ved å kunne administrere kontrollene dine mer som et vanlig Visual Basic-program. Legg til en UserForm til prosjektet i Visual Basic-redigereren. Bruk Vis-menyen eller høyreklikk i Project Explorer.
Klikk her for å vise illustrasjonen
Standard for en UserForm er å ikke vis skjemaet. Så for å gjøre det synlig (og gjøre kontrollene på det tilgjengelig for brukeren), utfør Show-metoden for skjemaet. Jeg la til en annen formknapp bare for dette.
Underknapp2_Klikk () UserForm1.Show. Slutt sub.
Du vil merke at UserForm er det modal som standard. Det betyr at når skjemaet er aktivt, er alt annet i applikasjonen inaktiv. (Å klikke på de andre knappene gjør for eksempel ingenting.) Du kan endre dette ved å endre egenskapen ShowModal til UserForm til False. Men dette får oss dypere i programmering. De neste artiklene i denne serien vil forklare mer om dette.
Koden for UserForm er plassert i UserForm-objektet. Hvis du velger Vis kode for alle objektene i Project Explorer, vil du se at det er tre separate Click-hendelsesunderrutiner som er inneholdt i tre forskjellige objekter. Men de er alle tilgjengelige for den samme arbeidsboken.
Klikk her for å vise illustrasjonen
I tillegg til å tvinge en hendelse ved å klikke på en knapp, brukes VBA også til å reagere på hendelser i objektene i vertsapplikasjonen. For eksempel kan du oppdage når et regneark endres i Excel. Eller du kan oppdage når en rad legges til i en database i Access og skrive et program for å håndtere den hendelsen.
I tillegg til de kjente kommandoknappene, tekstbokser og andre komponenter som du ser i programmer hele tiden, kan du legge til komponenter som faktisk er en del av Excel-regnearket i Word-dokumentet ditt. Eller gjør det motsatte. Dette går langt utover "kopier og lim inn". For eksempel kan du vise et Excel-regneark i et Word-dokument.
VBA lar deg bruke hele kraften til ett Office-program i et annet. For eksempel har Word relativt enkel beregningsevne innebygd. Men Excel - vel - "utmerker" ved beregning. Anta at du ønsket å bruke den naturlige loggen til Gamma-funksjonen (en relativt sofistikert beregning av matematikk) i Word-dokumentet? Med VBA kan du sende verdier til den funksjonen i Excel og få svaret tilbake i Word-dokumentet.
Og du kan bruke mye mer enn Office-applikasjonene! Hvis du klikker på "Flere kontroller" -ikonet, kan du se en betydelig liste over ting som er installert på datamaskinen din. Ikke alle disse fungerer "ut av esken", og du bør ha dokumentasjonen for hver av dem tilgjengelig, men det gir deg en ide om hvor bred støtte er for VBA.
Av alle funksjonene i VBA er det en som er tydelig mer nyttig enn noen annen. Finn ut hva det er på neste side.
Jeg har spart det beste for sist! Her er en teknikk som gjelder overalt for alle Office-applikasjonene. Du vil finne at du bruker det mye, så vi dekker det her i introduksjonen.
Når du begynner å kode mer sofistikerte VBA-programmer, er et av de første problemene du vil støte på hvordan du finner ut om metoder og egenskaper til Office-objekter. Hvis du skriver et VB.NET-program, vil du ofte se etter kodeprøver og eksempler for å løse dette problemet. Men når du vurderer alle de forskjellige vertsapplikasjonene og det faktum at hver av dem har hundrevis av nye objekter, kan du vanligvis ikke finne noe som samsvarer nøyaktig med det du trenger å gjøre.
Svaret er "Record Macro ..."
Den grunnleggende ideen er å slå på "Record Macro", gå gjennom trinnene i en prosess som ligner på det du vil at programmet skal oppnå, og deretter sjekke det resulterende VBA-programmet for kode og ideer.
Mange gjør feilen ved å tro at du må kunne spille inn nøyaktig det programmet du trenger. Men det er overhodet ikke nødvendig å være så nøyaktig. Det er vanligvis godt nok å spille inn et VBA-program som bare er "nært" det du ønsker, og deretter legge til kodemodifiseringene for å gjøre det nøyaktig. Det er så enkelt og nyttig at jeg noen ganger vil spille inn et titalls programmer med små forskjeller bare for å se hva kodeforskjellene er i resultatet. Husk å slette alle eksperimentene når du er ferdig med å se på dem!
Som et eksempel klikket jeg på Record Macro i Word Visual Basic Editor og skrev flere tekstlinjer. Her er resultatet. (Linjefortsettelser er lagt til for å gjøre dem kortere.)
Submakro1 () ' 'Makro1 Makro. ' ' Utvalg. TypeTekst-tekst: = _. "Dette er tidene som" Utvalg. TypeTekst-tekst: = _. "prøv menns sjeler. " Utvalg. TypeTekst-tekst: = _. "sommersoldat" Utvalg. TypeTekst-tekst: = _. "og solskinnspatriot" Utvalg. TypeTekst-tekst: = _. "vil i disse tider krympe fra" Utvalg. TypeTekst-tekst: = _. "deres lands tjeneste." Utvalg. MoveUp Unit: = wdLine, Count: = 1. Utvalg. HomeKey Unit: = wdLine. Utvalg. MoveRight-enhet: = wdCharacter, _. Count: = 5, Extend: = wdExtend. Utvalg. Font. Fet = wdToggle. Slutt sub.
Ingen studerer VBA bare for seg selv. Du bruker den alltid sammen med en spesifikk Office-applikasjon. Så for å fortsette å lære, er det artikler her som demonstrerer VBA brukt med både Word og Excel:
-> Komme i gang ved hjelp av VBA: Word Working Partner
-> Komme i gang ved hjelp av VBA: Excel Working Partner