So sánh VBA với VB6

Liên hệ QC

PhanTuHuong

VBA & VB.NET for Excel & AutoCad
Thành viên danh dự
Tham gia
13/6/06
Bài viết
7,121
Được thích
24,279
VBA là ngôn ngữ lập trình Visual Basic trong các ứng dụng (office, autocad). Chính vì vậy mà nội dung, cấu trúc code VBA rất giống VB6 (nhiều khi khó nhận biết !!! !$@!!).
Để chuyển code VBA sang VB6 chỉ cần sửa đổi 1 chút là ổn.

Xin mời các bác đã có kinh nghiệm về 2 ngôn ngữ này cho ý kiến về chúng.
 
Hiểu một cách đơn giản thế này anh ạ.
Tiếng Anh, tiếng Pháp, ...là một ngôn ngữ, cũng như VB là một ngữ trong máy tính (có nhiều ngôn ngữ như: C, C#, Delphi, Pascal, Foxpro,...là một ngôn ngữ trong máy tính). Khi các ngôn ngữ dùng trong các hoàn cảnh hay phạm vi khác nhau thì nó trở thành ngôn ngữ chuyên môn. Tiếng Anh, tiếng Pháp dùng trong các ngành Tài chính, Y học, Địa chất,... thì nó sẽ giống như VB dùng trong phạm vi ứng dụng Office: Excel, Word, Access, Powerpoint; Autocad,...

Tóm lại, VBA KHÔNG PHẢI LÀ NGÔN NGỮ LẬP TRÌNH như mọi người vẫn nghĩ. Nói một cách đúng đắn, VB mới là ngôn ngữ lập trình còn VBA là môi trường lập trình ứng dụng mà ngôn ngữ sử dụng là VB, giống như tiếng Anh dùng trong Địa chất công trình không thể nói nó là một ngôn ngữ mới. Tôi hoàn toàn không chấp nhận một số tác giả viết sách nước ngoài gọi VBA là một ngôn ngữ! Rất mơ hồ.

Như vậy, có thể hiểu, sau này dù có hàng trăm ứng dụng, không chỉ là Autocad, Office mà có thể có như X,Y,Z ứng dụng, nếu được thiết kế dạng Server Automation, nếu nắm được ngôn ngữ VB thì hoàn toàn có thể điều khiển được chúng. Mà không chỉ là VB đâu, các ngôn ngữ lập trình khác đều có thể điều khiển được chúng. Anh Hướng nếu để ý thì có thể thấy A-Excel, A-Tools em viết là bằng VB6 và Delphi. Nếu để mọi người hiểu làm sao để liên kết được giữa các ngôn ngữ với các ứng dụng (dạng Server Automation) thì cần mở một topic với một tiêu đề khác.

So sánh VB6 với VBA thì không có gì cả, nó chỉ là đối tượng sử dụng là khác nhau, thêm nữa là VB6 cho phép biên dịch còn VBA thì không (vì nó nằm trong ứng dụng), VB6 hỗ trợ việc gọi các hàm Windows API tốt còn VBA thì hạn chế hơn nhiều, VB6 cho phép tạo các điều khiển (dạng nhúng) gọi là Control (*.ocx, *.dll) còn VBA thì không.

Nói chung, về tương lai gần có lẽ VB6 sẽ không tồn tại trong Office nữa mà sẽ được thay thế bằng VB.NET, C#.
 
Lần chỉnh sửa cuối:
Thực ra cái tên VBA (Visual Basic for Applications) đã nói lên ý nghĩa của nó. VB6 là ngôn ngữ lập trình cho ra sản phẩm chạy hoàn toàn độc lập, trong khi đó VBA thì không làm được như vậy vì phụ thuộc vào các ứng dụng (Applications).
Anh Tuân so sánh ở tầm hơi vĩ mô 1 chút :-=, nhưng tôi chỉ muốn đề cập ở mức độ vừa phải là so sánh code là chính thôi.
 
Hiểu một cách đơn giản thế này anh ạ.
Tiếng Anh, tiếng Pháp, ...là một ngôn ngữ, cũng như VB là một ngữ trong máy tính (có nhiều ngôn ngữ như: C, C#, Delphi, Pascal, Foxpro,...là một ngôn ngữ trong máy tính). Khi các ngôn ngữ dùng trong các hoàn cảnh hay phạm vi khác nhau thì nó trở thành ngôn ngữ chuyên môn. Tiếng Anh, tiếng Pháp dùng trong các ngành Tài chính, Y học, Địa chất,... thì nó sẽ giống như VB dùng trong phạm vi ứng dụng Office: Excel, Word, Access, Powerpoint; Autocad,...

Tóm lại, VBA KHÔNG PHẢI LÀ NGÔN NGỮ LẬP TRÌNH như mọi người vẫn nghĩ. Nói một cách đúng đắn, VB mới là ngôn ngữ lập trình còn VBA là môi trường lập trình ứng dụng mà ngôn ngữ sử dụng là VB, giống như tiếng Anh dùng trong Địa chất công trình không thể nói nó là một ngôn ngữ mới. Tôi hoàn toàn không chấp nhận một số tác giả viết sách nước ngoài gọi VBA là một ngôn ngữ! Rất mơ hồ.

Oh, khái niệm tương đối Tuan ah,

nếu nói như Tuan thì đúng ra Basic mới là ngôn ngữ lập trình (NNLT), VB cũng chỉ là môi trường cho ngôn ngữ đó thôi, Giống như C,C++ với Visual C, Visua C++, Turbo C, Turbo C++,... giống như nhiều ng lầm tưởng gọi Turbo Pascal là ngôn ngữ lập trình (thực ra Pascal mới là NNLT, còn Turbo Pascal chỏ là môi trường cho lập trình)

Tất nhiên là tương đối vì khi nâng lên VB, MicroSoft đã thêm nhiều thứ (thành phần ngôn ngữ) vào rùi

NHƯNG mình đồng ý với Tuan là: VBA k phải là NNLT và cũng không phải là môi trường lập trình hỗ trợ NNLT như VB -- mà nó chỉ là môi trường giúp nhúng kịch bản viết dưới dạng ngôn ngữ basic

hi iiiiiiiiiiiiiiiiiiiiiiiii
 
Lấy nguyên nội dung của anh Microsoft vậy (tôi bôi đỏ những nội dung quan trọng):

Visual Basic for Applications Frequently Asked Questions

Q. What is Visual Basic for Applications?
A. Microsoft Visual Basic for Applications (VBA) is an embeddable programming environment designed to enable developers to build custom solutions using the full power of Microsoft Visual Basic. Developers using applications that host VBA can automate and extend the application functionality, shortening the development cycle of custom business solutions.


Q. What is the VBA Software Development Kit?
A. The VBA software development kit (SDK) contains documentation and tools for hosting VBA - everything needed to evaluate VBA in your application. Using the SDK, developers can easily integrate VBA into their software for evaluation purposes. The SDK is not necessary to develop solutions using VBA hosted by an application such as Microsoft Office, because Microsoft Office already includes VBA.

Q. What elements of Visual Basic for Applications are being licensed?
A. Licensees of Visual Basic for Applications embed the VBA integrated development environment (IDE), the VBA language engine, Microsoft Forms, IntelliSense technology productivity features, and development tools (including a debugger, an object browser, and a code editor). In addition, licensees can take advantage of the multithreading capabilities of VBA, as well as support for digital signatures.

Q. What are the differences between Visual Basic, VBA, and VBScript? When would I use one over another?
A. Visual Basic is a stand-alone tool for creating separate software components, such as executable programs, COM components and ActiveX Controls, and is useful when you must build a specialized solution from scratch.

VBA offers the same powerful tools as Visual Basic in the context of an existing application, and is the best option for customizing software that already meets most of your needs.

VBScript is a lightweight version of the Visual Basic language, and is designed specifically for use on Web pages. While scripting can sometimes be used for simple automation, VBA is the premier technology designed specifically for application automation. Unlike VBA, VBScript does not have an IDE.


Q. Is VBScript compatible with Visual Basic for Applications and Visual Basic?
A. Yes. VBScript is upwardly compatible with Visual Basic for Applications and Visual Basic.

Q. Which Microsoft applications include Visual Basic for Applications?
A. Visual Basic for Applications 6.5 is a core component in Microsoft Office 2007, and is integrated into Microsoft Access, Microsoft Excel, Microsoft Outlook, Microsoft PowerPoint, and Microsoft Word.

Q. Which companies have licensed Visual Basic for Applications?
A. A list of companies who have announced that they are licensing Visual Basic for Applications can be found here.

Q. For what platforms is Visual Basic for Applications available?
A. Visual Basic for Applications 6.5 is available for the Microsoft Windows Server 2003, Windows XP, and Windows Vista operating systems on 32-bit Intel platforms.

Q. Does VBA include any security features?
A. Yes. Visual Basic for Applications includes the ability to prevent users from viewing or modifying code. Developers can password-protect their VBA code so it is encrypted and cannot be viewed. Digital signatures offer an additional layer of security on top of code protection. By combining digital signatures with security levels, users can identify the source of VBA code and make informed decisions about whether to trust it.

Q. What are COM add-ins?
A. COM add-ins are stand-alone software components that are integrated into an application to add features to the program. They use a common integration architecture that provides a consistent model across multiple applications. All Microsoft Office 2007 applications support COM add-ins.

Q. How does Visual Basic for Applications relate to Microsoft Office?
A. Via integration in Microsoft Office, Visual Basic for Applications is a key part of Microsoft's strategy to enable customers to use desktop applications as "construction sites" for creating customized business solutions.

Q. My department uses both Visual C++ and Visual Basic for development. Which is better for integrating VBA?
A. The Microsoft Application Programmability Component (APC), included in VBA, greatly simplifies VBA integration into both Microsoft Visual C++ and Microsoft Visual Basic applications. The choice of which language to employ depends on the requirements and design goals of your business application. Because VBA integrates with both technologies, you can concentrate on making technology decisions based on business requirements.

Q. What advantage do VBA multithreaded projects have over Visual Basic or Visual C++?
A. VBA multithreaded projects provide tighter integration with a host application. This makes it easier for a developer to write VBA code that responds to application events and that interacts with the host application.

Q. What elements of Visual Basic for Applications are being licensed?
A. Licensees get the exact same Visual Basic for Applications environment that is part of Microsoft Office. This environment includes the Visual Basic for Applications language engine, the Microsoft Forms design tools, IntelliSense productivity features, and development tools (debugger, object browser, editor).
 
Oh, khái niệm tương đối Tuan ah,

nếu nói như Tuan thì đúng ra Basic mới là ngôn ngữ lập trình (NNLT), VB cũng chỉ là môi trường cho ngôn ngữ đó thôi, Giống như C,C++ với Visual C, Visua C++, Turbo C, Turbo C++,... giống như nhiều ng lầm tưởng gọi Turbo Pascal là ngôn ngữ lập trình (thực ra Pascal mới là NNLT, còn Turbo Pascal chỏ là môi trường cho lập trình)

Tất nhiên là tương đối vì khi nâng lên VB, MicroSoft đã thêm nhiều thứ (thành phần ngôn ngữ) vào rùi

NHƯNG mình đồng ý với Tuan là: VBA k phải là NNLT và cũng không phải là môi trường lập trình hỗ trợ NNLT như VB -- mà nó chỉ là môi trường giúp nhúng kịch bản viết dưới dạng ngôn ngữ basic

hi iiiiiiiiiiiiiiiiiiiiiiiii

Ngôn ngữ lập trình và trình biên dịch là hai khái niệm khác nhau không thể là tương đối được. Các tên gọi như C, Microsoft VC, Turbo C người ta gọi là trình biên dịch chứ chúng đều là ngôn ngữ C. Basic, Pascal, C vẫn là một trong những ngôn ngữ gốc của các ngôn ngữ hiện đại bây giờ như: Visual Basic (từ Basic), Delphi (từ Object Pascal), chúng phải thay tên vì một vài lý do nào đó nhưng có một lý do chắc chắn là cách thức lập trình, các khoá lệnh đã được thêm hay được bổ sung nhiều. Nếu lập trình VB mà dùng Basic để biên dịch thì không còn gọi là VB nữa mà lại là Basic, cũng với Delphi không thể dùng Pascal để biên dịch.

Phan Tu Huong đã viết:
...
Microsoft Visual Basic for Applications (VBA) is an embeddable programming environment designed to enable developers to build custom solutions using the full power of Microsoft Visual Basic...

Theo đoạn trên, em tạm dịch "VBA là một môi trường lập trình kết hợp, những người phát triển có thể xây dựng các giải pháp tuỳ vào nhu cầu của mình với sức mạnh của Microsoft Visual Basic...."

Qua các trích dẫn mà nguồn của Microsoft anh Hướng đưa ra thì VBA vẫn không phải là ngôn ngữ lập trình.


Microsoft Visual Basic for Applications (VBA) is an embeddable programming environment
chứ không phải là "Microsoft Visual Basic for Applications (VBA) is a programming language"

Nếu anh Hướng muốn giải thích về sự khác nhau bằng mã lệnh thì không có gì cả vì VBA sử dụng ngôn ngữ VB, có chăng chỉ là các object sử dụng sẽ là khác nhau thôi.

Trong VBA goi lệnh can thiệp vào các thành phần Excel không cần phải gọi đối tượng mẹ Application

Mã:
ActiveCell.Value = "Thử gán giá trị từ VBA"

trong VB bắt buộc phải khai báo và thiết lập biến tới Application của ứng dụng

Mã:
Set App = GetObject(,"Excel.Application") 'Bắt buộc

App.ActiveCell.Value = "Thử gán giá trị từ VB"
 
"Ngôn ngữ lập trình và trình biên dịch là hai khái niệm khác nhau không thể là tương đối được. Các tên gọi như C, Microsoft VC, Turbo C người ta gọi là trình biên dịch chứ chúng đều là ngôn ngữ C. Basic, Pascal, C vẫn là một trong những ngôn ngữ gốc của các ngôn ngữ hiện đại bây giờ như: Visual Basic (từ Basic), Delphi (từ Object Pascal), chúng phải thay tên vì một vài lý do nào đó nhưng có một lý do chắc chắn là cách thức lập trình, các khoá lệnh đã được thêm hay được bổ sung nhiều. Nếu lập trình VB mà dùng Basic để biên dịch thì không còn gọi là VB nữa mà lại là Basic, cũng với Delphi không thể dùng Pascal để biên dịch."


Theo tôi nghĩ ngôn ngữ gốc không phải là C, Basic, Pascal mà là hợp ngữ Assemly .đó là gốc các ngôn ngữ bây giờ mới đúng hơn.

Ví dụ như hợp ngữ: mov eax,ebx
xor eax
jmp
...

mà đúng nhất ngôn ngữ gốc là ngôn ngữ máy như vầy nè: 00100001110111011110011 ...

VBA, VB, C, Basic, Pascal tất cả chỉ đều là hợp ngữ, là ngôn ngữ máy, toàn là trạng thái có điện và không có điện cả?
 
Theo tôi nghĩ ngôn ngữ gốc không phải là C, Basic, Pascal mà là hợp ngữ Assemly .đó là gốc các ngôn ngữ bây giờ mới đúng hơn.

Ví dụ như hợp ngữ: mov eax,ebx
xor eax
jmp
...

mà đúng nhất ngôn ngữ gốc là ngôn ngữ máy như vầy nè: 00100001110111011110011 ...

Bạn đọc kỹ cả đoạn tôi đã viết:
TuanVNUNI đã viết:
...
Basic, Pascal, C vẫn là một trong những ngôn ngữ gốc của các ngôn ngữ hiện đại bây giờ như: Visual Basic (từ Basic), Delphi (từ Object Pascal)...

Tôi đang muốn nói về sự "tiến hóa" của Basic, C, Pascal còn ngôn ngữ máy 1/0 rồi đến Assembly thì ai cũng rõ rồi.
http://vi.wikipedia.org/wiki/Hợp_ngữ

VBA, VB, C, Basic, Pascal tất cả chỉ đều là hợp ngữ, là ngôn ngữ máy, toàn là trạng thái có điện và không có điện cả?

Không chính xác, các ngôn ngữ bạn nói là các ngôn ngữ bậc cao (gần với ngôn ngữ con người, C vẫn được coi là bậc thấp), để chạy được trên máy tính thì chúng phải được biên dịch ra mã máy.
 
oh, tranh luận sôi nổi wa,

túm lại nhiều ngôn ngữ quá - như ngôn ngữ con người hiện nay, đến lúc phải đi học như học ngoại ngữ thì sợ lém, hic hiiiiiiiiiiiiiii giá như chỉ có một ngôn ngữ chung thì hay

các bạn có nghĩ sẽ có NNLT máy tính thuần việt k nhỉ
.
 
:) cũng phức tạp ra phết nhỉ. Thui đơn gaỉnn hoá nó đi cho dân dã dễ hiểu.

"Ngôn ngữ là gì?" Tiếng Anh nguyên gôc là "language" nó là một hệ thống các tín hiệu gồm âm thanh, hình ảnh (ký tự bản chất là hình ảnh). Nhằm trao đổi thông tin. Khi tôi viết ra các ký tự này là tôi mong muốn trao đổi thông tin đến một ai đó "hiểu được nó". Mở rộng ra thì có cả ngôn ngữ cử chỉ, ngôn ngữ cơ thể "body lânguge" Ví dụ: mắt lim dim đầu dụi vào vai mình ~ "hôn em đi anh" }}}}}}}}}}}}}}}.
Đơn giản vậy thôi.
Thế ngôn ngữ lập trình là gì? Bản thân máy tính làm việc ở chế độ 01. Với một loại ngôn ngữ riêng do nhà thiết kế định nghĩa tôi lấy ví dụ 74H, 75H, 76H... đồng nghĩa với ngôn ngữ của chúng ta là "nhảy đi", "nhảy đến đâu" nhảy khi có điều kiện gì. Ngày đầu tiên khi làm việc với máy tính các nhà lập trình phải làm đúng như vậy, và hình ảnh là nhập liệu, chương trình bằng các băng đục lỗ 01. Quá phức tạp, nhiều sai sót. Ngôn ngữ cao hơn ra đời ASembly viết dưới dạng cú pháp, tuy nhiên vẫn khá gần ngôn ngữ máy 74H, 75H, 76H đc thay bằng jmp, jne, je... rồi call MUL...
Đến lượt: ASembly vẫn còn quá phức tạp nên các ngôn ngữ cao hơn ra đời: Algol, Fortran vẫn chưa có C đâu nhé.
Tiếp tục phát triển và hoàn thiện ra đời thêm nhiều ngôn ngữ, C, Pascal, Basic... rồi đến ngày nay.
Nhiệm vụ của một ngôn ngữ lập trình là gì?? dịch tất cả các ngôn ngũ ra ngôn ngữ chuẩn "mã máy" giống như bạn nói tiếng Việt, một ông nói tiềng Pháp OK tốt hơn cả 2 dùng tiếng Anh.
Một số ngôn ngữ dùng phương pháp gián tiếp, không trực tiếp dịch ra mã máy mà dịch về một dạng mã riêng, đến lượt sẽ có bộ phận chuyên trách dịch tiếp thành mã máy

Bạn (tiêng Viêt) <==> phiên dịch của bạn <==> tiêng Anh <==> phiên dịch của ông B tiêng Pháp <==> ông B. Một hệ thốgn như thế cần 4 người để bạn có thể hiểu đc ông B và ngược lại.

Quay lại VB và VBA: Tất nhiên trong khuôn khổ bài viết khó có thể nói được hết các khía cạnh. Tuy nhiên tôi cũng không biết các bạn dựa trên tiêu chí nào để cho là ngôn ngữ lập trình hay không phải. Điểm khác biệt lớn nhất VB là biên dịch( dù một sô người không công nhận) VBA (thông dịch - không dịch trực tiếp ra mã máy).
Tuy nhiên tôi vẫn theo quan điểm VB là biên dịch vì thực tế file thi hành đc tạo ra
bởi VB thì đúng 100% mã máy, còn việc phải làm việc qua trung gian VB engine là cách thức cũng giống như bạn dùng các thư viên chuẩn của C hay Delphi mà thôi.
Tiêu chí này không đc dùng để nhận biết ngôn ngữ lập trình.

:) thui để khi nào rỗi thì tham gia tiếp.
 
Web KT
Back
Top Bottom