Excel 2016 VBA - в строке состояния не отображается полное сообщение - PullRequest
0 голосов
/ 06 октября 2018

Я недавно установил самые последние обновления для Office 365 на мой компьютер (Windows 10 64-bit).С тех пор в Excel 2016 я заметил странную вещь: в строке состояния не отображается полное пользовательское сообщение, которое я отображаю на нем.Когда файл открывается впервые, он отображается нормально, но после внесения изменений он не отображает все сообщение, а вместо этого показывает «...», где должна быть последняя пара символов.В строке состояния все еще достаточно места для остальной части моего сообщения, поэтому я не могу понять, почему это происходит.

Я создал новый файл, чтобы посмотреть, связано ли это сконкретная рабочая тетрадь, над которой я работал.Он сделал это и с новым файлом, поэтому проблема, похоже, связана с самим Excel.Я искал в Интернете решение, но не смог ничего найти.Я даже написал на нескольких других форумах об этом, но не получил ответа, поэтому подумал, что попробую здесь.(См. В конце моего сообщения ссылки на эти другие сообщения на форуме.)

Вот краткое изложение того, что происходит в моем тестовом файле, а также ссылка на сам файл.

Когда я впервые открываю свой тестовый файл, он показывает сообщение в строке состояния, как и должно быть. StatusBarPic1

Я сделал так, чтобы отображаемое сообщение менялось в зависимости от значения в ячейке A1.При открытии ячейка A1 пуста.Затем я поместил в него значение, и строка состояния изменилась так, как и должна была. StatusBarPic2

Затем я удалил значение в ячейке A1, и строка состояния должна была вернуться к тому же состоянию, которое было при первом открытии файла.Однако это не так.Он не отображал бы последние два символа, а вместо этого отображал "..." StatusBarPic3

Кто-нибудь знает, почему он это делает?Кажется странным, что при первом открытии рабочей книги это сообщение будет отображаться нормально, но не будет отображаться точно такое же сообщение после использования файла.

Вот ссылка для загрузки тестового файла, если выхотел бы проверить это самостоятельно.Мне было бы интересно услышать, если это не делает это на других версиях Excel.Может быть, это что-то новое для недавнего обновления Excel 2016?

Тестовый файл Excel

Наконец, вот сообщения, которые я сделал на других форумах по этой же проблеме. Ссылка на сообщение на форумах Mr. Excel Ссылка на сообщение на форумах VBA Express

РЕДАКТИРОВАТЬ: согласно запросу, вот код, который я поместил в свой тестовый файл.

In Sheet1 Module:

Private Sub Worksheet_Change(ByVal Target As Range)

Application.StatusBar = MessageToDisplay

End Sub

In ThisWorkbook Module:

Private Sub Workbook_Open()

Application.StatusBar = MessageToDisplay

End Sub

In Module1 Модуль:

Function MessageToDisplay() As String

Dim ValueCellA1 As String

ValueCellA1 = ThisWorkbook.Sheets("Sheet1").Range("A1").Value

MessageToDisplay = "This is a test to see how long of a message can be displayed on the status bar. I have noticed in Excel 2016 (most current version) that there seems to be a limit.  The value of Cell A1 is: " & ValueCellA1

End Function

InВ книге, над которой я работаю, в конце строки, которую я записываю в строку состояния, у меня нет пустого места, но я все равно получаю «...» вместо двух последних символов моего сообщения..

Я прошел по коду и поместил строку с сообщением в окно просмотра.В конце кода я сделал скриншот окна просмотра.Вот самый конец строки. Watchlist image

Тем не менее, вот что отображается в строке состояния. Изображение строки состояния

В этой конкретной книге пользователь решает, какие данные отображать в строке состояния, установив некоторые флажки.Вот код, который определяет, что на самом деле отображается в строке состояния.Ни в коем случае строка MessageToDisplay никогда не должна иметь пробела в конце.

    If .Range("Options_StatusBar_ShowTotal1").Value = "YES" Then
        MessageToDisplay = "Total1: " & Total1
        FirstPartWritten = True
    End If

    If .Range("Options_StatusBar_ShowTotal2").Value = "YES" Then
        If FirstPartWritten = False Then
            MessageToDisplay = "Total2: " & Total2
            FirstPartWritten = True
        Else
            MessageToDisplay = MessageToDisplay & "     " & "Total2: " & Total2
        End If
    End If

    If .Range("Options_StatusBar_ShowTotal2Var").Value = "YES" Then
        If FirstPartWritten = False Then
            MessageToDisplay = "Total2 Var: " & Total2Var
            FirstPartWritten = True
        Else
            MessageToDisplay = MessageToDisplay & ", Var: " & Total2Var
        End If
    End If

    If .Range("Options_StatusBar_ShowTotal3").Value = "YES" Then
        If FirstPartWritten = False Then
            MessageToDisplay = "Total3: " & Total3
            FirstPartWritten = True
        Else
            MessageToDisplay = MessageToDisplay & "     Total3: " & Total3
        End If
    End If

    If .Range("Options_StatusBar_ShowTotal3Var").Value = "YES" Then
        If FirstPartWritten = False Then
            MessageToDisplay = "Total3 Var: " & Total3Var
            FirstPartWritten = True
        Else
            MessageToDisplay = MessageToDisplay & ", Var: " & Total3Var
        End If
    End If

Кроме того, сообщение, которое я пытаюсь отобразить, определенно не должно превышать 255 символов.

1 Ответ

0 голосов
/ 06 октября 2018

Кажется, что описанное выше поведение имеет отношение к тому, если в конце текста есть пробелы.Я смог исправить это следующим образом

Function MessageToDisplay() As String

Dim ValueCellA1 As String

    ValueCellA1 = WorksheetFunction.Trim(ThisWorkbook.Sheets("Tabelle2").Range("A1").Value)
    If Len(ValueCellA1) = 0 Then
        MessageToDisplay = "This is a test to see how long of a message can be displayed on the status bar. I have noticed in Excel 2016 (most current version) that there seems to be a limit.  The value of Cell A1 is:"
    Else
        MessageToDisplay = "This is a test to see how long of a message can be displayed on the status bar. I have noticed in Excel 2016 (most current version) that there seems to be a limit.  The value of Cell A1 is: " & ValueCellA1
    End If

End Function

Я также получил отображение точек при использовании Application.StatusBar = "Test ".Кажется, вы должны убедиться, что у вас нет пробелов в конце текста, который вы хотите отобразить.

Обновление Я думаю, максимальная длина текста для строки состояния255

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