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

Chr*_*isB 5 vba excel-vba

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

Debug.Print ActiveSheet.Buttons("My_Command_Button").Caption
Debug.Print ActiveSheet.Buttons("My_Command_Button").Text
Run Code Online (Sandbox Code Playgroud)

这两个属性之间有什么区别,区别是否重要?

Com*_*ern 6

特技问题.如果检查CommandButton中FM20.DLL共类定义(或VBE的对象浏览器,你会发现它不具备一个Text特性:

对象浏览器中的CommandButton

ActiveX控件在运行时通过扩展进行合成,因此特定于控件如何嵌入电子表格的属性,或者UserForm(或其他任何事情)实际上由"拥有"的OLE容器驱动物体.它使一定量的意义,如果你仔细想想-为什么要CommandButton关心它的Left还是Top财产?您不应该需要一个CommandButton不是另一个父窗口或容器的子项,并且它不负责CommandButton确定它在窗口中的位置 - 这是窗口的工作.这是他们没有公共构造函数的部分原因:

Dim example As CommandButton
Set example = New CommandButton     '<-- Nope.
Run Code Online (Sandbox Code Playgroud)

如果你能够实例化一个父母双亡的孤儿CommandButton,你会发现,设置文本按钮上的唯一方法是设置.Caption属性.那是因为在Windows API级别的深层次,它是一个窗口(因为它有一个hWnd),并且约定是Windows具有Caption属性.如何显示是特定于实现的.在这个特定的例子中,它们可以互换地处理,但.Caption属性是"真实的",.Text属性反映它.除非你正在做一些非常奇怪的事情(比如获取它的hWnd并直接使用Windows API),它们的用途和目的都是相同的.