近一年来,我一直生活在关于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时出现了两个出现。大版本首先出现,但在切换到小版本之前只持续了一秒钟。当我的宏运行时,大版本会持续一整秒 - 我相信这是因为下一行代码调用外部程序,触发电子表格的重新计算,这是一个非常大的电子表格。
在调用外部程序之前,我可以通过添加100毫秒的“睡眠”来减轻烦恼。这可能会让Excel在使用recalc陷入困境之前需要翻转到小字体版本。但老实说,我不知道这会不会或多或少会让人讨厌。
万一重要的是,我使用Windows 7,2010 Excel 32位,“银色”Excel主题,享受高级生活,但不工作,或者这不会让我烦恼。
抱歉这个冗长的问题。提前感谢任何破解这个开放的人。
我在一个新子中复制了我的宏,以便将其修剪到人们跟随循环所需的最小值。要做出一个很长的“回答”简短(呃),唯一重要的是:
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表现得像这样,但我相信我已经确定了因果模式。