Differenza tra Visual Basic 6.0 e VBA


208

Qual è la differenza tra i due. Ho sempre pensato che VBA fosse in qualche modo una versione "paralizzata" di VB, ma quando un amico mi ha chiesto l'altro giorno non avevo idea di quali fossero le effettive differenze.

Inoltre, quando usi, ad esempio, Excel, è VB o VBA?

Risposte:


175

Per quasi tutti gli scopi di programmazione, VBA e VB 6.0 sono la stessa cosa.

VBA non può compilare il programma in un file binario eseguibile. Avrai sempre bisogno dell'host (un file Word e MS Word, ad esempio) per contenere ed eseguire il tuo progetto. Non sarai inoltre in grado di creare DLL COM con VBA.

A parte questo, c'è una differenza nell'IDE: l'IDE VB 6.0 è più potente in confronto. D'altra parte, hai una stretta integrazione dell'applicazione host in VBA. Gli oggetti globali dell'applicazione (come "ActiveDocument") e gli eventi sono disponibili senza dichiarazione, quindi la programmazione specifica dell'applicazione è semplice.

Tuttavia, nulla ti impedisce di avviare Word, caricare l'IDE VBA e risolvere un problema che non ha alcuna relazione con Word. Non sono sicuro se ci sia qualcosa che VB 6.0 può fare (tecnicamente) e VBA non può. Sto cercando un foglio di confronto su MSDN però.


7
Sembra che non ci sia una pagina di confronto concisa nelle pagine di microsoft.com, o le hanno nascoste bene. Basti pensare che il codice VB 6.0 viene eseguito inalterato in VBA, a meno che non si facciano riferimenti a oggetti COM che non vengono forniti con VBA, ovviamente.
Tomalak,

7
VBA e Vb6 utilizzano lo stesso file dll, motivo per cui il codice viene eseguito in entrambi. Tuttavia, c'è qualcosa come un oggetto Printer in VB6 che non è in VBA e non so perché. Altrimenti, credo che non ci siano differenze nelle lingue di base.
Dick Kusleika,

46
Ecco perché penso che valga la pena aggiungere che l'apertura di un documento di Office comporta quasi lo stesso rischio dell'apertura di un eseguibile.
Oorang,

13
VB ha anche gli oggetti Appunti, Schermo e App, oltre alla raccolta Stampanti. I pacchetti di moduli sono completamente diversi, in quanto è necessario fare tutto il possibile per evitare controlli con finestre in VB, ma in VBA è molto più difficile usare chiamate API orientate a hWnd perché la maggior parte dei controlli sono senza finestre. E, parlando di controlli, puoi crearne uno tuo in VB e usarli in VBA e altrove. Molte altre pecche - vedi il Browser degli oggetti (premi F2 nell'IDE).
Karl E. Peterson,

3
Si noti che questo è obsoleto. VBA è stato aggiornato a VBA 7, con supporto per tipi di dati a 64 bit (LongLong, LongPtr) e altre modifiche. VB è bloccato alla versione 6, quindi non supporta queste nuove funzionalità. Questa risposta discute ulteriori cambiamenti. In breve, ora ci sono cose che VB non può fare, ma VBA può farlo.
Erik A

47

VBA è l'acronimo di Visual Basic, Applications Edition, così come il piccolo fratello di scripting "per applicazioni" di VB. VBA è infatti disponibile in Excel, ma anche nelle altre applicazioni per ufficio.

Con VB, è possibile creare un'applicazione Windows autonoma, cosa impossibile con VBA.

È tuttavia possibile per gli sviluppatori "incorporare" VBA nelle proprie applicazioni, come linguaggio di scripting per automatizzare tali applicazioni.

Modifica : dalle domande frequenti su VBA :

D. Che cos'è Visual Basic, Applications Edition?

R. Microsoft Visual Basic, Applications Edition (VBA) è un ambiente di programmazione incorporabile progettato per consentire agli sviluppatori di creare soluzioni personalizzate sfruttando tutta la potenza di Microsoft Visual Basic. Gli sviluppatori che utilizzano applicazioni che ospitano VBA possono automatizzare ed estendere la funzionalità dell'applicazione, abbreviando il ciclo di sviluppo di soluzioni aziendali personalizzate.

Si noti che VB.NET è anche un'altra lingua, che condivide solo la sintassi con VB.


9
In realtà, Microsoft si riferisce a VB.Net come "Visual Basic". Vedere msdn.microsoft.com/en-us/vbasic/default.aspx .
DOK,

19
Sì. Questo è un dato di fatto che mi fa venir voglia di togliermi i capelli ogni volta che cerco un aiuto specifico per VB o VBA tramite Google. Stupida decisione di marketing.
Tomalak,

8
@Tomalak: Ecco perché l'ho appena notato ;-)
dal

2
@DOK: Sì, certo, ma ciò non cambia il fatto che VB.NET sia un'altra lingua rispetto al visual basic che "noi sviluppatori" conosciamo come VB6 o precedente.
fretje,

4
@j_random_hacker In questo caso, sembra quasi che MS tratti VB.Net una variante di VB, almeno basata sulla pagina vb di Visual Studio - che non sarebbe accurata. Stranamente, questo articolo wiki fornisce più informazioni sulla sua faccia rispetto alla pagina di MS Visual Studio :) en.wikipedia.org/wiki/Visual_Basic_.NET . Tuttavia, una domanda del forum MSDN sembra almeno toccare le differenze: social.msdn.microsoft.com/Forums/en-US/Vsexpressvb/thread/…
JackOrangeLantern

41

Ecco una risposta più tecnica e approfondita a una vecchia domanda: Visual Basic, Applications Edition (VBA) e Visual Basic (pre.NET) non sono solo lingue simili, sono la stessa lingua. In particolare:

  • Hanno le stesse specifiche : la descrizione indipendente dall'implementazione di ciò che la lingua contiene e cosa significa. Puoi leggerlo qui: [MS-VBAL]: Specifica lingua VBA
  • Hanno la stessa piattaforma : entrambi compilano in Microsoft P-Code , che a sua volta viene eseguito dalla stessa macchina virtuale, implementata nella dll msvbvm [x.0] .dll.

In un vecchio libro di consultazione su VB che mi sono imbattuto l'anno scorso, l'autore (Paul Lomax) ha persino affermato che "VBA" è sempre stato il nome della lingua stessa, sia utilizzata in applicazioni stand-alone che in contesti embedded (come MS Office ):

"Prima di andare oltre, chiariamo solo il punto fondamentale. Visual Basic, Applications Edition (VBA) è il linguaggio utilizzato per programmare in Visual Basic (VB). VB stesso è un ambiente di sviluppo; l'elemento del linguaggio di tale ambiente è VBA. "

Le differenze minori

Hosted vs. stand-alone : in termini pratici, quando la maggior parte delle persone dice "VBA" intendono specificamente "VBA quando utilizzato in MS Office" e dicono "VB6" per indicare "VBA utilizzato nell'ultima versione del VBA autonomo compilatore (ovvero Visual Studio 6) ". L'IDE e il compilatore in bundle con MS Office è quasi identico a Visual Studio 6, con la limitazione che non consente la compilazione di file dll o exe autonomi. Questo a sua volta significa che le classi definite nei progetti VBA incorporati non sono accessibili dai consumatori COM non incorporati, poiché non possono essere registrate.

Sviluppo continuo : Microsoft ha smesso di produrre un compilatore VBA autonomo con Visual Studio 6, passando al runtime .NET come piattaforma preferita. Tuttavia, il team di MS Office continua a mantenere VBA e ha persino rilasciato una nuova versione (VBA7) con una nuova macchina virtuale (ora denominata VBA7.dll) a partire da MS Office 2010. L'unica differenza principale è che VBA7 ha sia un 32- e versione a 64 bit e presenta alcuni miglioramenti per gestire le differenze tra i due, in particolare per quanto riguarda le invocazioni API esterne.


2
Ricordo la stessa citazione nel libro di Lomax, ma dato tutte le altre dichiarazioni contrarie su questo forum, su Wikipedia, ecc., Mi chiedo chi abbia ragione e perché ci sia disaccordo! Lomax ha anche scritto (p. 3), "VBA è la stessa lingua sia che lo si usi per creare un'applicazione VB o per automatizzare alcune attività in Word o Excel." Inoltre, "VBA è un linguaggio ospitato e fa parte della famiglia di strumenti di sviluppo VB".
EJ Mak

1
Se si sceglie la guida in VB6, si passa al riferimento di lingua VBA. VB6, come Word, ospita la lingua VBA. Poiché gli oggetti applicazione sono oggetti globali (standard di automazione). VB6 fornisce un oggetto App adatto a programmi autonomi. Word fornisce un oggetto App per le macro di Word. Si noti che la lingua è identica, qualsiasi riferimento alle cose mancanti deve ospitare oggetti forniti come l'oggetto stampante VB6 - non fa parte della lingua ma dell'host.
ACatInLove

15

Vuoi confrontare VBA con VB-Classic (VB6 ..) o VB.NET?

VBA (Visual Basic, Applications Edition) è un linguaggio di script basato su vb-classic incorporato nelle applicazioni di Microsoft Office. Penso che le funzionalità del linguaggio siano simili a quelle del VB5 (mancano solo alcune funzioni integrate), ma:

Hai accesso al documento dell'ufficio per cui hai scritto lo script VBA e quindi puoi ad es

  • Scrivi macro (= routine automatizzate per piccole attività ricorrenti in ufficio)
  • Definire nuove funzioni per la formula excel-cell
  • Elaborazione dei dati dell'ufficio

Esempio: imposta il valore di una cella excel

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

VBC e -.NET non sono linguaggi di script. Li usi per scrivere applicazioni standalone con IDE separati che non puoi fare con VBA (gli script VBA "esistono" in Office)

VBA non ha nulla a che fare con VB.NET (hanno solo una sintassi simile).


11

In realtà VBA può essere utilizzato per compilare DLL. Le edizioni per sviluppatori di Office 2000 e Office XP includevano un editor VBA che poteva essere utilizzato per creare DLL da utilizzare come componenti aggiuntivi COM.

Questa funzionalità è stata rimossa nelle versioni successive (2003 e 2007) con l'avvento del software VSTO (VS Tools for Office), anche se ovviamente è ancora possibile creare componenti aggiuntivi COM in modo simile senza l'uso di VSTO (o VS.Net) da utilizzando VB6 IDE.


10
Questa funzionalità non è stata rimossa. Microsoft non ha appena aggiornato "Office XP Developer" per supportare le versioni successive. Puoi ancora installare lo sviluppatore e funziona senza problemi. Semplicemente non supportato da Microsoft. Questo perché VBA fornito con 2003/2007 è sempre la stessa versione VBA di XP / 2002.
AMissico,

6

È VBA. VBA significa Visual Basic , Applications Edition ed è utilizzato per le macro nei documenti di Office. Non ha accesso alle funzionalità di VB.NET, quindi è più simile a una versione modificata di VB6, con componenti aggiuntivi per poter lavorare sul documento (come il foglio di lavoro in VBA per Excel).


7
No, VBA non è una versione modificata di VB5 / 6, piuttosto è un sottoinsieme. Dai un'occhiata all'Object Browser nell'IDE VB5 / 6 e vedrai lì l'intera libreria di oggetti VBA da usare e abusare. Detto questo, VBA (in genere, anche se non necessariamente) ha librerie di oggetti aggiuntive che si caricano per impostazione predefinita e forniscono oggetti globali per impostazione predefinita, che si riferiscono all'ambiente host du jour.
Karl E. Peterson,

5

VB non è una lingua . VB è un programma che ospita VBA, proprio come Office ospita VBA. VB è un insieme di oggetti App, proprio come Word ed Excel, e un pacchetto di moduli, proprio come in Office.

Quindi puoi solo scrivere il codice VBA in VB.

PS, questa informazione si trova nella scheda INFO della pagina delle domande VB per VB.

Da VBA Info

VBA 6, è stato spedito nel 1998 e include una miriade di host con licenza, tra cui: Office 2000-2010, AutoCAD, PI Processbook e il Visual Basic 6.0 autonomo


3
Questa risposta è chiaramente sbagliata. VBA non è VB6, sono entità distinte che condividono molte funzionalità. Quella breve citazione non dimostra nulla. Dire che non è una lingua perché funziona su un host condanna anche lingue come JavaScript a non lingue, il che è semplicemente falso. Inoltre, i programmi VB6 possono essere compilati in programmi autonomi, il che li rende non richiedono alcun host (tranne Windows, cioè).
Erik A

@ErikA No, hai capito male quello che stanno dicendo. VB come in VB6 è l'applicazione host che esegue VBA, proprio come fanno le applicazioni di Office. VB6 sembra essere un'applicazione che ti consente di rilasciare file binari per creare autonomi. Ci sono altre risposte sopra che spiegano i dettagli.
typedef Miles_Williams MILO

4

VBA sta per Visual Basic, Applications Edition ed è un'implementazione di Visual Basic destinata ad essere utilizzata nella suite Office.

La differenza tra loro è che VBA è incorporato nei documenti di Office (è una funzionalità di Office). VB è l'ide / linguaggio per lo sviluppo di applicazioni.


1

VB (Visual Basic solo fino alla 6.0) è un superset di VBA (Visual Basic, Applications Edition). So che altri si sono in qualche modo sfuggiti a questo, ma la mia comprensione è che la semantica (cioè il vocabolario) di VBA è inclusa in VB6 (ad eccezione di oggetti specifici dei prodotti Office), quindi VBA è un sottoinsieme di VB6. La sintassi (cioè l'ordine in cui sono scritte le parole) è esattamente la stessa in VBA come sarebbe in VB6, ma la differenza è che gli oggetti disponibili per VBA o VB6 sono diversi perché hanno scopi diversi. In particolare lo scopo di VBA è di automatizzare programmaticamente attività che possono essere eseguite in MS Office, mentre lo scopo di VB6 è quello di creare EXE standard, controlli ActiveX, DLL ActiveX e EXE ActiveX che possono funzionare autonomamente o in altri programmi come MS Office o Windows.


VB6 ospita la lingua VBA. È identico VB6, come host, fornisce alcuni oggetti come fa Word durante il suo hosting.
ACatInLove
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.