gpt4 book ai didi

excel - 为什么 VBA 中的每个类都有一个 Application 属性?

转载 作者:行者123 更新时间:2023-12-02 07:36:41 27 4
gpt4 key购买 nike

我想澄清一下为什么 VBA 中的每个类(或几乎每个类)(当您滚动浏览对象浏览器时)都有一个 Application 属性。

MSDN 说

When used without an object qualifier, this property returns an Application object that represents the Microsoft Excel application. When used with an object qualifier, this property returns an Application object that represents the creator of the specified object (you can use this property with an OLE Automation object to return the application of that object). Read-only.

第一句话已经很清楚了。您在没有限定符的情况下使用的托管应用程序可以是支持 VBA 的 MS Office 产品之一。

在 Excel 中调试.打印应用程序 = Microsoft Excel
在Word中调试.打印应用程序 = Microsoft Word
等等...

但是...第二句话对我来说完全不清楚...所以我想无论你在哪里调用 .Application 总会返回一个对象的主机...

  • 那么,VBA 中的每个类拥有 Application 属性有何意义?

PS。你总是可以调用 .Parent => .Parent 来提升层次结构......不是吗?您只需调用不带限定符的 Application 即可获得...

我什至无法想到一个 SSCCE OLE 场景,因此很抱歉我没有提供示例。 Application 属性(Application class 混淆)的记录很少,这就是我要求的原因有更多经验的人可以为我澄清这一点。

    一种(嗯,有点)场景,但不确定它是否适用于此,可能是使用 Interop for Office。例如,当您有一个打开两个文件(一个 Excel 和一个 Word)的外部应用程序时,通过获取对两个文件中的 Range 的引用,您可能能够返回 Microsoft ExcelMicrosoft Word..但这对任何人都有用吗?嗯..我不理解整个概念吗?

最佳答案

这有两个层次。首先,每个类都有一个 Application 属性的原因是因为有人认为这是一个好主意,并且他们创建了一个基类,所有其他类都从该基类继承。有点像通过类一致应用 Value 属性或 Item 属性的决定。

真正的问题是为什么有人认为这是一个好主意。我不知道,但这可能是斯波尔斯基的主意,所以他应该回答。我可以告诉你我如何使用它。

如果我要从 Excel 自动化 Outlook,我通常会创建一个 olApp 变量来保存 Outlook 应用程序。但我不必这样做。例如,我可以创建一个 MailItem 并通过它引用应用程序。我使用应用程序属性的地方是调试。我实例化了一个 MailItem 对象,但收到错误。例如,即使我的范围内没有应用程序对象变量,我也可以查看收件箱中有多少项目。在立即窗口中:

?olMailItem.Application.GetDefaultFolder(1).Items.Count

我可以将一堆 .Parent 调用串在一起,但我不一定知道需要多少个。这就是 MSDN 描述的第二部分发挥作用的地方。如果我使用不带限定符的应用程序(我在 Excel 中),则它默认为 Excel.Application。但 olMailItem 的 Application 属性返回 Outlook.Application,因为它位于包含 MailItem 类的对象层次结构的顶部。

我认为这只是一个方便的快捷方式,有人认为非常方便,他们将其编码到所有对象的基类中。

关于excel - 为什么 VBA 中的每个类都有一个 Application 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23272782/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com