Microsoft Docs没有列出Object的所有属性Application.ActiveSheet
:https :
//docs.microsoft.com/zh-cn/office/vba/api/excel.application.activesheet
它仅包含一些属性,例如:ActiveSheet.Name
。但是从我在互联网上找到的VBA脚本中,我知道还有更多属性,例如:ActiveSheet.Type
所以我想也许我可以使用以下VBA代码列出所有内容:来自:VBA集合:键列表
Sub AktivSheet()
Dim key As Variant
For Each key In Application.ActiveSheet
Debug.Print "Key: " & key, "Value: " & Application.ActiveSheet.Item(key)
Next
End Sub
但这没有用,Microsoft Docs建议使用对象浏览器。但是对象浏览器没有列出Application.ActiveSheet的属性:
我没主意了!我只想要所有ActiveSheet属性的列表。因为我只需要知道活动表的文本方向,就好像它是从左到右还是从右到左。
我只想要所有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
对象可以是一个Worksheet
,一个Chart
,或几个其他类型的传统“表”对象,的确没有在编译时访问成员,因为在编译时ActiveSheet
只是一个指针Object
,什么仅在运行时才知道的对象类型。
因此ActiveSheet
,我们无需针对进行编码,而是针对进行编码Worksheet
,因为我们知道我们期望使用的特定工作表是一个Worksheet
对象。
Dim Sheet As Worksheet
Set Sheet = ActiveSheet
现在,当我们输入时Sheet.
,我们就处于早期绑定状态(所涉及的类型是已知的,并且在编译时已解析),并且将有用地提供所有可用成员的列表:
每次您访问返回aObject
或a的成员(函数,属性)时,对其进行的Variant
任何成员调用都将被延迟。
力争停留在早期绑定的领域:根据需要声明局部变量,以便编译器可以“查看”并验证所有内容!尝试键入以下代码来体会其中的区别-每当您键入一个.
点但什么都没出现时,这表明编译器正在忽略正在发生的事情,并且可能会将编译时错误转移到运行时:
MsgBox ActiveSheet.DisplayRightToLeft '<~ late bound
Dim Sheet As Worksheet
Set Sheet = ActiveSheet
MsgBox Sheet.DisplayRightToLeft '<~ early bound