Perbedaan antara Visual Basic 6.0 dan VBA

208

Apa perbedaan keduanya. Saya selalu berpikir VBA agak 'cacat' versi VB, tetapi ketika seorang teman bertanya kepada saya beberapa hari yang lalu saya tidak tahu apa perbedaan yang sebenarnya.

Juga, ketika Anda menggunakan, misalnya, Excel, apakah itu VB atau VBA?

Thomas Geritzma
sumber

Jawaban:

175

Untuk hampir semua tujuan pemrograman, VBA dan VB 6.0 adalah hal yang sama.

VBA tidak dapat mengkompilasi program Anda menjadi biner yang dapat dieksekusi. Anda akan selalu memerlukan host (file Word dan MS Word, misalnya) untuk memuat dan menjalankan proyek Anda. Anda juga tidak dapat membuat COM DLL dengan VBA.

Selain itu, ada perbedaan dalam IDE - VB 6.0 IDE lebih kuat dibandingkan. Di sisi lain, Anda memiliki integrasi aplikasi host yang ketat di VBA. Objek global aplikasi (seperti "ActiveDocument") dan acara tersedia tanpa deklarasi, sehingga pemrograman khusus aplikasi mudah.

Namun, tidak ada yang menghalangi Anda untuk menjalankan Word, memuat VBA IDE dan menyelesaikan masalah yang tidak ada hubungannya dengan Word sama sekali. Saya tidak yakin apakah ada sesuatu yang dapat dilakukan VB 6.0 (secara teknis), dan VBA tidak bisa. Saya mencari lembar perbandingan di MSDN.

Tomalak
sumber
7
Tampaknya tidak ada halaman perbandingan ringkas di halaman microsoft.com, atau mereka menyembunyikannya dengan baik. Cukuplah untuk mengatakan bahwa kode VB 6.0 berjalan tanpa diubah dalam VBA, kecuali jika Anda membuat referensi ke objek COM yang tidak dikirimkan bersama VBA, tentu saja.
Tomalak
7
VBA dan Vb6 menggunakan file dll yang sama, itulah sebabnya kode berjalan di keduanya. Namun, ada sesuatu seperti objek Printer di VB6 yang tidak ada di VBA dan saya tidak tahu mengapa itu terjadi. Kalau tidak, saya percaya tidak ada perbedaan dalam bahasa dasar.
Dick Kusleika
46
Itulah mengapa saya pikir perlu menambahkan bahwa membuka Dokumen Office membawa risiko yang hampir sama dengan membuka sebuah executable.
Oorang
13
VB juga memiliki objek Clipboard, Layar, dan Aplikasi, selain koleksi Printers. Paket formulir sangat berbeda, karena Anda harus keluar dari cara untuk menghindari kontrol berjendela di VB, tetapi dalam VBA jauh lebih sulit untuk menggunakan panggilan API berorientasi hWnd karena sebagian besar kontrol tidak berjendela. Dan, berbicara tentang kontrol, Anda dapat membuat sendiri di VB dan menggunakannya di VBA serta di tempat lain. Banyak niggles lain - lihat Object Browser (tekan F2 di IDE).
Karl E. Peterson
3
Perhatikan bahwa ini sudah usang. VBA telah diperbarui ke VBA 7, dengan dukungan untuk tipe data 64-bit (LongLong, LongPtr) dan lebih banyak perubahan. VB macet di versi 6, sehingga tidak mendukung fitur-fitur baru ini. Jawaban ini membahas lebih banyak perubahan. Singkatnya, sekarang ada hal-hal yang VB tidak bisa lakukan, tetapi VBA bisa.
Erik A
47

VBA adalah singkatan dari Visual Basic for Applications dan begitu juga saudara laki-laki scripting kecil "untuk aplikasi" VB. VBA memang tersedia di Excel, tetapi juga di aplikasi kantor lainnya.

Dengan VB, seseorang dapat membuat aplikasi windows yang berdiri sendiri, yang tidak mungkin dilakukan dengan VBA.

Namun dimungkinkan bagi pengembang untuk "menanamkan" VBA dalam aplikasi mereka sendiri, sebagai bahasa scripting untuk mengotomatiskan aplikasi tersebut.

Edit : Dari FAQ VBA :

P. Apa itu Visual Basic untuk Aplikasi?

A. Microsoft Visual Basic for Applications (VBA) adalah lingkungan pemrograman embeddable yang dirancang untuk memungkinkan pengembang untuk membangun solusi kustom menggunakan kekuatan penuh dari Microsoft Visual Basic. Pengembang yang menggunakan aplikasi yang meng-host VBA dapat mengotomatisasi dan memperluas fungsionalitas aplikasi, memperpendek siklus pengembangan solusi bisnis khusus.

Perhatikan bahwa VB.NET bahkan bahasa lain, yang hanya berbagi sintaksis dengan VB.

fretje
sumber
9
Sebenarnya, Microsoft menyebut VB.Net sebagai "Visual Basic". Lihat msdn.microsoft.com/en-us/vbasic/default.aspx .
DOK
19
Iya. Itu fakta yang membuat saya ingin mencabut rambut saya setiap kali saya mencari bantuan khusus VB atau VBA via Google. Keputusan pemasaran yang bodoh.
Tomalak
8
@ Tomalak: Itu sebabnya saya hanya mencatat itu ;-)
fretje
2
@DOK: Ya memang, tapi itu tidak mengubah fakta bahwa VB.NET adalah bahasa lain selain visual basic yang "kita pengembang" kenal sebagai VB6 atau sebelumnya.
fretje
4
@j_random_hacker Dalam kasus ini, hampir terasa seperti MS memperlakukan VB.Net varian VB, setidaknya berdasarkan pada halaman studio vb visual - yang tidak akan akurat. Anehnya, artikel wiki ini memberikan informasi lebih banyak pada wajahnya daripada halaman MS visual studio :) en.wikipedia.org/wiki/Visual_Basic_.NET . Namun, pertanyaan forum MSDN terlihat setidaknya menyentuh perbedaan: social.msdn.microsoft.com/Forums/en-US/Vsexpressvb/thread/…
JackOrangeLantern
41

Berikut jawaban yang lebih teknis dan menyeluruh untuk pertanyaan lama: Visual Basic for Applications (VBA) dan Visual Basic (pre-.NET) bukan hanya bahasa yang serupa, mereka adalah bahasa yang sama . Secara khusus:

  • Mereka memiliki spesifikasi yang sama : Deskripsi implementasi-independen dari apa bahasa mengandung dan apa artinya. Anda dapat membacanya di sini: [MS-VBAL]: Spesifikasi Bahasa VBA
  • Mereka memiliki platform yang sama : Keduanya mengkompilasi ke Microsoft P-Code , yang pada gilirannya dieksekusi oleh mesin virtual yang sama persis, yang diimplementasikan dalam dll msvbvm [x.0] .dll.

Dalam buku referensi VB lama yang saya temui tahun lalu, penulis (Paul Lomax) bahkan menegaskan bahwa 'VBA' selalu menjadi nama bahasa itu sendiri, apakah digunakan dalam aplikasi yang berdiri sendiri atau dalam konteks tertanam (seperti MS Office ):

"Sebelum kita melangkah lebih jauh, mari kita perjelas poin mendasar. Visual Basic for Applications (VBA) adalah bahasa yang digunakan untuk memprogram dalam Visual Basic (VB). VB sendiri adalah lingkungan pengembangan; elemen bahasa dari lingkungan itu adalah VBA. "

Perbedaan kecil

Hosted vs. stand-alone : Secara praktis, istilah, ketika kebanyakan orang mengatakan "VBA", mereka secara spesifik berarti "VBA ketika digunakan di MS Office", dan mereka mengatakan "VB6" berarti "VBA yang digunakan dalam versi terakhir VBA mandiri. kompiler (yaitu Visual Studio 6) ". IDE dan kompiler yang dibundel dengan MS Office hampir identik dengan Visual Studio 6, dengan batasan yang tidak memungkinkan kompilasi untuk berdiri sendiri dll atau file exe. Ini pada gilirannya berarti bahwa kelas yang ditentukan dalam proyek VBA tertanam tidak dapat diakses dari konsumen COM yang tidak tertanam, karena mereka tidak dapat didaftarkan.

Pengembangan yang berkelanjutan : Microsoft berhenti memproduksi kompiler VBA yang berdiri sendiri dengan Visual Studio 6, ketika mereka beralih ke .NET runtime sebagai platform pilihan. Namun, tim MS Office terus mempertahankan VBA, dan bahkan merilis versi baru (VBA7) dengan VM baru (sekarang baru disebut VBA7.dll) dimulai dengan MS Office 2010. Satu-satunya perbedaan utama adalah bahwa VBA7 memiliki keduanya 32- dan versi 64-bit dan memiliki beberapa peningkatan untuk menangani perbedaan antara keduanya, khususnya yang berkaitan dengan permintaan API eksternal.

Joshua Honig
sumber
2
Saya ingat kutipan yang sama di buku Lomax, tetapi memberikan semua pernyataan lain yang bertentangan di forum ini, di Wikipedia, dll., Itu membuat saya bertanya-tanya siapa yang benar, dan mengapa ada ketidaksepakatan! Lomax juga menulis (hal. 3), "VBA adalah bahasa yang sama apakah Anda menggunakannya untuk membuat aplikasi VB atau untuk mengotomatisasi beberapa tugas di Word atau Excel." Juga, "VBA adalah bahasa yang di-host dan bagian dari keluarga alat pengembangan VB."
EJ Mak
1
Jika Anda memilih bantuan dalam VB6 Anda pergi ke referensi bahasa VBA. VB6, seperti Word, meng-host bahasa VBA. Sebagai objek Aplikasi adalah objek global (standar Otomasi). VB6 menyediakan objek Aplikasi yang cocok untuk program mandiri. Word menyediakan objek Aplikasi untuk makro Word. Perhatikan bahasanya identik, referensi apa pun yang hilang adalah untuk meng-host objek yang disediakan seperti objek printer VB6 - itu bukan bagian dari bahasa tetapi dari host.
ACatInLove
15

Apakah Anda ingin membandingkan VBA dengan VB-Classic (VB6 ..) atau VB.NET?

VBA (Visual Basic for Applications) adalah bahasa skrip berbasis vb-klasik yang tertanam dalam aplikasi Microsoft Office. Saya pikir fitur bahasanya mirip dengan VB5 (hanya kekurangan beberapa fungsi bawaan), tetapi:

Anda memiliki akses ke dokumen kantor tempat Anda menulis skrip VBA dan sehingga Anda dapat mis

  • Tulis makro (= rutinitas otomatis untuk sedikit tugas berulang dalam pekerjaan kantor Anda)
  • Tentukan fungsi baru untuk excel-cell-formula
  • Memproses data kantor

Contoh: Tetapkan nilai sel excel

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

VBC dan -.NET bukan bahasa skrip. Anda menggunakannya untuk menulis aplikasi mandiri dengan IDE terpisah yang tidak dapat Anda lakukan dengan VBA (VBA-script hanya "ada" di Office)

VBA tidak ada hubungannya dengan VB.NET (mereka hanya memiliki sintaks yang sama).

Dario
sumber
11

Sebenarnya VBA dapat digunakan untuk mengkompilasi DLL. Edisi Office 2000 dan Office XP Developer termasuk editor VBA yang dapat digunakan untuk membuat DLL untuk digunakan sebagai COM Addins.

Fungsionalitas ini telah dihapus di versi yang lebih baru (2003 dan 2007) dengan munculnya perangkat lunak VSTO (VS Tools for Office), meskipun jelas Anda masih bisa membuat addins COM dengan cara yang sama tanpa menggunakan VSTO (atau VS.Net) oleh menggunakan VB6 IDE.

Lewati R
sumber
10
Fungsi ini tidak dihapus. Microsoft hanya tidak memperbarui "Pengembang Office XP" untuk mendukung versi yang lebih baru. Anda masih dapat menginstal pengembang dan berfungsi tanpa masalah. Hanya saja tidak didukung oleh Microsoft. Ini karena VBA yang dikirimkan dengan 2003/2007 masih versi VBA yang sama dengan XP / 2002.
AMissico
6

Itu VBA. VBA berarti Visual Basic for Applications , dan digunakan untuk makro pada dokumen Office. Itu tidak memiliki akses ke fitur VB.NET, jadi itu lebih seperti versi VB6 yang dimodifikasi, dengan add-on untuk dapat bekerja pada dokumen (seperti Lembar Kerja di VBA untuk Excel).

contoh dari saya
sumber
7
Tidak, VBA bukan versi modifikasi dari VB5 / 6 - melainkan, itu adalah subset. Lihatlah Browser Objek di VB5 / 6 IDE, dan Anda akan melihat perpustakaan objek VBA lengkap di sana untuk menggunakan dan menyalahgunakan. Yang mengatakan, VBA memang (biasanya, meskipun belum tentu) memiliki perpustakaan objek tambahan yang memuat secara default, dan menyediakan objek global secara default, yang berhubungan dengan lingkungan host du jour.
Karl E. Peterson
5

VB bukan bahasa . VB adalah program yang menyelenggarakan VBA, sama seperti Office meng-host VBA. VB adalah seperangkat objek App, seperti yang dimiliki Word dan Excel, dan paket formulir, seperti di Office.

Jadi Anda hanya bisa menulis kode VBA dalam VB.

PS info ini pada INFO tab pada pertanyaan VB halaman untuk VB.

Dari Info VBA

VBA 6, dikirim pada tahun 1998 dan mencakup segudang host berlisensi, di antaranya: Office 2000 - 2010, AutoCAD, PI Processbook, dan Visual Basic 6.0 yang berdiri sendiri

Ketenangan
sumber
3
Jawaban ini jelas salah. VBA bukan VB6, mereka adalah entitas berbeda yang memiliki banyak fitur. Kutipan singkat itu tidak membuktikan apa-apa. Mengatakan itu bukan bahasa karena dijalankan pada host juga mengutuk bahasa seperti JavaScript ke non-bahasa, yang jelas tidak benar. Juga, program VB6 dapat dikompilasi menjadi program yang berdiri sendiri, yang membuatnya tidak memerlukan host (selain Windows, yaitu).
Erik A
@ErikA Tidak, Anda salah mengerti apa yang mereka katakan. VB seperti pada VB6 adalah Aplikasi Host yang menjalankan VBA, seperti halnya aplikasi Office. VB6 kebetulan merupakan aplikasi yang memungkinkan Anda untuk melepaskan binari untuk membuat stand-alone. Ada jawaban lain di atas yang menjelaskan detailnya.
ketikkan Miles_Williams MILO
4

VBA adalah singkatan dari Visual Basic For Applications dan implementasi Visual Basic yang dimaksudkan untuk digunakan di Office Suite.

Perbedaan di antara mereka adalah bahwa VBA tertanam di dalam dokumen Office (ini merupakan fitur Office). VB adalah ide / bahasa untuk mengembangkan aplikasi.

Pemenang
sumber
1

VB (Visual Basic hanya hingga 6.0) adalah superset dari VBA (Visual Basic for Applications). Saya tahu bahwa orang lain telah menghindari hal ini tetapi pemahaman saya adalah bahwa semantik (yaitu kosakata) VBA termasuk dalam VB6 (kecuali untuk objek khusus untuk produk Office), oleh karena itu, VBA adalah bagian dari VB6. Sintaksnya (yaitu urutan penulisan kata-kata) persis sama dalam VBA seperti pada VB6, tetapi perbedaannya adalah objek yang tersedia untuk VBA atau VB6 berbeda karena mereka memiliki tujuan yang berbeda. Secara khusus tujuan VBA adalah untuk mengotomatiskan tugas-tugas yang dapat dilakukan secara sistematis di MS Office, sedangkan tujuan VB6 adalah untuk membuat EXE standar, Kontrol ActiveX, DLL ActiveX, dan EXE ActiveX yang dapat berfungsi sendiri atau di program lain seperti MS Office atau Windows.

pengguna65795
sumber
VB6 menyelenggarakan bahasa VBA. Itu identik. VB6, sebagai tuan rumah, menyediakan objek tertentu seperti yang dilakukan Word saat hostingnya.
ACatInLove