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

时间:2018-10-05 22:17:40

标签: excel excel-vba statusbar

我最近在计算机(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个字符。

1 个答案:

答案 0 :(得分:1)

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

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