Przewodnik po korzystaniu z Visual Basic for Applications

Jedną z najwybitniejszych cech Visual Basic jest to, że jest to kompletny środowisko programistyczne. Cokolwiek chcesz zrobić, w Visual Basic jest „smak”, który pomoże ci wykonać zadanie! Możesz używać programu Visual Basic do tworzenia aplikacji mobilnych i zdalnych (VB.NET), skryptów (VBScript) i programowania pakietu Office (VBA !) Jeśli wypróbowałeś VBA i chcesz dowiedzieć się więcej o tym, jak go używać, to jest tutorial dla ciebie. (Ten kurs jest oparty na wersji VBA znalezionej w pakiecie Microsoft Office 2010.)

Jeśli szukasz kursu w Microsoft Visual Basic .NET, również znalazłeś właściwe miejsce. Sprawdź: Visual Basic .NET 2010 Express - samouczek „Od podstaw”

VBA jako ogólna koncepcja zostanie omówiona w tym artykule. VBA to coś więcej niż myślisz! Można również znaleźć artykuły o siostrach Office VBA:

Istnieją zasadniczo dwa sposoby tworzenia programów, które mogą współpracować z aplikacjami Office: VBA i VSTO. W październiku 2003 r. Microsoft wprowadził rozszerzenie do profesjonalnego środowiska programistycznego Visual Studio .NET o nazwie Visual Studio Tools for Office - VSTO. Ale mimo że VSTO wykorzystuje znaczne zalety platformy .NET w pakiecie Office, VBA pozostaje bardziej popularna niż VSTO. VSTO wymaga użycia profesjonalnej lub wyższej wersji Visual Studio - która prawdopodobnie będzie cię kosztować więcej niż aplikacja Office, z której korzystasz - oprócz aplikacji Office. Ale ponieważ VBA jest zintegrowany z aplikacją hosta Office, nie potrzebujesz nic więcej.

instagram viewer

VBA jest używany głównie przez ekspertów Office, którzy chcą, aby ich praca była szybsza i łatwiejsza. Rzadko widuje się duże systemy napisane w VBA. Z drugiej strony VSTO jest używany przez profesjonalnych programistów w większych organizacjach do tworzenia dodatków, które mogą być dość wyrafinowane. Aplikacja od strony trzeciej, takiej jak firma papiernicza dla programu Word lub firma księgowa dla programu Excel, jest bardziej prawdopodobne, że zostanie napisana za pomocą VSTO.

W swojej dokumentacji Microsoft zauważa, że ​​istnieją zasadniczo trzy powody, aby używać VBA:

-> Automatyzacja i powtarzanie - komputery mogą robić to samo w kółko znacznie lepiej i szybciej niż ludzie.

-> Rozszerzenia interakcji użytkownika - czy chcesz dokładnie zasugerować, jak ktoś powinien sformatować dokument lub zapisać plik? VBA może to zrobić. Czy chcesz zweryfikować to, co ktoś wchodzi? VBA też może to zrobić.

-> Interakcja między aplikacjami pakietu Office 2010 - późniejszy artykuł z tej serii nazywa się Word i Excel Working Together. Ale jeśli tego właśnie potrzebujesz, możesz rozważyć Automatyki biurowej, czyli pisanie systemu przy użyciu VB.NET, a następnie w razie potrzeby korzystanie z funkcji aplikacji Office, takich jak Word lub Excel.

Microsoft oświadczył, że nadal będzie obsługiwał VBA i jest on wyraźnie widoczny w Urzędnik Plan rozwoju Microsoft Office 2010. Masz więc taką samą pewność, jaką Microsoft zapewnia, że ​​Twoja inwestycja w rozwój VBA nie stanie się przestarzała w najbliższej przyszłości.

Z drugiej strony VBA jest ostatnim pozostałym produktem Microsoft, który zależy od technologii „COM” VB6. Ma już ponad dwadzieścia lat! W latach ludzkich uczyniłoby to go starszym od Wampira Lestata. Możesz postrzegać to jako „wypróbowane, przetestowane i prawdziwe” lub możesz uznać to za „starożytne, zużyte i przestarzałe”. Preferuję pierwszy opis, ale powinieneś być świadomy faktów.

Pierwszą rzeczą do zrozumienia jest związek między VBA a aplikacjami Office, takimi jak Word i Excel. Aplikacja Office to gospodarz dla VBA. Program VBA nigdy nie może być wykonany sam. VBA jest rozwijany w środowisku hosta (przy użyciu Deweloper kartę na wstążce aplikacji pakietu Office) i należy go wykonać jako część dokumentu programu Word, skoroszytu programu Excel, bazy danych Access lub innego hosta pakietu Office.

Sposób, w jaki VBA jest faktycznie używany, również jest inny. W aplikacji takiej jak Word VBA jest używany przede wszystkim jako sposób na dostęp do obiektów środowiska hosta, takich jak dostęp do akapitów w dokumencie za pomocą Worda Worda. Dokument. Obiekt akapitów. Każde środowisko hosta udostępnia unikalne obiekty, które nie są dostępne w innych środowiskach hosta. (Na przykład w dokumencie programu Word nie ma „skoroszytu”. Skoroszyt jest unikalny dla programu Excel.) Kod Visual Basic ma głównie na celu umożliwienie używania obiektów dostosowanych do każdej aplikacji hosta pakietu Office.

Połączenie między VBA a kodem specyficznym dla hosta można zobaczyć w tym przykładzie kodu (pobranym z Microsoft Przykładowa baza danych Northwind), w której kod VBA jest pokazany na czerwono, a kod dostępu - w niebieski. Czerwony kod byłby taki sam w programie Excel lub Word, ale niebieski kod jest unikalny dla tej aplikacji Access.

Sam VBA jest prawie taki sam jak od lat. Sposób, w jaki integruje się z aplikacją hosta Office i systemem Pomocy, został jeszcze bardziej ulepszony.

Wersja 2010 pakietu Office domyślnie nie wyświetla karty Deweloper. Karta Deweloper przenosi Cię do części aplikacji, w której możesz tworzyć programy VBA, więc pierwszą rzeczą, którą musisz zrobić, to zmienić tę opcję. Wystarczy przejść do zakładki Plik, Opcje, Dostosuj wstążkę i kliknąć pole Deweloper w zakładkach Główne.

System pomocy działa znacznie płynniej niż w poprzednich wersjach. Możesz uzyskać pomoc na pytania dotyczące VBA w trybie offline, z systemu zainstalowanego z aplikacją Office lub online przez Microsoft przez Internet. Dwa interfejsy zostały zaprojektowane tak, aby wyglądały podobnie:


Kliknij tutaj, aby wyświetlić ilustrację

Jeśli twoje połączenie internetowe jest szybkie, pomoc online zapewni więcej i lepsze informacje. Ale lokalnie zainstalowana wersja będzie prawdopodobnie szybsza, aw większości przypadków jest równie dobra. Możesz ustawić domyślną pomoc lokalną, a następnie skorzystać z pomocy online, jeśli wersja lokalna nie zapewnia tego, czego potrzebujesz. Najszybszym sposobem na przejście do trybu online jest po prostu wybranie „All Word” (lub „All Excel” lub innej aplikacji) z menu Wyszukaj w pomocy. Spowoduje to natychmiastowe przejście do trybu online i wykonanie tego samego wyszukiwania, ale nie spowoduje zresetowania domyślnego wyboru.


Kliknij tutaj, aby wyświetlić ilustrację

Na następnej stronie zaczynamy od tego, jak faktycznie utworzyć program VBA.

Gdy VBA jest „hostowane” przez aplikację taką jak Word lub Excel, program „żyje” w pliku dokumentu używanym przez hosta. Na przykład w programie Word możesz zapisać „makro programu Word” (to nie „makro”, ale nie będziemy się teraz spierać o terminologię) ani w dokumencie Word, ani w szablonie Word.

Załóżmy teraz, że ten program VBA został utworzony w programie Word (ten prosty program po prostu zmienia czcionkę na pogrubioną dla wybranej linii) i jest zapisany w dokumencie programu Word:

Sub AboutMacro () ' „O Makro Makro. „Makro zarejestrowane 9/9/9999 przez Dana Mabbutta. ' Wybór. HomeKey Unit: = wdStory. Wybór. EndKey Unit: = wdLine, Extend: = wdExtend. Wybór. Czcionka. Pogrubienie = wdToggle. Wybór. EndKey Unit: = wdStory. Napis końcowy.

We wcześniejszych wersjach pakietu Office kod VBA był wyraźnie widoczny jako część dokumentu plik w zapisanym dokumencie Word, wyświetlając go w Notatniku, gdzie wszystko w dokumencie Word może widziany. Ta ilustracja została utworzona przy użyciu poprzedniej wersji programu Word, ponieważ Microsoft zmienił format dokumentu w bieżącej wersji, a kod programu VBA nie wyświetla się już wyraźnie jako zwykły tekst. Ale zasada jest taka sama. Podobnie, jeśli utworzysz arkusz kalkulacyjny Excel z „Makrem Excel”, zostanie on zapisany jako część pliku .xlsm.


Kliknij tutaj, aby wyświetlić ilustrację

VBA i bezpieczeństwo

Jedną z najbardziej skutecznych sztuczek wirusów komputerowych w przeszłości było wstawienie złośliwego kodu VBA do dokumentu pakietu Office. W poprzednich wersjach pakietu Office, gdy dokument był otwarty, wirus mógł działać automatycznie i powodować spustoszenie na twoim komputerze. Ta luka w zabezpieczeniach w pakiecie Office zaczęła wpływać na sprzedaż pakietu Office i naprawdę przyciągnęła uwagę Microsoft. Wraz z obecną generacją pakietu Office 2010, Microsoft dokładnie zatkał dziurę. Oprócz wspomnianych tutaj ulepszeń Microsoft poprawił zabezpieczenia pakietu Office w sposób, którego możesz nie zauważyć aż do poziomu sprzętowego. Jeśli wahasz się przed użyciem VBA, ponieważ słyszałeś, że to nie było bezpieczne, upewnij się, że Microsoft zrobił wszystko, aby to zmienić.

Najważniejszą zmianą było utworzenie specjalnego typu dokumentu tylko dla dokumentów Office, które zawierają programy VBA. Na przykład w programie Word plik MyWordDoc.docx nie może zawierać programu VBA, ponieważ program Word nie zezwala na programy w pliku zapisanym z rozszerzeniem „docx”. Plik musi zostać zapisany jako „MyWordDoc.docm”, aby programowanie VBA było dozwolone jako część pliku. W programie Excel rozszerzenie pliku to „.xlsm”.

Aby dostosować się do tego ulepszonego typu dokumentu, Microsoft utworzył w pakiecie Office nowy podsystem zabezpieczeń o nazwie Centrum zaufania. Zasadniczo możesz dostosować sposób, w jaki aplikacja Office traktuje dokumenty zawierające kod VBA bardzo szczegółowo. Centrum zaufania można otworzyć z karty Deweloper w aplikacji pakietu Office, klikając opcję Zabezpieczenia makr w sekcji Kod wstążki.


Kliknij tutaj, aby wyświetlić ilustrację

Niektóre opcje mają na celu „utwardzenie” aplikacji pakietu Office, aby złośliwy kod nie działał, a inne tak zaprojektowany, aby ułatwić programistom i użytkownikom korzystanie z VBA bez niepotrzebnego spowalniania bezpieczeństwa na dół. Jak widać, istnieje wiele sposobów dostosowywania zabezpieczeń, a przejście przez wszystkie z nich wykracza daleko poza zakres tego artykułu. Na szczęście witryna Microsoft ma obszerną dokumentację na ten temat. Całe szczęście, że domyślne ustawienia zabezpieczeń są odpowiednie dla większości wymagań.

Ponieważ VBA jest powiązany z aplikacją Office hosta, musisz go tam uruchomić. Temat ten omówiono na następnej stronie.

Jak uruchomić aplikację VBA

To naprawdę bardzo dobre pytanie, ponieważ jest to pierwsze pytanie, które zadają użytkownicy Twojej aplikacji. Istnieją zasadniczo dwa sposoby:

-> Jeśli zdecydujesz się nie używać formantu, takiego jak przycisk, do uruchamiania programu, musisz użyć polecenia Makra na wstążce (karta Deweloper, grupa Kod). Wybierz program VBA i kliknij Uruchom. Ale niektórym użytkownikom może się to wydawać trochę za dużo. Na przykład możesz nie chcieć, aby karta Deweloper była dla nich dostępna. W tym wypadku ...

-> Musisz dodać coś, co użytkownik może kliknąć lub wpisać, aby uruchomić aplikację. W tym artykule przyjrzymy się kontrolce przycisku. Ale może to być kliknięcie skrótu, ikony na pasku narzędzi lub nawet wprowadzanie danych. To się nazywa wydarzenia a tym, co napiszemy w tym i późniejszych artykułach jest kod zdarzenia - kod programu, który jest uruchamiany automatycznie, gdy nastąpi określone zdarzenie - na przykład kliknięcie kontrolki przycisku.

Formularze użytkownika, formanty i formanty ActiveX

Jeśli nie wybierasz tylko makra, najczęstszym sposobem uruchomienia programu VBA jest kliknięcie przycisku. Ten przycisk może być albo kontrola formy lub Kontrola ActiveX. Do pewnego stopnia twoje wybory zależą od używanej aplikacji Office. Na przykład Excel zapewnia nieco inne opcje niż Word. Ale te podstawowe rodzaje kontroli są takie same.

Ponieważ oferuje największą elastyczność, przyjrzyjmy się, co możesz zrobić z programem Excel 2010. Prosta wiadomość tekstowa zostanie wstawiona do komórki po kliknięciu kilku różnych przycisków, aby wyjaśnić różnice.

Aby rozpocząć, utwórz nowy skoroszyt programu Excel i wybierz kartę Deweloper. (Jeśli masz inną aplikację pakietu Office, powinna działać odmiana tych instrukcji).

Kliknij ikonę Wstaw. Najpierw będziemy pracować z przyciskiem Form Forms.

Formanty są starszą technologią. W programie Excel zostały wprowadzone po raz pierwszy w wersji 5.0 w 1993 roku. Następnie będziemy pracować z VBA UserForms, ale nie można z nimi korzystać z kontrolek formularzy. Nie są również kompatybilne z siecią. Formanty formularza są umieszczane bezpośrednio na powierzchni arkusza. Z drugiej strony, niektóre formanty ActiveX - które rozważymy dalej - nie mogą być używane bezpośrednio w arkuszach roboczych.

Kontrolki formularzy są używane w technice „kliknij i rysuj”. Kliknij kontrolkę Formularz przycisku. Wskaźnik myszy zmieni się w znak plus. Narysuj kontrolkę, przeciągając po powierzchni. Po zwolnieniu przycisku myszy pojawia się okno dialogowe z prośbą o polecenie makra, aby połączyć się z przyciskiem.


Kliknij tutaj, aby wyświetlić ilustrację

Zwłaszcza, gdy tworzysz kontrolkę po raz pierwszy, nie będziesz mieć makra VBA czekającego na połączenie z, więc kliknij Nowy, a otworzy się Edytor VBA z sugerowaną nazwą już wypełnioną w powłoce wydarzenia podprogram.


Kliknij tutaj, aby wyświetlić ilustrację

Aby ukończyć tę bardzo prostą aplikację, po prostu wpisz instrukcję VBA wewnątrz Sub:


Komórki (2, 2) .Value = „Kliknięto przycisk formularza”

Przycisk ActiveX jest prawie dokładnie taki sam. Jedną różnicą jest to, że VBA umieszcza ten kod w arkuszu, a nie w osobnym module. Oto pełny kod zdarzenia.

Private Sub CommandButton1_Click () Cells (4, 2) .Value = "Kliknięty przycisk ActiveX" Napis końcowy.

Oprócz umieszczania tych elementów sterujących bezpośrednio w arkuszu, możesz również dodać UserForm do projektu i zamiast tego umieść na nim elementy sterujące. UserForms - mniej więcej to samo, co formularze Windows - mają wiele zalet w zarządzaniu twoimi kontrolkami bardziej jak zwykłą aplikacją Visual Basic. Dodaj formularz użytkownika do projektu w edytorze Visual Basic. Użyj menu Widok lub kliknij prawym przyciskiem myszy w Eksploratorze projektów.


Kliknij tutaj, aby wyświetlić ilustrację

Domyślną wartością dla UserForm jest nie wyświetl formularz. Aby więc było widoczne (i udostępnić użytkownikowi elementy sterujące), wykonaj metodę Show formularza. Właśnie w tym celu dodałem inny przycisk formularza.

Sub Button2_Click () UserForm1.Show. Napis końcowy.

Zauważysz, że UserForm jest modalny domyślnie. Oznacza to, że gdy formularz jest aktywny, wszystko inne w aplikacji jest nieaktywne. (Na przykład kliknięcie innych przycisków nic nie robi.) Możesz to zmienić, zmieniając właściwość ShowModal UserForm na False. Ale to prowadzi nas głębiej do programowania. Następne artykuły z tej serii wyjaśnią więcej na ten temat.

Kod dla UserForm jest umieszczany w obiekcie UserForm. Jeśli wybierzesz Wyświetl kod dla wszystkich obiektów w Eksploratorze projektów, zobaczysz, że istnieją trzy oddzielne podprogramy zdarzeń Click, które są zawarte w trzech różnych obiektach. Ale wszystkie są dostępne dla tego samego skoroszytu.


Kliknij tutaj, aby wyświetlić ilustrację

Oprócz wymuszania zdarzenia poprzez kliknięcie przycisku, VBA służy również do reagowania na zdarzenia w obiektach w aplikacji hostingowej. Na przykład można wykryć zmiany arkusza kalkulacyjnego w programie Excel. Możesz też wykryć, kiedy wiersz jest dodawany do bazy danych w programie Access i napisać program do obsługi tego zdarzenia.

Oprócz znanych przycisków poleceń, pól tekstowych i innych składników, które cały czas widzisz w programach, możesz dodawać składniki, które faktycznie są częścią arkusza kalkulacyjnego Excel w twój dokument Word. Lub wykonaj odwrotnie. To wykracza daleko poza „kopiuj i wklej”. Na przykład możesz wyświetlić arkusz kalkulacyjny Excel w dokumencie Word.

VBA pozwala na wykorzystanie całej mocy jednej aplikacji Office w innej. Na przykład Word ma wbudowaną stosunkowo prostą zdolność obliczeniową. Ale Excel - cóż - „przoduje” w obliczeniach. Załóżmy, że chciałeś użyć naturalnego dziennika funkcji Gamma (stosunkowo wyrafinowane obliczenia matematyczne) w swoim dokumencie Word? Za pomocą VBA możesz przekazać wartości do tej funkcji w Excelu i uzyskać odpowiedź z powrotem w dokumencie Word.

I możesz używać znacznie więcej niż aplikacji Office! Kliknięcie ikony „Więcej elementów sterujących” spowoduje wyświetlenie znacznej listy rzeczy zainstalowanych na komputerze. Nie wszystkie z nich działają „od razu po wyjęciu z pudełka” i powinieneś mieć dostępną dokumentację dla każdego z nich, ale daje to wyobrażenie o tym, jak szerokie jest wsparcie dla VBA.

Ze wszystkich funkcji VBA jest jedna, która jest zdecydowanie bardziej przydatna niż jakakolwiek inna. Dowiedz się, co to jest na następnej stronie.

Najlepsze zostawiłem na koniec! Oto technika, która ma zastosowanie we wszystkich aplikacjach pakietu Office. Często go używasz, dlatego omawiamy go tutaj we wstępie.

Gdy zaczynasz kodować bardziej zaawansowane programy VBA, jednym z pierwszych problemów, na jakie napotkasz, jest sposób uzyskania informacji na temat metod i właściwości obiektów Office. Jeśli piszesz program VB.NET, często szukasz przykładów kodu i przykładów, aby rozwiązać ten problem. Ale biorąc pod uwagę wszystkie różne aplikacje hostingowe i fakt, że każda z nich ma setki nowych obiektów, zwykle nie można znaleźć czegoś, co dokładnie pasuje do tego, co musisz zrobić.

Odpowiedź brzmi: „Record Macro ...”

Podstawową ideą jest włączenie „Record Macro”, przejście przez etapy procesu podobnego do tego, co chcesz osiągnąć w programie, a następnie sprawdzenie wynikowego programu VBA pod kątem kodu i pomysłów.

Wiele osób popełnia błąd, myśląc, że musisz być w stanie dokładnie nagrać program, którego potrzebujesz. Ale wcale nie musi być tak dokładne. Zazwyczaj wystarczy nagrać program VBA, który jest po prostu „zbliżony” do tego, czego chcesz, a następnie dodać modyfikacje kodu, aby dokładnie wykonać to zadanie. Jest to tak łatwe i użyteczne, że czasami nagrywam kilkanaście programów z niewielkimi różnicami, aby zobaczyć, jakie są różnice w kodzie. Pamiętaj, aby usunąć wszystkie eksperymenty, gdy skończysz na nie patrzeć!

Jako przykład kliknąłem Record Macro w edytorze Word Visual Basic i wpisałem kilka wierszy tekstu. Oto wynik. (Dodano przedłużenia linii, aby je skrócić).

Sub Macro1 () ' „Macro1 Macro. ' ' Wybór. Tekst tekstowy: = _. „To są czasy, w których” Wybór. Tekst tekstowy: = _. „spróbuj ludzkich dusz. „ Wybór. Tekst tekstowy: = _. „letni żołnierz” Wybór. Tekst tekstowy: = _. „i słoneczny patriota” Wybór. Tekst tekstowy: = _. „w tych czasach uciekną od” Wybór. Tekst tekstowy: = _. „służba ich kraju”. Wybór. MoveUp Unit: = wdLine, Count: = 1. Wybór. HomeKey Unit: = wdLine. Wybór. MoveRight Unit: = wdCharacter, _. Count: = 5, Extend: = wdExtend. Wybór. Czcionka. Pogrubienie = wdToggle. Napis końcowy.

Nikt nie studiuje VBA tylko dla siebie. Zawsze używasz go wraz z określoną aplikacją pakietu Office. Więc, aby kontynuować naukę, są tutaj artykuły, które demonstrują VBA używany zarówno z Wordem, jak i Excelem:

-> Rozpoczęcie pracy z VBA: Word Working Partner

-> Rozpoczęcie pracy z VBA: Partner roboczy programu Excel