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

Posted

技术标签:

【中文标题】Excel 2016 VBA - 状态栏未显示完整消息【英文标题】:Excel 2016 VBA - status bar not showing complete message 【发布时间】:2019-03-11 10:48:03 【问题描述】:

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

我创建了一个新文件以查看它是否与我正在处理的特定工作簿有关。它也在新文件上执行此操作,因此问题似乎与 Excel 本身有关。我在网上寻找解决方案,但找不到任何东西。我什至在其他几个论坛上发布了关于此的信息,但没有收到答案,所以我想我会在这里尝试。 (有关其他论坛帖子的链接,请参见我帖子的末尾。)

这是我的测试文件中发生的情况的摘要,以及文件本身的链接。

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

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

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

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

如果您想自己测试,这里是下载测试文件的链接。我很想知道它是否在其他版本的 Excel 上不这样做。也许这是最近更新的 Excel 2016 的新内容?

Test Excel file

最后,这是我在其他论坛上发布的关于同一问题的帖子。 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

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

我单步执行代码并将带有消息的字符串放入监视窗口。在代码接近尾声时,我截取了监视窗口的屏幕截图。这是字符串的最后。 Watchlist image

但这是状态栏上显示的内容。 Status Bar 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 个字符。

【问题讨论】:

我可以重现这个 Excel 365。只是补充一下,如果您再次在 A1 中输入一个值,它将显示完整的消息。如果您再次删除它,您将收到最后带有点的消息。有趣,奇怪,但我不会那么在意。 【参考方案1】:

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

Application.StatusBar = "" 
Application.StatusBar = msg

【讨论】:

刚试过这个,它似乎对我有用。谢谢!!【参考方案2】:

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

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

【讨论】:

感谢您抽出宝贵的时间来尝试这个。不幸的是,在我正在创建的实际工作簿中,我试图显示的字符串末尾似乎没有空格,但在消息结束之前我仍然得到三个点。我将创建一个答案以提供更多详细信息。

以上是关于Excel 2016 VBA - 状态栏未显示完整消息的主要内容,如果未能解决你的问题,请参考以下文章

excel等于某个值自动 隐藏/显示 整行 求教VBA代码

如何在 Excel 2016 VBA 编辑器中启用 Unicode

Excel VBA 在 Excel 2016 中按多个条件进行多行排序

根据 Excel VBA 中的 ComboBox 显示/隐藏 WBS 项目

打开 Excel VBA 2016 .xlsm 文件

Excel VBA 根据某些遭遇删除行