vba - VBA 中 CommandButton 的 .caption 和 .text 属性有什么区别?

标签 vba excel

我在 Excel 中有一个 CommandButton,发现 .Caption.Text 属性返回相同的按钮可见文本。这是我用来查看值的代码:

Debug.Print ActiveSheet.Buttons("My_Command_Button").Caption
Debug.Print ActiveSheet.Buttons("My_Command_Button").Text

这两个属性之间有什么区别?这种区别重要吗?

最佳答案

诡计问题。如果您检查 fm20.dll(或 VBE 的对象浏览器)中的 CommandButton coclass 定义,您会发现它没有 Text 属性:

CommandButton in Object Browser

ActiveX 控件是在运行时通过扩展组合而成​​的,因此特定于控件如何嵌入到电子表格或 UserForm(或与此相关的任何其他内容)中的属性是实际上是由“拥有”该对象的 OLE 容器驱动的。如果您考虑一下,这是有一定道理的 - 为什么 CommandButton 应该关心它的 LeftTop 属性是什么?您不需要有一个不是另一个父窗口或容器的子级的 CommandButton,并且 CommandButton 不负责确定在哪里它在窗口内——这就是窗口的工作。这是他们没有公共(public)构造函数的部分原因:

Dim example As CommandButton
Set example = New CommandButton     '<-- Nope.

如果您能够实例化一个无父CommandButton,您会发现在按钮上设置文本的唯一方法是设置 .Caption 属性。这是因为在 Windows API 的深处,它是一个窗口(因为它有一个 hWnd),并且窗口的惯例是有一个 Caption 属性。如何显示是特定于实现的。在此特定实例中,它们可以互换对待,但 .Caption 属性是“真实的”,而 .Text 属性反射(reflect)了它。除非您用它做一些极其奇怪的事情(例如获取它的 hWnd 并直接通过 Windows API 使用它),否则它们在所有意图和目的上都是相同的。

关于vba - VBA 中 CommandButton 的 .caption 和 .text 属性有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52231210/

相关文章:

vba - Rubberduck UI 子菜单被禁用

vba - 函数调用另一个函数但得到 "stuck"

sql - 如何在VBA中获取列名?

vba - 更新标题搞乱了我的页面方向和缩放

excel - 删除空白 Excel 数据透视表条目

python - 使用 Python 的 xlsxwriter 在 Excel 中的字符串条件格式 "equal to"

excel - 仅将填充了单元格的电子表格保存为 PDF

excel - 为什么这个简单的 VBA 代码在 Excel 中不起作用?

vba - 我应该如何用 vba 完成这个复杂的字符串替换?

excel - 为什么 ADO 连接即使在只读状态下仍会创建 "ldb"锁定文件?