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

时间:2018-09-08 01:23:18

标签: vba excel-vba

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

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

这两个属性之间的区别是什么?

1 个答案:

答案 0 :(得分:6)

技巧问题。如果检查fm20.dll(或VBE的对象浏览器)中的CommandButton共同类定义,您会发现它没有 拥有

CommandButton in Object Browser

ActiveX控件是在运行时通过扩展来组合的,因此实际上是在驱动控件在电子表格或Text(或其他任何方式)中嵌入的特定属性由“拥有”对象的OLE容器提供。如果考虑一下,这在一定程度上是有意义的-为什么UserForm应该关心它的CommandButtonLeft属性是什么?您永远不需要拥有不是其他父窗口或容器的子项的Top,并且CommandButton也不应该确定它在窗口中的位置-那是窗户的工作。这是他们没有公共构造函数的部分原因:

CommandButton

如果能够实例化无父母的Dim example As CommandButton Set example = New CommandButton '<-- Nope. ,您会发现设置按钮上文本的唯一方法是设置CommandButton属性。这是因为在深入的Windows API级别上,它是一个窗口(因为它具有hWnd),并且约定是Windows具有.Caption属性。 显示的方式特定于实现。在这种特定情况下,它们可以互换使用,但是Caption属性是“真实的”,而.Caption属性则反映了它。除非您对它所做的事情极其奇怪(例如获取其hWnd并直接与Windows API结合使用),否则它们在所有意图和目的上都是同一件事。