Sự khác biệt giữa Visual Basic 6.0 và VBA


208

Sự khác biệt giữa hai là gì. Tôi luôn nghĩ VBA là phiên bản VB bị "tê liệt", nhưng khi một người bạn hỏi tôi vào một ngày khác, tôi không biết sự khác biệt thực sự là gì.

Ngoài ra, khi bạn sử dụng, ví dụ như Excel, đó là VB hay VBA?

Câu trả lời:


175

Đối với gần như tất cả các mục đích lập trình, VBA và VB 6.0 là như nhau.

VBA không thể biên dịch chương trình của bạn thành một nhị phân thực thi. Bạn sẽ luôn cần máy chủ lưu trữ (ví dụ: tệp Word và MS Word) để chứa và thực hiện dự án của bạn. Bạn cũng sẽ không thể tạo COM DLL với VBA.

Ngoài ra, có một sự khác biệt trong IDE - IDE VB 6.0 mạnh hơn so với IDE. Mặt khác, bạn đã tích hợp chặt chẽ ứng dụng máy chủ trong VBA. Các đối tượng toàn cầu ứng dụng (như "ActiveDocument") và các sự kiện có sẵn mà không cần khai báo, vì vậy lập trình dành riêng cho ứng dụng rất đơn giản.

Tuy nhiên, không có gì ngăn bạn kích hoạt Word, tải IDE VBA và giải quyết vấn đề không liên quan đến Word. Tôi không chắc chắn nếu có bất cứ điều gì mà VB 6.0 có thể làm (về mặt kỹ thuật) và VBA không thể. Tôi đang tìm kiếm một bảng so sánh trên MSDN mặc dù.


7
Dường như không có trang so sánh súc tích trên các trang microsoft.com, hoặc họ che giấu chúng tốt. Tất nhiên, phải nói rằng mã VB 6.0 chạy không thay đổi trong VBA, trừ khi bạn tạo tham chiếu đến các đối tượng COM không được gửi cùng với VBA, tất nhiên.
Tomalak

7
VBA và Vb6 sử dụng cùng một tệp dll, đó là lý do tại sao mã chạy trong một trong hai. Tuy nhiên, có một thứ giống như một đối tượng Máy in trong VB6 không có trong VBA và tôi không biết tại sao lại như vậy. Mặt khác, tôi tin rằng không có sự khác biệt trong các ngôn ngữ cơ bản.
Dick Kusleika

46
Đó là lý do tại sao tôi nghĩ rằng đáng để thêm rằng việc mở Tài liệu Office mang lại rủi ro gần như tương đương với việc mở tệp thực thi.
Oorang

13
VB cũng có các đối tượng Clipboard, Screen và App, ngoài bộ sưu tập Máy in. Các gói biểu mẫu hoàn toàn khác nhau, vì bạn phải tránh xa các điều khiển cửa sổ trong VB, nhưng trong VBA, việc sử dụng các lệnh gọi API định hướng hWnd khó hơn rất nhiều vì hầu hết các điều khiển đều không có cửa sổ. Và, nói về các điều khiển, bạn có thể tạo tác phẩm của riêng bạn trong VB và sử dụng chúng trong VBA cũng như các nơi khác. Rất nhiều trò đùa khác - xem Trình duyệt đối tượng (nhấn F2 trong IDE).
Karl E. Peterson

3
Lưu ý rằng điều này đã lỗi thời. VBA đã được cập nhật lên VBA 7, với sự hỗ trợ cho các loại dữ liệu 64 bit (LongLong, LongPtr) và nhiều thay đổi khác. VB bị kẹt ở phiên bản 6, vì vậy nó không hỗ trợ các tính năng mới này. Câu trả lời này thảo luận về nhiều thay đổi. Nói tóm lại, bây giờ có những thứ VB không thể làm được, nhưng VBA thì có thể.
Erik A

47

VBA là viết tắt của Visual Basic cho Ứng dụng và anh em kịch bản "cho ứng dụng" nhỏ của VB cũng vậy. VBA thực sự có sẵn trong Excel, nhưng cũng có trong các ứng dụng văn phòng khác.

Với VB, người ta có thể tạo một ứng dụng windows độc lập, điều này là không thể với VBA.

Tuy nhiên, các nhà phát triển có thể "nhúng" VBA vào các ứng dụng của họ, như một ngôn ngữ kịch bản để tự động hóa các ứng dụng đó.

Chỉnh sửa : Từ Câu hỏi thường gặp về VBA :

Q. Visual Basic cho các ứng dụng là gì?

A. Microsoft Visual Basic for Application (VBA) là một môi trường lập trình có thể nhúng được thiết kế để cho phép các nhà phát triển xây dựng các giải pháp tùy chỉnh bằng toàn bộ sức mạnh của Microsoft Visual Basic. Các nhà phát triển sử dụng các ứng dụng lưu trữ VBA có thể tự động hóa và mở rộng chức năng ứng dụng, rút ​​ngắn chu kỳ phát triển của các giải pháp kinh doanh tùy chỉnh.

Lưu ý rằng VB.NET thậm chí là một ngôn ngữ khác, chỉ chia sẻ cú pháp với VB.


9
Trên thực tế, Microsoft gọi VB.Net là "Visual Basic". Xem msdn.microsoft.com/en-us/vbasic/default.aspx .
DOK

19
Đúng. Đó là một thực tế khiến tôi muốn nhổ tóc mỗi khi tìm kiếm trợ giúp dành riêng cho VB hoặc VBA thông qua Google. Quyết định tiếp thị ngu ngốc.
Tomalak

8
@Tomalak: Đó là lý do tại sao tôi chỉ cần chú ý điều đó ;-)
fretje

2
@DOK: Có thực sự, nhưng điều đó không thay đổi thực tế rằng VB.NET là một ngôn ngữ khác ngoài cơ bản trực quan mà "chúng tôi phát triển" biết là VB6 hoặc trước đó.
Fretje

4
@j_random_hacker Trong trường hợp này, gần như cảm giác MS xử lý VB.Net một biến thể của VB, ít nhất là dựa trên trang vb của studio hình ảnh - điều này sẽ không chính xác. Thật kỳ lạ, bài viết wiki này cung cấp nhiều thông tin trên khuôn mặt của nó hơn trang studio trực quan MS :) en.wikipedia.org/wiki/Visual_Basic_.NET . Tuy nhiên, một câu hỏi trên diễn đàn MSDN có vẻ ít nhất chạm đến sự khác biệt: social.msdn.microsoft.com/Forums/en-US/Vse े vb / thread / Lỗi
JackOrangeLogio

41

Đây là một câu trả lời kỹ thuật và kỹ lưỡng hơn cho một câu hỏi cũ: Visual Basic for Application (VBA) và Visual Basic (pre-.NET) không chỉ là các ngôn ngữ tương tự, chúng là cùng một ngôn ngữ. Đặc biệt:

  • Chúng có cùng đặc điểm kỹ thuật : Mô tả độc lập thực hiện về những gì ngôn ngữ chứa và ý nghĩa của nó. Bạn có thể đọc nó ở đây: [MS-VBAL]: Đặc tả ngôn ngữ VBA
  • Chúng có cùng một nền tảng : Cả hai đều biên dịch thành Microsoft P-Code , lần lượt được thực thi bởi cùng một máy ảo, được triển khai trong dll msvbvm [x.0].

Trong một cuốn sách tham khảo VB cũ mà tôi đã bắt gặp năm ngoái, tác giả (Paul Lomax) thậm chí đã khẳng định rằng 'VBA' luôn là tên của ngôn ngữ, cho dù được sử dụng trong các ứng dụng độc lập hoặc trong bối cảnh nhúng (như MS Office ):

"Trước khi chúng ta tiến xa hơn, hãy làm rõ về điểm cơ bản. Visual Basic for Application (VBA) là ngôn ngữ được sử dụng để lập trình trong Visual Basic (VB). Bản thân VB là môi trường phát triển, yếu tố ngôn ngữ của môi trường đó là VBA. "

Những khác biệt nhỏ

Được lưu trữ so với độc lập : Trong thực tế, theo thuật ngữ, khi hầu hết mọi người nói "VBA", họ đặc biệt có nghĩa là "VBA khi được sử dụng trong MS Office" và họ nói "VB6" có nghĩa là "VBA được sử dụng trong phiên bản cuối cùng của VBA độc lập trình biên dịch (tức là Visual Studio 6) ". IDE và trình biên dịch đi kèm với MS Office gần giống với Visual Studio 6, với giới hạn là nó không cho phép biên dịch thành các tệp dll hoặc exe độc ​​lập. Đến lượt điều này có nghĩa là các lớp được xác định trong các dự án VBA nhúng không thể truy cập được từ người tiêu dùng COM không được nhúng, bởi vì chúng không thể được đăng ký.

Tiếp tục phát triển : Microsoft đã ngừng sản xuất trình biên dịch VBA độc lập với Visual Studio 6, khi họ chuyển sang thời gian chạy .NET làm nền tảng được lựa chọn. Tuy nhiên, nhóm MS Office tiếp tục duy trì VBA và thậm chí đã phát hành phiên bản mới (VBA7) với VM mới (bây giờ được gọi là VBA7.dll) bắt đầu với MS Office 2010. Sự khác biệt lớn duy nhất là VBA7 có cả 32- và phiên bản 64 bit và có một vài cải tiến để xử lý sự khác biệt giữa hai phiên bản, đặc biệt liên quan đến các yêu cầu API bên ngoài.


2
Tôi nhớ lại câu nói tương tự trong cuốn sách của Lomax, nhưng đưa ra tất cả các tuyên bố khác trái ngược trên diễn đàn này, trên Wikipedia, v.v., nó khiến tôi tự hỏi ai đúng, và tại sao có sự bất đồng! Lomax cũng đã viết (trang 3), "VBA là cùng ngôn ngữ cho dù bạn đang sử dụng nó để tạo ứng dụng VB hay để tự động hóa một số tác vụ trong Word hoặc Excel." Ngoài ra, "VBA là ngôn ngữ được lưu trữ và là một phần của họ công cụ phát triển VB."
EJ Mak

1
Nếu bạn chọn trợ giúp trong VB6, bạn hãy tham khảo ngôn ngữ VBA. VB6, giống như Word, lưu trữ ngôn ngữ VBA. Vì các đối tượng Ứng dụng là các đối tượng toàn cầu (Tiêu chuẩn tự động hóa). VB6 cung cấp một đối tượng Ứng dụng phù hợp cho các chương trình độc lập. Word cung cấp một đối tượng Ứng dụng cho các macro Word. Lưu ý ngôn ngữ là giống hệt nhau, mọi tham chiếu đến những thứ còn thiếu là lưu trữ các đối tượng được cung cấp như đối tượng máy in VB6 - nó không phải là một phần của ngôn ngữ mà là của máy chủ lưu trữ.
ACatInLove

15

Bạn có muốn so sánh VBA với VB-Classic (VB6 ..) hoặc VB.NET không?

VBA (Visual Basic for Application) là ngôn ngữ kịch bản dựa trên vb-classic được nhúng trong các ứng dụng Microsoft Office. Tôi nghĩ các tính năng ngôn ngữ của nó tương tự như VB5 (nó chỉ thiếu một số chức năng dựng sẵn), nhưng:

Bạn có quyền truy cập vào tài liệu văn phòng mà bạn đã viết tập lệnh VBA và vì vậy bạn có thể ví dụ

  • Viết macro (= thói quen tự động cho các nhiệm vụ định kỳ nhỏ trong văn phòng của bạn)
  • Xác định các hàm mới cho excel-cell-Formula
  • Xử lý dữ liệu văn phòng

Ví dụ: Đặt giá trị của một ô excel

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

VBC và -.NET không có ngôn ngữ script. Bạn sử dụng chúng để viết các ứng dụng độc lập với các IDE riêng biệt mà bạn không thể làm với VBA (tập lệnh VBA chỉ "tồn tại" trong Office)

VBA không liên quan gì đến VB.NET (họ chỉ có một cú pháp tương tự).


11

Trên thực tế VBA có thể được sử dụng để biên dịch DLL. Các phiên bản Office 2000 và Office XP Developer bao gồm trình soạn thảo VBA có thể được sử dụng để tạo DLL để sử dụng làm COM Addins.

Chức năng này đã bị loại bỏ trong các phiên bản sau (2003 và 2007) với sự ra đời của phần mềm VSTO (VS Tools for Office), mặc dù rõ ràng bạn vẫn có thể tạo các addins COM theo cách tương tự mà không cần sử dụng VSTO (hoặc VS.Net) sử dụng IDE VB6.


10
Chức năng này đã không được gỡ bỏ. Microsoft chỉ không cập nhật "Office XP Developer" để hỗ trợ các phiên bản mới hơn. Bạn vẫn có thể cài đặt nhà phát triển và nó hoạt động mà không gặp vấn đề gì. Nó chỉ không được Microsoft hỗ trợ. Điều này là do VBA xuất xưởng với 2003/2007 vẫn là phiên bản VBA tương tự như XP / 2002.
AMissico

6

Đó là VBA. VBA có nghĩa là Visual Basic cho Ứng dụng và nó được sử dụng cho các macro trên tài liệu Office. Nó không có quyền truy cập vào các tính năng VB.NET, vì vậy nó giống như một phiên bản sửa đổi của VB6, với các tiện ích bổ sung để có thể hoạt động trên tài liệu (như Worksheet trong VBA cho Excel).


7
Không, VBA không phải là phiên bản sửa đổi của VB5 / 6 - thay vào đó, nó là một tập hợp con. Hãy xem Trình duyệt đối tượng trong IDE VB5 / 6 và bạn sẽ thấy thư viện đối tượng VBA hoàn chỉnh ở đó để sử dụng và lạm dụng. Điều đó nói rằng, VBA (thông thường, mặc dù không nhất thiết) có các thư viện đối tượng bổ sung tải theo mặc định và cung cấp các đối tượng toàn cầu theo mặc định, liên quan đến môi trường máy chủ du jour.
Karl E. Peterson

5

VB không phải là một ngôn ngữ . VB là một chương trình lưu trữ VBA, giống như Office lưu trữ VBA. VB là một tập hợp các đối tượng Ứng dụng, giống như Word và Excel và gói biểu mẫu, giống như trong Office.

Vì vậy, bạn chỉ có thể viết mã VBA trong VB.

PS thông tin này nằm trên tab INFO trên trang câu hỏi VB cho VB.

Từ thông tin VBA

VBA 6, đã được xuất xưởng vào năm 1998 và bao gồm vô số máy chủ được cấp phép, trong số đó: Office 2000 - 2010, AutoCAD, PI Processbook và Visual Basic 6.0 độc lập


3
Câu trả lời này là hoàn toàn sai. VBA không phải là VB6, đó là những thực thể riêng biệt có chung nhiều tính năng. Câu nói ngắn đó không chứng minh bất cứ điều gì. Nói rằng đó không phải là ngôn ngữ vì nó chạy trên máy chủ cũng lên án các ngôn ngữ như JavaScript đối với các ngôn ngữ không phải là ngôn ngữ, điều này hoàn toàn không đúng. Ngoài ra, các chương trình VB6 có thể được biên dịch thành các chương trình độc lập, khiến chúng không yêu cầu bất kỳ máy chủ nào (ngoài Windows, nghĩa là).
Erik A

@ErikA Không bạn đã hiểu nhầm những gì họ đang nói. VB như trong VB6 là Ứng dụng máy chủ chạy VBA, giống như các ứng dụng Office làm. VB6 chỉ là một ứng dụng cho phép bạn phát hành nhị phân để tạo ra các bản độc lập. Có những câu trả lời khác ở trên giải thích các chi tiết.
typedef Miles_Williams MILO

4

VBA là viết tắt của Visual Basic For Application và ứng dụng Visual Basic được sử dụng trong Office Suite.

Sự khác biệt giữa chúng là VBA được nhúng bên trong các tài liệu Office (tính năng của Office). VB là ide / ngôn ngữ để phát triển ứng dụng.


1

VB (Visual Basic chỉ tối đa 6.0) là siêu bộ của VBA (Visual Basic cho Ứng dụng). Tôi biết rằng những người khác đã lảng tránh điều này nhưng tôi hiểu rằng ngữ nghĩa (nghĩa là từ vựng) của VBA được bao gồm trong VB6 (ngoại trừ các đối tượng dành riêng cho các sản phẩm Office), do đó, VBA là một tập hợp con của VB6. Cú pháp (nghĩa là thứ tự các từ được viết) hoàn toàn giống nhau trong VBA giống như trong VB6, nhưng sự khác biệt là các đối tượng có sẵn cho VBA hoặc VB6 là khác nhau vì chúng có mục đích khác nhau. Mục đích cụ thể của VBA là tự động hóa theo chương trình các tác vụ có thể được thực hiện trong MS Office, trong khi mục đích của VB6 là tạo EXE tiêu chuẩn, Điều khiển ActiveX, ActiveX DLL và ActiveX EXE có thể hoạt động độc lập hoặc trong các chương trình khác như MS Office hoặc Windows.


VB6 lưu trữ ngôn ngữ VBA. Nó giống hệt nhau. VB6, với tư cách là máy chủ lưu trữ, cung cấp một số đối tượng nhất định như Word khi lưu trữ.
ACatInLove
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.