根据您是设置还是返回属性,Application.Caption的行为会有所不同。
例如,以下Sub:
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”
...然后如上所述拆分将排除第二部分。
有谁知道为什么会出现这种行为?有没有办法只返回实际的Application.Caption,而不包括分隔符和Window标题?
答案 0 :(得分:1)
您可以使用...
解决此问题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
可能总是返回正确的结果。