温馨提示:本文翻译自stackoverflow.com,查看原文请点击:vba - All properties of Application.ActiveSheet in Excel
excel object objectbrowser vba

vba - Excel中Application.ActiveSheet的所有属性

发布于 2021-01-20 13:46:17

Microsoft Docs没有列出Object的所有属性Application.ActiveSheethttps : //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属性的列表。因为我只需要知道活动表的文本方向,就好像它是从左到右还是从右到左。

查看更多

提问者
Shayan
被浏览
0
Mathieu Guindon 2020-09-22 22:44

我只想要所有ActiveSheet属性的列表

使用100%VBA代码很难以编程方式获得它,VBA几乎具有零反射功能。

现在,假设我们不是在寻找一种编程的方式来检索对象属性,下面是使用对象浏览器获取所需内容的方法。

首先,在对象浏览器中的任意位置单击鼠标右键,然后选择“显示隐藏的成员”选项,以显示正在查看的库的全部宽度。这会在编辑代码时影响名称列表下拉列表:现在将向您显示隐藏成员。

Excel类型库中的隐藏模块之一是名为的模块Global,具有隐藏_Global接口:

Excel的全局模块

隐藏的全局模块是你可以键入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.,我们就处于早期绑定状态(所涉及的类型是已知的,并且在编译时已解析),并且将有用地提供所有可用成员的列表:

成员下拉列表列出了本地Sheet对象变量的所有成员

每次您访问返回aObject或a的成员(函数,属性)时,对其进行Variant任何成员调用都将被延迟。

力争停留在早期绑定的领域:根据需要声明局部变量,以便编译器可以“查看”并验证所有内容!尝试键入以下代码来体会其中的区别-每当您键入一个.点但什么都没出现时,这表明编译器正在忽略正在发生的事情,并且可能会将编译时错误转移到运行时:

MsgBox ActiveSheet.DisplayRightToLeft '<~ late bound
Dim Sheet As Worksheet
Set Sheet = ActiveSheet
MsgBox Sheet.DisplayRightToLeft '<~ early bound