Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 标题行为:同时返回窗口标题_Excel_Vba - Fatal编程技术网

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是的,基本上是这样。我无法想象任何技术上的原因为什么它必须是这样,所以它必须是微软的决定(或一个错误)。这能解决你的问题吗?