Różnica między Visual Basic 6.0 i VBA

208

Jaka jest różnica między nimi. Zawsze myślałem, że VBA jest nieco „kaleką” wersją VB, ale kiedy przyjaciel zapytał mnie innego dnia, nie miałem pojęcia, jakie są rzeczywiste różnice.

Ponadto, gdy używasz na przykład Excela, czy to VB czy VBA?

Thomas Geritzma
źródło

Odpowiedzi:

175

Dla prawie wszystkich celów programowania VBA i VB 6.0 są tym samym.

VBA nie może skompilować twojego programu do wykonywalnego pliku binarnego. Zawsze będziesz potrzebować hosta (na przykład pliku Word i MS Word), aby zatrzymać i wykonać swój projekt. Nie będziesz także mógł tworzyć bibliotek DLL COM z VBA.

Poza tym istnieje różnica w IDE - IDE VB 6.0 jest silniejsze w porównaniu. Z drugiej strony masz ścisłą integrację aplikacji hosta z VBA. Obiekty globalne dla aplikacji (takie jak „ActiveDocument”) i zdarzenia są dostępne bez deklaracji, więc programowanie specyficzne dla aplikacji jest proste.

Mimo to nic nie powstrzymuje cię przed uruchomieniem programu Word, załadowaniem VBA IDE i rozwiązaniem problemu, który nie ma żadnego związku z programem Word. Nie jestem pewien, czy jest coś, co VB 6.0 może zrobić (technicznie), a VBA nie. Szukam jednak arkusza porównawczego na MSDN.

Tomalak
źródło
7
Wydaje się, że nie ma zwięzłej strony porównawczej na stronach microsoft.com lub dobrze je ukryli. Wystarczy powiedzieć, że kod VB 6.0 działa w VBA w niezmienionej formie, chyba że oczywiście odwołujesz się do obiektów COM, które nie są dostarczane z VBA.
Tomalak
7
VBA i Vb6 używają tego samego pliku dll, dlatego kod działa w jednym z nich. Jest jednak coś takiego jak obiekt drukarki w VB6, który nie jest w VBA i nie wiem, dlaczego tak jest. W przeciwnym razie uważam, że nie ma różnic w językach podstawowych.
Dick Kusleika
46
Dlatego uważam, że warto dodać, że otwarcie dokumentu Office niesie prawie takie samo ryzyko jak otwarcie pliku wykonywalnego.
Oorang,
13
VB ma również obiekty Schowka, ekranu i aplikacji, oprócz kolekcji Drukarki. Pakiety formularzy są zupełnie inne, ponieważ musisz starać się unikać okiennych kontrolek w VB, ale w VBA o wiele trudniej jest używać wywołań API zorientowanych na hWnd, ponieważ większość kontrolek jest bez okien. Mówiąc o kontrolkach, możesz tworzyć własne w VB i używać ich w VBA, a także gdzie indziej. Wiele innych czarnuchów - patrz Przeglądarka obiektów (naciśnij F2 w IDE).
Karl E. Peterson
3
Pamiętaj, że jest to nieaktualne. VBA został zaktualizowany do VBA 7, z obsługą 64-bitowych typów danych (LongLong, LongPtr) i innymi zmianami. VB utknął w wersji 6, więc nie obsługuje tych nowych funkcji. Ta odpowiedź omawia więcej zmian. Krótko mówiąc, są teraz rzeczy, których VB nie może zrobić, ale VBA może.
Erik A
47

VBA oznacza Visual Basic for Applications, podobnie jak mały brat VB zajmujący się skryptami „dla aplikacji”. VBA jest rzeczywiście dostępny w Excelu, ale także w innych aplikacjach biurowych.

Za pomocą VB można utworzyć samodzielną aplikację systemu Windows, co nie jest możliwe w przypadku VBA.

Programiści mogą jednak „osadzić” VBA we własnych aplikacjach, jako języku skryptowym do automatyzacji tych aplikacji.

Edycja : z FAQ VBA :

P: Co to jest Visual Basic for Applications?

A. Microsoft Visual Basic for Applications (VBA) to środowisko programistyczne do osadzania zaprojektowane, aby umożliwić programistom tworzenie niestandardowych rozwiązań przy użyciu pełnej mocy Microsoft Visual Basic. Programiści używający aplikacji udostępniających VBA mogą zautomatyzować i rozszerzyć funkcjonalność aplikacji, skracając cykl tworzenia niestandardowych rozwiązań biznesowych.

Zauważ, że VB.NET jest nawet innym językiem, który dzieli składnię tylko z VB.

fretje
źródło
9
W rzeczywistości Microsoft nazywa VB.Net „Visual Basic”. Zobacz msdn.microsoft.com/en-us/vbasic/default.aspx .
DOK
19
Tak. To sprawia, że ​​chcę wyciągać włosy za każdym razem, gdy szukam pomocy VB lub VBA za pośrednictwem Google. Głupia decyzja marketingowa.
Tomalak
8
@Tomalak: Dlatego właśnie Podane że ;-)
fretje
2
@DOK: Tak, ale to nie zmienia faktu, że VB.NET jest innym językiem niż Visual Basic, który „my programiści” znamy jako VB6 lub wcześniejszy.
fretje
4
@j_random_hacker W tym przypadku wydaje się, że MS traktuje VB.Net wariant VB, przynajmniej oparty na stronie vb studia wizualnego - co nie byłoby dokładne. Co dziwne, ten artykuł wiki zawiera więcej informacji na temat jego twarzy niż strona MS Visual Studio :) en.wikipedia.org/wiki/Visual_Basic_.NET . Jednak pytanie na forum MSDN ma na celu przynajmniej dotknięcie różnic: social.msdn.microsoft.com/Forums/en-US/Vsexpressvb/thread/…
JackOrangeLantern
41

Oto bardziej techniczna i dokładna odpowiedź na stare pytanie: Visual Basic for Applications (VBA) i Visual Basic (pre-.NET) to nie tylko podobne języki, to ten sam język. Konkretnie:

  • Mają tę samą specyfikację : niezależny od implementacji opis tego, co zawiera język i co on oznacza. Możesz go przeczytać tutaj: [MS-VBAL]: Specyfikacja języka VBA
  • Mają tę samą platformę : oba kompilują się do kodu Microsoft P , który z kolei jest wykonywany przez dokładnie tę samą maszynę wirtualną, która jest zaimplementowana w dll msvbvm [x.0] .dll.

W starej książce VB, którą natknąłem się w zeszłym roku, autor (Paul Lomax) nawet twierdził, że „VBA” zawsze była nazwą samego języka, niezależnie od tego, czy jest używany w samodzielnych aplikacjach, czy w kontekstach osadzonych (takich jak MS Office ):

„Zanim przejdziemy dalej, wyjaśnijmy tylko podstawową kwestię. Visual Basic for Applications (VBA) to język używany do programowania w Visual Basic (VB). Samo VB jest środowiskiem programistycznym; elementem językowym tego środowiska jest VBA. „

Drobne różnice

Hostowany vs. samodzielny : w praktyce, gdy większość ludzi mówi „VBA”, to znaczy „VBA, gdy jest używany w MS Office”, a „VB6” oznacza „VBA używany w ostatniej wersji autonomicznego VBA” kompilator (tj. Visual Studio 6) ”. IDE i kompilator w pakiecie z MS Office są prawie identyczne jak Visual Studio 6, z tym ograniczeniem, że nie pozwala kompilacji na samodzielne pliki dll lub exe. To z kolei oznacza, że ​​klasy zdefiniowane we wbudowanych projektach VBA nie są dostępne dla niewbudowanych konsumentów COM, ponieważ nie można ich zarejestrować.

Dalszy rozwój : Microsoft przestał produkować samodzielny kompilator VBA z Visual Studio 6, ponieważ przeszedł na środowisko uruchomieniowe .NET jako platformę z wyboru. Jednak zespół MS Office nadal utrzymuje VBA, a nawet wydał nową wersję (VBA7) z nową maszyną wirtualną (teraz o nazwie VBA7.dll), zaczynając od MS Office 2010. Jedyna główna różnica polega na tym, że VBA7 ma 32- oraz wersja 64-bitowa i ma kilka ulepszeń do obsługi różnic między nimi, szczególnie w odniesieniu do zewnętrznych wywołań API.

Joshua Honig
źródło
2
Pamiętam ten sam cytat w książce Lomaxa, ale biorąc pod uwagę wszystkie inne stwierdzenia przeciwne na tym forum, w Wikipedii itp., Zastanawiam się, kto ma rację i dlaczego nie ma zgody! Lomax napisał również (s. 3): „VBA jest tym samym językiem, niezależnie od tego, czy używasz go do tworzenia aplikacji VB, czy do automatyzacji niektórych zadań w programie Word lub Excel”. Ponadto „VBA to język hostowany i część rodziny narzędzi programistycznych VB”.
EJ Mak,
1
Jeśli wybierzesz pomoc w VB6, przejdziesz do dokumentacji języka VBA. VB6, podobnie jak Word, obsługuje język VBA. Ponieważ obiekty aplikacji są obiektami globalnymi (standard automatyzacji). VB6 zapewnia obiekt aplikacji odpowiedni dla samodzielnych programów. Program Word zapewnia obiekt aplikacji dla makr programu Word. Zauważ, że język jest identyczny, wszelkie odniesienia do rzeczy, których brakuje, dotyczą hostowania dostarczonych obiektów, takich jak obiekt drukarki VB6 - nie jest to część języka, ale host.
ACatInLove,
15

Czy chcesz porównać VBA z VB-Classic (VB6 ..) czy VB.NET?

VBA (Visual Basic for Applications) jest klasycznym językiem skryptowym opartym na vb wbudowanym w aplikacje Microsoft Office. Myślę, że jego funkcje językowe są podobne do VB5 (brakuje mu tylko kilku wbudowanych funkcji), ale:

Masz dostęp do dokumentu biurowego, dla którego napisałeś skrypt VBA, dzięki czemu możesz np

  • Napisz makra (= automatyczne procedury dla małych powtarzających się zadań w pracy biurowej)
  • Zdefiniuj nowe funkcje dla formuły excel-cell-formula
  • Przetwarzaj dane biurowe

Przykład: Ustaw wartość komórki programu Excel

ActiveSheet.Cells("A1").Value = "Foo"

VBC i -.NET nie są językami skryptowymi. Używasz ich do pisania samodzielnych aplikacji z oddzielnymi IDE, których nie możesz zrobić z VBA (skrypty VBA po prostu „istnieją” w pakiecie Office)

VBA nie ma nic wspólnego z VB.NET (po prostu mają podobną składnię).

Dario
źródło
11

W rzeczywistości VBA można wykorzystać do kompilacji bibliotek DLL. Edycje dla deweloperów pakietu Office 2000 i Office XP zawierały edytor VBA, którego można używać do tworzenia bibliotek DLL do wykorzystania jako dodatki COM.

Ta funkcja została usunięta w późniejszych wersjach (2003 i 2007) wraz z pojawieniem się oprogramowania VSTO (VS Tools for Office), chociaż oczywiście nadal można tworzyć dodatki COM w podobny sposób bez użycia VSTO (lub VS.Net) przez za pomocą VB6 IDE.

Pomiń R.
źródło
10
Ta funkcja nie została usunięta. Microsoft po prostu nie zaktualizował programu „Office XP Developer” do obsługi późniejszych wersji. Nadal możesz zainstalować programistę i działa bez problemów. Po prostu nie jest obsługiwany przez Microsoft. Jest tak, ponieważ VBA dostarczany z 2003/2007 jest wciąż tą samą wersją VBA co XP / 2002.
AMissico,
6

To jest VBA. VBA oznacza Visual Basic for Applications i jest używany do makr w dokumentach Office. Nie ma dostępu do funkcji VB.NET, więc przypomina bardziej zmodyfikowaną wersję VB6 z dodatkami umożliwiającymi pracę z dokumentem (np. Arkusz roboczy w VBA dla programu Excel).

instancja mnie
źródło
7
Nie, VBA nie jest zmodyfikowaną wersją VB5 / 6 - jest raczej podzbiorem. Spójrz na Przeglądarkę obiektów w IDE VB5 / 6, a zobaczysz pełną bibliotekę obiektów VBA do użycia i nadużyć. To powiedziawszy, VBA ma (zazwyczaj, choć niekoniecznie), dodatkowe biblioteki obiektów, które domyślnie ładują się i domyślnie udostępniają obiekty globalne, które odnoszą się do środowiska hosta du Jour.
Karl E. Peterson
5

VB nie jest językiem . VB to program obsługujący VBA, podobnie jak VBA pakietu Office. VB to zestaw obiektów aplikacji, podobnie jak Word i Excel, oraz pakiet formularzy, podobnie jak w pakiecie Office.

Możesz więc pisać tylko kod VBA w VB.

PS ta informacja znajduje się w zakładce INFO na stronie pytań VB dla VB.

Z informacji VBA

VBA 6 został wydany w 1998 roku i zawiera niezliczoną liczbę licencjonowanych hostów, w tym: Office 2000 - 2010, AutoCAD, PI Processbook oraz samodzielny Visual Basic 6.0

Spokój
źródło
3
Ta odpowiedź jest błędna. VBA nie jest VB6, są to odrębne byty, które mają wiele cech. Ten krótki cytat niczego nie dowodzi. Mówienie, że to nie jest język, ponieważ działa na hoście, potępia również języki takie jak JavaScript na języki inne niż języki, co jest po prostu nieprawdą. Ponadto programy VB6 można kompilować w samodzielne programy, co sprawia, że ​​nie wymagają one żadnego hosta (poza Windows).
Erik A
@ErikA Nie, źle zrozumiałeś, co mówią. VB, podobnie jak w VB6, jest aplikacją hosta, która uruchamia VBA, podobnie jak aplikacje pakietu Office. VB6 jest po prostu aplikacją, która pozwala zwolnić pliki binarne, aby utworzyć samodzielne wersje. Powyżej znajdują się inne odpowiedzi wyjaśniające szczegóły.
typedef Miles_Williams MILO
4

VBA oznacza Visual Basic For Applications i jego implementację Visual Basic przeznaczoną do użycia w pakiecie Office.

Różnica między nimi polega na tym, że VBA jest osadzony w dokumentach pakietu Office (jest to funkcja pakietu Office). VB to ide / język do tworzenia aplikacji.

Zwycięzca
źródło
1

VB (Visual Basic tylko do 6.0) jest nadzbiorem VBA (Visual Basic for Applications). Wiem, że inni wymknęli się temu, ale rozumiem, że semantyka (tj. Słownictwo) VBA jest zawarta w VB6 (z wyjątkiem obiektów specyficznych dla produktów Office), dlatego VBA jest podzbiorem VB6. Składnia (tj. Kolejność zapisywania słów) jest dokładnie taka sama w VBA, jak w VB6, ale różnica polega na tym, że obiekty dostępne dla VBA lub VB6 są różne, ponieważ mają różne cele. W szczególności celem VBA jest programowa automatyzacja zadań, które można wykonać w MS Office, podczas gdy celem VB6 jest tworzenie standardowych plików EXE, formantów ActiveX, bibliotek DLL ActiveX i plików DLL ActiveX, które mogą działać samodzielnie lub w innych programach, takich jak MS Office lub Windows.

użytkownik65795
źródło
VB6 obsługuje język VBA. To jest identyczne VB6, jako host, zapewnia pewne obiekty tak jak Word podczas hostowania.
ACatInLove,