首页 > 解决方案 > Application.Caption 行为:也返回窗口标题

问题描述

Application.Caption 的行为会根据您是设置还是返回属性而有所不同。

例如,以下子:

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)

...但是,如果实际的 Caption 包含这样的字符串,这将失败。例如,如果您这样做:

Application.Caption = “First Part – Second Part”

...然后如上所述拆分将排除第二部分。

有谁知道为什么会出现这种行为?有没有办法只返回实际的 Application.Caption,而不包括分隔符和窗口标题?

标签: excelvba

解决方案


您可以使用...解决此问题。</p>

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

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


推荐阅读