Excel 2016 VBA - 状态栏未显示完整消息

Excel 2016 VBA - status bar not showing complete message

我最近在我的计算机上安装了 Office 365 的最新更新(Windows 10 64 位)。从那以后,我在 Excel 2016 年注意到一件奇怪的事情:状态栏没有显示我在上面显示的完整自定义消息。当文件第一次打开时它显示正常,但是一旦进行了更改,它就不会显示整个消息,而是在最后几个字符应该显示的地方显示“...”。状态栏上还有足够的空间来容纳我的消息的其余部分,所以我不明白为什么会这样。

我创建了一个新文件,看看它是否与我正在处理的特定工作簿有关。它也在新文件上这样做,所以问题似乎与 Excel 本身有关。我在网上寻找解决方案,但找不到任何东西。我什至 post 在其他几个论坛上讨论过这个问题,但没有收到答案,所以我想在这里试试。 (请参阅我的 post 的结尾,了解 link 到其他论坛 post 的内容。)

这是我的测试文件中发生的事情的摘要,以及对文件本身的 link。

当我第一次打开我的测试文件时,它会正常显示状态栏消息。 StatusBarPic1

我这样做是为了让显示的消息根据单元格 A1 中的值发生变化。打开后,单元格 A1 为空。然后我给它输入一个值,状态栏就改变了它应该有的样子。 StatusBarPic2

然后我删除了单元格A1中的值,状态栏应该恢复到文件第一次打开时的样子。然而,它没有。它不会显示最后两个字符,而是显示“...”StatusBarPic3

有谁知道它为什么这样做?第一次打开工作簿时它会很好地显示消息,但在使用文件后却不会显示完全相同的消息,这似乎很奇怪。

这里是link下载测试文件,如果你想自己测试的话。我很想知道它是否不会在 Excel 的其他版本上执行此操作。也许这是 Excel 2016 最近更新的新内容?

Test Excel file

最后,这是我在其他论坛上针对同一问题发表的 post。 Link to post on Mr. Excel forums Link to post on VBA Express forums

编辑:根据要求,这是我放入测试文件中的代码。

在 Sheet1 模块中:

Private Sub Worksheet_Change(ByVal Target As Range)

Application.StatusBar = MessageToDisplay

End Sub

在本工作簿模块中:

Private Sub Workbook_Open()

Application.StatusBar = MessageToDisplay

End Sub

在 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

在我正在处理的工作簿中,我正在写入状态栏的字符串末尾似乎没有空白 space,但我仍然得到“... " 而不是我消息的最后两个字符。

我单步执行代码并将带有消息的字符串放入手表 window。在代码接近尾声时,我对手表进行了截图window。这是字符串的末尾。 Watchlist image

然而,这是状态栏上显示的内容。 Status Bar image

在这个特定的工作簿中,用户通过选中一些框来决定在状态栏上显示哪些数据。下面是确定状态栏上实际显示内容的代码。 MessageToDisplay 字符串在任何情况下都不应该在末尾有一个空白 space。

    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 个字符。

如果文本末尾有空格,似乎必须执行上述行为。 我能够通过以下方式修复它

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

我遇到了类似的问题。只需先清除状态栏即可解决问题。

Application.StatusBar = "" 
Application.StatusBar = msg