Поведение Application.Caption: также возвращает заголовок окна - PullRequest
0 голосов
/ 06 июня 2018

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 голосов
/ 06 июня 2018

Вы можете обойти это с помощью ...

Debug.Print Right$(Application.Caption, Len(Application.Caption) - Len(ActiveWindow.Caption) - 3)

, чтобы получить заголовок, который вы установили ранее.

Почему он возвращает что-то еще, чем было установлено ранее?
Поскольку Microsoft сделала это таким образом.


Различные версии, похоже, имеют разный порядок, поэтому

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

всегда может вернуть правильный результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...