为什么Microsoft仍在Office产品中附带VBA,而不是直接集成.NET?[关闭]


12

我知道可以从您的VBA代码中调用.NET代码,但是为什么VBA继续存在?我能想到的唯一原因是遗产。

我只需要排序一个Scripting.Dictionary,所需的代码量就令人恐惧。

IDE看起来像Visual Studio2003。其中有许多小细节,使您发疯(就像更改行并由于某些编译错误而收到警告)。或者,如果您打开多个电子表格,则该电子表格会混入“ VBAProject”中,这确实令人困惑。

整个模块/类模块/表单的划分实际上并不是那么糟糕,但是我每次都会以直接在表单中编写逻辑,或者拥有一个可以处理所有事情的巨大模块来结束。

为什么我不能按Alt + F11并用C#编程?


11
“我能想到的唯一原因就是遗产。” 这还不够吗?
欣快2014年

3
微软是遗留应用程序和向后兼容性的王者... 考虑到这是我们正在谈论的微软,任何其他答案对我来说都是令人惊讶的。

2
@Kiril很可能不是“我们总是那样做”。可能是“我们已经比较了从打破向后兼容性中可以获得的收益与我们将失去的收益,发现这是不值得的。”
2014年

1
@Kiril-您的问题要求向Office附带“ .NET” VBA。那将需要放弃它。
JeffO 2014年

3
@Kiril:很多非常狡猾的字符也很乐意将dll嵌入文档中,但不是为了您的利益。
whatsisname 2014年

Answers:


15

Microsoft Office有多种方法可以让您以编程方式更改/增强默认行为。VBA是经过考验,久经考验且广泛用于文档脚本编写的语言。许多办公室人员都知道VBA并使用它,而他们不了解C#等更复杂的编程语言。如果客户在学习一种新的语言或其他内容后不得不重写许多处理关键业务的启用宏的旧文档,则Office的销售量就不会很多。向后兼容是关键功能!

用于Office的完整.NET堆栈可能需要一组依赖项管理(dll:s等),并且很容易为简单任务进行繁重的管理-这几乎不是轻量级脚本编写的替代方法。VSTO使您能够使用C#,但是代价是要增加插件开发周期。

Microsoft的程序经理已在此处撰写有关此内容的文章。显然,出于小型脚本编写目的,VBA已经存在并将继续存在。


文章中的解释很好。谢谢。
基里尔2014年

6
作为前任工作人员,我可以补充一点,有些客户要花大笔钱才能在快速拨号和常规聊天中使用Gates / Ballmer / Nadella等,并且VBA被认为非常重要,以至于任何破坏VBA行为的更改(尤其是在Excel中)甚至是版本之间)都可以迅速得到关注。同样,它绝非仅仅针对不熟练的人。有大量的专业开发人员在使用它。VBA通常将C#作为工作知识来寻求。
James Snell 2014年

这种说法并没有阻止MS于6年前放弃VB而改用VB.Net,后者破坏了许多代码。
Mike Lowery

3

好吧,答案不是严格意义上的“传统”。答案是VBA既不是VB6也不是VB.Net:它是VBA。单独但相关的语言。如果用VB.Net替换VBA,将不可避免地破坏很多文档。

用VB.Net替换VBA几乎肯定会导致大量主要产品用户的数据丢失-这不是一件好事。

而且他们对VBA的目标市场不是程序员。


7
VBA是VB6的近亲。唯一的实质差异是与API有关的差异。即VBForms而不是Excel或Word对象模型。如果没有这些差异,则可以将VBA代码复制/粘贴到VB6(反之亦然),并且仍然可以在99%的时间内正常工作。
罗伯特·哈维

3
对VBA和VB.Net/C#的支持不必相互排斥。
Joel Coehoorn'2

2

如果您认为人们购买Office的主要原因是为了保持与所有现有文档的兼容性,其中许多文档中都包含宏和VBA,那么将这些用户像对待VB6人群一样对待并告诉他们,这将是非常勇敢的Microsoft吸收它并开始在.NET中进行编码,只需看看曾经排名第一的uservoice请求即可

我想LibreOffice家伙会为自己昏迷而加油!

VBA是为了提高Office的生产力,而不是“编程”。您需要从文档中获得更多功能的那一天是您雇用程序员重写所有内容的那一天。我想另一个原因是Visual Studios宏也不是.NET的原因-认为devenv4 COM对象与VBA没有太大区别。


他不是要他们放弃VBA。他要求他们使用.Net作为附加选项。
Joel Coehoorn'2

1

我认为遗产知名度之间有细微但重要的区别。而且,当您完成与我一样多的合同时,您会了解到VBA 非常流行:)我无法告诉您我为“ Excel骑师”完成了多少对编程一无所知的合同可以压倒VBA,就像生死攸关一样。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.