Application.Caption行为:同样返回Window标题

时间:2018-06-06 14:28:21

标签: excel excel-vba vba

根据您是设置还是返回属性,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标题?

1 个答案:

答案 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

可能总是返回正确的结果。