Excel 标题行为:同时返回窗口标题
根据您是设置还是返回属性,标题的行为会有所不同 例如,以下子项:Excel 标题行为:同时返回窗口标题,excel,vba,Excel,Vba,根据您是设置还是返回属性,标题的行为会有所不同 例如,以下子项: Sub SetCap() With Application Debug.Print .Caption ' Returns the default: something like "Microsoft Excel - Book1" .Caption = "MyCaption" ' Set the .Caption property to a custom string .Win
Sub SetCap()
With Application
Debug.Print .Caption ' Returns the default: something like "Microsoft Excel - Book1"
.Caption = "MyCaption" ' Set the .Caption property to a custom string
.Windows(1).Caption = "MyWindow" ' Also customise the Window caption
Debug.Print .Caption ' This still returns "MyCaption - MyWindow"
End With
End Sub
我知道应用程序标题和窗口标题是两个独立的东西,默认情况下,它们将一起出现在应用程序标题中,以“-”分隔
您可以将任何喜欢的字符串分配给Application.Caption。
然而,奇怪的是,当返回Application.Caption时,文本将包括分隔符以及窗口标题,而不是返回您刚才设置的字符串
显然,您可以将字符串拆分为“-”并返回第一部分:
Dim Arr As Variant
Arr = split(Application.Caption, “ - ”)
Debug.Print Arr(0)
…但是,如果实际标题包含这样的字符串,则此操作将失败。例如,如果您这样做了:
Application.Caption = “First Part – Second Part”
。。。然后按上述方式拆分将排除第二部分
有人知道为什么会出现这种行为吗?有没有办法只返回实际的应用程序.Caption,而不包括分隔符和窗口标题?您可以使用
Debug.Print Right$(Application.Caption, Len(Application.Caption) - Len(ActiveWindow.Caption) - 3)
以获取以前设置的标题
为什么它返回的不是以前设置的内容?因为微软就是这样做的
不同的版本似乎有不同的顺序,所以
If Left$(Application.Caption, Len(ActiveWindow.Caption)) = ActiveWindow.Caption Then
Debug.Print Right$(Application.Caption, Len(Application.Caption) - Len(ActiveWindow.Caption) - 3)
Else
Debug.Print Left$(Application.Caption, Len(Application.Caption) - Len(ActiveWindow.Caption) - 3)
End If
可能总是返回正确的结果。@chrismeville我的Excel版本显示“MyBook-MyApplication”。因此,您可能需要为不同的Excel版本实施不同的选项(我在Windows 10上使用德语Excel 2016)。如果在Excel中是相反的,当然是
Left$
,然后。或者测试应用程序的Left$
是否与ActiveWindow.Caption
相同。然后使用Right$
,否则使用Left$
(请参见上面的编辑)。是的,在英文Excel中是应用程序窗口。有趣的是它们是不同的。好的,谢谢。所以基本的答案是“微软做到了”:@chrismeville是的,基本上是这样。我无法想象任何技术上的原因为什么它必须是这样,所以它必须是微软的决定(或一个错误)。这能解决你的问题吗?