Excel 中 Application.ActiveSheet 的所有属性 - 对象浏览器未列出成员的属性
All properties of Application.ActiveSheet in Excel - Object Browser does not list the properties of Members
Microsoft 文档没有列出 Object Application.ActiveSheet
的所有属性:
https://docs.microsoft.com/en-us/office/vba/api/excel.application.activesheet
它只包含了一些属性,例如:ActiveSheet.Name
。但是从我在互联网上找到的 VBA 脚本中,我知道还有更多属性,例如: ActiveSheet.Type
所以我想也许我可以用这个 VBA 代码列出它们:来自:VBA collection: list of keys
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 属性的列表。因为我只需要知道活动 Sheet 的文本方向,就像它是从左到右或从右到左。
I just want a list of all ActiveSheet properties
您无法使用 100% VBA 代码轻松地以编程方式获得它,VBA 的 反射 功能几乎为零。
现在,假设我们不是寻找一种编程方式来检索对象属性,下面是如何使用对象浏览器来获取您要查找的内容。
首先,right-click 对象浏览器中的任意位置和 select“显示隐藏成员”选项以显示您正在查看的库的全部范围。这会影响编辑代码时的姓名列表下拉列表:现在您将看到隐藏的成员。
Excel 类型库中的一个隐藏模块,是一个名为 Global
的模块,具有隐藏的 _Global
接口:
那个隐藏的全局模块是你输入 MsgBox ActiveSheet.Name
的方式,它“正常工作”(假设 是 和 ActiveSheet
- 它总是会崩溃当您正在使用的 Application
实例中没有打开活动工作簿时出现错误 91),即使您没有指定 Workbook
您正在使用的内容:隐含地,ActiveSheet
正在处理 ActiveWorkbook
是什么。
所以ActiveSheet
是一个属性,不是一个对象。 returns是一个属性对象,但是它声明的类型是Object
.
这意味着您直接针对 ActiveSheet
进行的任何成员调用都是隐含的 late-bound:您可以键入 MsgBox ActiveSheet.Naem
并且 VBA 将愉快地编译拼写错误(Option Explicit
不能在这里救你),并且只会在 run-time 处爆炸并出现错误 438“我找不到那个 属性!”。
为了知道 ActiveSheet
有什么属性,我们需要知道我们正在查看的 run-time 类型。由于 Workbook
对象中的 sheet 可以是 Worksheet
、Chart
或其他几种遗留“sheet”对象,因此确实存在在 compile-time 没有成员可访问,因为在 compile-time ActiveSheet
只是一个指向 Object
的指针,只有在 [=88] 才知道是什么类型的对象=].
因此,我们没有针对 ActiveSheet
进行编码,而是针对 Worksheet
进行编码,因为我们知道我们期望使用的特定 sheet 是一个 Worksheet
对象.
Dim Sheet As Worksheet
Set Sheet = ActiveSheet
现在,当我们键入 Sheet.
时,我们是 early-bound(所涉及的类型是已知的并在 compile-time 处解析)并提供了所有可用成员的列表:
每次访问 returns 一个 Object
或 Variant
的成员(函数,属性)时,针对它的任何成员调用都将是 late-bound.
努力保持在 early-bound 境界:根据需要声明局部变量,以便编译器能够“看到”并验证所有内容!尝试 键入 下面的代码以 感受 差异 - 每当您键入 .
点但什么也没有出现时,这就是编译器的标志看不到正在发生的事情,您可能将 compile-time 错误移至 run-time:
MsgBox ActiveSheet.DisplayRightToLeft '<~ late bound
Dim Sheet As Worksheet
Set Sheet = ActiveSheet
MsgBox Sheet.DisplayRightToLeft '<~ early bound
Microsoft 文档没有列出 Object Application.ActiveSheet
的所有属性:
https://docs.microsoft.com/en-us/office/vba/api/excel.application.activesheet
它只包含了一些属性,例如:ActiveSheet.Name
。但是从我在互联网上找到的 VBA 脚本中,我知道还有更多属性,例如: ActiveSheet.Type
所以我想也许我可以用这个 VBA 代码列出它们:来自:VBA collection: list of keys
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 属性的列表。因为我只需要知道活动 Sheet 的文本方向,就像它是从左到右或从右到左。
I just want a list of all ActiveSheet properties
您无法使用 100% VBA 代码轻松地以编程方式获得它,VBA 的 反射 功能几乎为零。
现在,假设我们不是寻找一种编程方式来检索对象属性,下面是如何使用对象浏览器来获取您要查找的内容。
首先,right-click 对象浏览器中的任意位置和 select“显示隐藏成员”选项以显示您正在查看的库的全部范围。这会影响编辑代码时的姓名列表下拉列表:现在您将看到隐藏的成员。
Excel 类型库中的一个隐藏模块,是一个名为 Global
的模块,具有隐藏的 _Global
接口:
那个隐藏的全局模块是你输入 MsgBox ActiveSheet.Name
的方式,它“正常工作”(假设 是 和 ActiveSheet
- 它总是会崩溃当您正在使用的 Application
实例中没有打开活动工作簿时出现错误 91),即使您没有指定 Workbook
您正在使用的内容:隐含地,ActiveSheet
正在处理 ActiveWorkbook
是什么。
所以ActiveSheet
是一个属性,不是一个对象。 returns是一个属性对象,但是它声明的类型是Object
.
这意味着您直接针对 ActiveSheet
进行的任何成员调用都是隐含的 late-bound:您可以键入 MsgBox ActiveSheet.Naem
并且 VBA 将愉快地编译拼写错误(Option Explicit
不能在这里救你),并且只会在 run-time 处爆炸并出现错误 438“我找不到那个 属性!”。
为了知道 ActiveSheet
有什么属性,我们需要知道我们正在查看的 run-time 类型。由于 Workbook
对象中的 sheet 可以是 Worksheet
、Chart
或其他几种遗留“sheet”对象,因此确实存在在 compile-time 没有成员可访问,因为在 compile-time ActiveSheet
只是一个指向 Object
的指针,只有在 [=88] 才知道是什么类型的对象=].
因此,我们没有针对 ActiveSheet
进行编码,而是针对 Worksheet
进行编码,因为我们知道我们期望使用的特定 sheet 是一个 Worksheet
对象.
Dim Sheet As Worksheet
Set Sheet = ActiveSheet
现在,当我们键入 Sheet.
时,我们是 early-bound(所涉及的类型是已知的并在 compile-time 处解析)并提供了所有可用成员的列表:
每次访问 returns 一个 Object
或 Variant
的成员(函数,属性)时,针对它的任何成员调用都将是 late-bound.
努力保持在 early-bound 境界:根据需要声明局部变量,以便编译器能够“看到”并验证所有内容!尝试 键入 下面的代码以 感受 差异 - 每当您键入 .
点但什么也没有出现时,这就是编译器的标志看不到正在发生的事情,您可能将 compile-time 错误移至 run-time:
MsgBox ActiveSheet.DisplayRightToLeft '<~ late bound
Dim Sheet As Worksheet
Set Sheet = ActiveSheet
MsgBox Sheet.DisplayRightToLeft '<~ early bound