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 最近更新的新内容?
最后,这是我在其他论坛上针对同一问题发表的 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
我最近在我的计算机上安装了 Office 365 的最新更新(Windows 10 64 位)。从那以后,我在 Excel 2016 年注意到一件奇怪的事情:状态栏没有显示我在上面显示的完整自定义消息。当文件第一次打开时它显示正常,但是一旦进行了更改,它就不会显示整个消息,而是在最后几个字符应该显示的地方显示“...”。状态栏上还有足够的空间来容纳我的消息的其余部分,所以我不明白为什么会这样。
我创建了一个新文件,看看它是否与我正在处理的特定工作簿有关。它也在新文件上这样做,所以问题似乎与 Excel 本身有关。我在网上寻找解决方案,但找不到任何东西。我什至 post 在其他几个论坛上讨论过这个问题,但没有收到答案,所以我想在这里试试。 (请参阅我的 post 的结尾,了解 link 到其他论坛 post 的内容。)
这是我的测试文件中发生的事情的摘要,以及对文件本身的 link。
当我第一次打开我的测试文件时,它会正常显示状态栏消息。 StatusBarPic1
我这样做是为了让显示的消息根据单元格 A1 中的值发生变化。打开后,单元格 A1 为空。然后我给它输入一个值,状态栏就改变了它应该有的样子。 StatusBarPic2
然后我删除了单元格A1中的值,状态栏应该恢复到文件第一次打开时的样子。然而,它没有。它不会显示最后两个字符,而是显示“...”StatusBarPic3
有谁知道它为什么这样做?第一次打开工作簿时它会很好地显示消息,但在使用文件后却不会显示完全相同的消息,这似乎很奇怪。
这里是link下载测试文件,如果你想自己测试的话。我很想知道它是否不会在 Excel 的其他版本上执行此操作。也许这是 Excel 2016 最近更新的新内容?
最后,这是我在其他论坛上针对同一问题发表的 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