我已经有近一年的关于StatusBar的非常奇怪的Excel怪癖了,并且想知道是否有人有任何见解和可能的解决方案。关于如何更新StatusBar的帖子大约有十几个,但没有什么特别与它的外观有关。我相信一个用户询问有关更改字体颜色的问题,但解决方案是使用StatusBar以外的其他内容。
无论如何,我使用宏来调用单独的建模软件加载项。我们在列中组织了大量案例,每个案例都可能需要“运行”。几次。因此,我使用StatusBar让我知道它所在的列,大小写#,以及针对该特定情况的迭代。它看起来像这样......
这是我用来填充StatusBar的单行代码:
Application.StatusBar = "Processing column " & Split(Cells(1, icol).Address(True, False), "$")(0) & ", Case " & iCase & ", Iteration (Loop) " & j & " of " & icoljcount
我遇到的问题是外观在前一张图片(大字体)和下一张图片(小字体)之间来回反弹:
我在屏幕截图中包含了几个标签,因此您可以看到尺寸变化。我不知道为什么会这样做。它并没有真正影响这个功能,除非它让你的眼睛跳起来,如果你正在观看它。而且我看了很多。这很烦人。如果我无法解决这个问题,我会毫不犹豫地向StatusBar添加更多有用的信息。
我输入了一个代码破解程序并逐步查看是否可以识别每个字体大小出现时正在执行的行。当我在我提供的上面的线上击中F8时出现了两个出现。大版本首先出现,但在切换到小版本之前只持续了一秒钟。当我的宏运行时,大版本会持续一整秒 - 我相信这是因为下一行代码调用了外部程序,触发了电子表格的重新计算,而且它是一个非常大的电子表格。 / p>
我可以通过添加100毫秒的睡眠来减轻烦恼。在调用外部程序之前。这可能会让Excel在使用recalc陷入困境之前需要翻转到小字体版本。但老实说,我不知道这会不会或多或少会让人讨厌。
万一重要,我使用Windows 7,2010 Excel 32位," Silver" Excel主题,享受高级生活,但不是在工作,或者这不会让我感到烦恼。
很抱歉这个冗长的问题。提前感谢任何破解这个开放的人。
答案 0 :(得分:3)
我在一个新子中复制了我的宏,以便将其修剪到人们跟随循环所需的最小值。要做出一个很长的“回答”简短(呃),唯一重要的是:
Application.ScreenUpdating = False
在我准备这个答案时,我学到了更多。我的问题可能仍然是ScreenUpdating和调用外部程序的组合。这是一个带有循环的非常简单的StatusBar的示例代码......
Sub StatusBarTest()
Dim i As Integer
Application.DisplayStatusBar = True
Application.ScreenUpdating = False '<-- toggle on/off to see the effects
For i = 1 To 5
Application.StatusBar = "Loop #" & i & " of 5. Extremely long StatusBar text so as to amplify a font size change."
'In my full loop this is where my Application.Run statement goes.
Application.Wait (Now + TimeValue("00:00:02")) '2 second delay so user has a chance to witness StatusBar
Next i
Application.StatusBar = False
Application.ScreenUpdating = True
End Sub
当我从Excel运行此子程序时,我看不到任何字体切换。但是当我从VBA使用F8单步执行代码时,每次更新StatusBar时,我都会看到较大的字体,如上所述,IF屏幕更新已关闭。如果我注释掉屏幕更新行,那么即使单步执行代码,我也看不到字体切换。
我真的不明白为什么VBA / Excel表现得像这样,但我相信我已经确定了原因/结果模式。