Tại sao Microsoft vẫn gửi VBA trong các sản phẩm Office, thay vì tích hợp .NET trực tiếp? [đóng cửa]


12

Tôi biết rằng có thể gọi mã .NET từ mã VBA của bạn, nhưng tại sao VBA tiếp tục tồn tại? Lý do duy nhất tôi có thể nghĩ là di sản.

Tôi chỉ phải sắp xếp một Scripting.Dictionaryvà số lượng mã cần thiết là đáng sợ.

IDE trông giống như Visual Studio 2003. Và có nhiều chi tiết nhỏ, khiến bạn phát điên (Giống như thay đổi dòng và nhận được cảnh báo vì một số lỗi biên dịch). Hoặc, nếu bạn mở nhiều hơn một bảng tính, nó sẽ trộn vào "VBAProject" của bạn và điều này thực sự khó hiểu.

Toàn bộ phân chia mô-đun / lớp mô hình / biểu mẫu thực sự không tệ, nhưng tôi kết thúc mọi lúc bằng cách viết logic trực tiếp trong các biểu mẫu hoặc có một mô-đun lớn xử lý mọi thứ.

Tại sao tôi không thể nhấn Alt + F11 và hack trong C #?


11
"Lý do duy nhất tôi có thể nghĩ đến là di sản." Và điều đó là không đủ cho bạn?
Euphoric

3
Microsoft là vua của các ứng dụng cũ và khả năng tương thích ngược ... bất kỳ câu trả lời nào khác sẽ gây ngạc nhiên cho tôi vì đây là Microsoft mà chúng ta đang nói đến.

2
@Kiril Rất có thể không phải là "chúng tôi luôn làm theo cách đó"; có lẽ là "chúng tôi đã so sánh chúng tôi sẽ kiếm được bao nhiêu từ việc phá vỡ khả năng tương thích ngược với số tiền chúng tôi sẽ mất và thấy nó không xứng đáng."
Doval

1
@Kiril - câu hỏi của bạn yêu cầu gửi Office với .NET "thay vì" của VBA. Điều đó sẽ yêu cầu từ bỏ nó.
JeffO

3
@Kiril: rất nhiều nhân vật tinh ranh cũng sẽ rất vui khi nhúng dlls vào tài liệu, nhưng không phải vì lợi ích của bạn.
tên gì là

Câu trả lời:


15

Microsoft Office có nhiều cách để cho phép bạn thay đổi / nâng cao hành vi mặc định theo chương trình. VBA là một ngôn ngữ đã được thử nghiệm, đã được chứng minh và phổ biến rộng rãi cho kịch bản in-doc. Rất nhiều người dân văn phòng biết VBA và sử dụng nó, trong khi họ không biết các ngôn ngữ lập trình phức tạp hơn như C #. Office sẽ không được bán nhiều nếu khách hàng phải viết lại vô số tài liệu kích hoạt macro cũ, kinh doanh những thứ quan trọng - sau khi họ học một ngôn ngữ mới hoặc bất cứ điều gì. Khả năng tương thích ngược là một tính năng quan trọng!

Một ngăn xếp .NET đầy đủ cho Office có thể yêu cầu một số bộ quản lý phụ thuộc (dll: s, v.v.) và sẽ dễ dàng trở nên nặng nề để quản lý cho các tác vụ đơn giản - hầu như không phải là một cách thay thế cho kịch bản nhẹ. VSTO cung cấp cho bạn khả năng đi với C #, nhưng với giá của một chu kỳ phát triển plugin nặng hơn.

Một người quản lý chương trình tại Microsoft đã viết về điều này ở đây . Rõ ràng là VBA đang và vẫn sẽ xuất hiện cho các mục đích kịch bản nhỏ.


Giải thích trong bài viết là rất tốt. Cảm ơn.
Kiril

6
Là một cựu nhân viên, tôi có thể nói thêm rằng một số khách hàng phải trả một số tiền lớn để có Gates / Ballmer / Nadella, v.v. trên Quay số nhanh cũng như các cuộc trò chuyện thông thường và VBA được coi là đủ quan trọng để mọi thay đổi phá vỡ hành vi VBA (đặc biệt là trong Excel và thậm chí giữa các phiên bản) nhanh chóng nhận được sự chú ý. Ngoài ra, nó không chỉ dành cho người không có kỹ năng; có một đội ngũ các nhà phát triển chuyên nghiệp sử dụng nó. C # được tìm kiếm khá phổ biến với VBA là kiến ​​thức làm việc.
James Snell

Lập luận này đã không ngăn MS khỏi lỗi thời VB6 năm trước vì VB.Net đã phá vỡ rất nhiều mã.
Mike Lowery

3

Vâng, câu trả lời không hoàn toàn là "di sản". Câu trả lời là VBA không phải là VB6 hay VB.Net: đó là VBA. Một ngôn ngữ riêng biệt, nhưng có liên quan. Nếu thay thế VBA bằng VB.Net, chắc chắn nó sẽ phá vỡ rất nhiều TÀI LIỆU.

Việc thay thế VBA bằng VB.Net gần như chắc chắn sẽ dẫn đến mất dữ liệu cho một số lượng đáng kể người dùng các sản phẩm chính của họ - không phải là một điều tốt.

Và thị trường mục tiêu của họ cho VBA không phải là lập trình viên.


7
VBA là anh em họ rất thân với VB6. Sự khác biệt duy nhất về vật chất là những thứ phải làm với API; tức là VBForms thay vì các mô hình đối tượng Excel hoặc Word. Không có những khác biệt đó, bạn có thể sao chép / dán mã VBA vào VB6 (hoặc ngược lại) và nó vẫn sẽ hoạt động 99% thời gian.
Robert Harvey

3
Hỗ trợ cho VBA và VB.Net/C# không phải loại trừ lẫn nhau.
Joel Coehoorn

2

Nếu bạn xem xét lý do chính khiến mọi người mua Office là để giữ tính tương thích với tất cả các tài liệu hiện có, nhiều trong số đó có macro và VBA, thì đó sẽ là một Microsoft rất dũng cảm đối xử với những người dùng như họ đã làm đám đông VB6 và nói với họ hút nó lên và bắt đầu mã hóa bằng .NET, hãy xem yêu cầu sử dụng số 1 bao giờ hết !

Tôi tưởng tượng các anh chàng LibreOffice sẽ tự cổ vũ mình trong vô thức!

VBA dành cho năng suất trong Office, không phải "lập trình". Ngày bạn cần nhiều năng lượng hơn từ các tài liệu của mình là ngày bạn thuê một lập trình viên để viết lại mọi thứ. Tôi đoán một lý do khác là tại sao các macro của Visual Studios không phải là .NET - hãy nghĩ về đối tượng COM devenv4 không khác nhiều so với VBA.


Anh ấy không yêu cầu họ bỏ VBA. Anh ấy yêu cầu họ có .Net như một tùy chọn bổ sung.
Joel Coehoorn

1

Tôi nghĩ rằng có một sự khác biệt nhỏ, nhưng quan trọng, giữa di sảnsự phổ biến . Và khi bạn đã thực hiện nhiều hợp đồng như tôi có, bạn biết rằng VBA cực kỳ phổ biến :) Tôi không thể cho bạn biết có bao nhiêu hợp đồng tôi đã thực hiện cho "jockeys Excel" mà không biết gì về lập trình nhưng có thể đè bẹp VBA như đó là vấn đề sống hay chết.

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.