我只想要一个所有 ActiveSheet 属性的列表
您无法使用 100% VBA 代码轻松地以编程方式获得它,VBA 几乎具有零反射功能。
现在,假设我们不是在寻找检索对象属性的编程方式,以下是如何使用对象浏览器来获取您要查找的内容。
首先,右键单击对象浏览器中的任意位置并选择“显示隐藏的成员”选项以显示您正在查看的库的全部范围。这会在编辑代码时影响名称列表下拉列表:您现在将看到隐藏的成员。
Excel 类型库中的隐藏模块之一是一个名为 的模块Global,具有隐藏的_Global界面:

该隐藏的全局模块是您可以键入的方式MsgBox ActiveSheet.Name,并且它“正常工作”(假设有一个-当您正在使用ActiveSheet的实例中没有打开活动工作簿时,它总是会因错误 91 而爆炸Application)即使您没有指定Workbook您正在使用的内容:隐含地,ActiveSheet只是在处理任何ActiveWorkbook内容。
属性ActiveSheet也是如此,而不是对象。它是一个返回对象的属性,但它的声明类型是.Object
这意味着您直接针对 的任何成员调用ActiveSheet都是隐式后期绑定的:您可以键入MsgBox ActiveSheet.Naem,VBA 将愉快地编译错字(Option Explicit无法在此处保存您),并且只会在运行时出现错误 438“我可以”找不到那个属性!”。
为了知道它ActiveSheet有什么属性,我们需要知道我们正在查看什么运行时类型。并且由于Workbook对象中的工作表可以是 a Worksheet、 aChart或其他几种类型的遗留“工作表”对象,因此在编译时确实没有可访问的成员,因为在编译时ActiveSheet只是指向 an 的指针Object,而只有在运行时才知道的对象类型。
因此ActiveSheet,我们不是针对 编码,而是针对 进行编码Worksheet,因为我们知道我们期望使用的特定工作表是一个Worksheet对象。
Dim Sheet As Worksheet
Set Sheet = ActiveSheet
现在,当我们键入 时Sheet.,我们是早期绑定的(所涉及的类型在编译时是已知的和解析的)并且提供了所有可用成员的列表,这很有帮助:

每次访问返回 anObject或 a的成员(函数、属性)时,对其进行的Variant任何成员调用都将是后期绑定的。
努力停留在早期绑定领域:根据需要声明局部变量,以便编译器能够“看到”并验证所有内容!尝试输入下面的代码来感受不同 - 每当您输入一个.点但没有出现任何内容时,这表明编译器正在忽略正在发生的事情,您可能会将编译时错误转移到运行时:
MsgBox ActiveSheet.DisplayRightToLeft '<~ late bound
Dim Sheet As Worksheet
Set Sheet = ActiveSheet
MsgBox Sheet.DisplayRightToLeft '<~ early bound