我没有经验丰富的VBA程序员,我需要社区才能找到Excel的问题。
我的问题是,在Excel中,代码在以下行后立即停止执行:
Application.ScreenUpdating = True
我使用以下来自msdn网站的示例代码:
Dim elapsedTime(2)
Application.ScreenUpdating = True
For i = 1 To 2
If i = 2 Then Application.ScreenUpdating = False
startTime = Time
Worksheets("Sheet1").Activate
For Each c In ActiveSheet.Columns
If c.Column Mod 2 = 0 Then
c.Hidden = True
End If
Next c
stopTime = Time
elapsedTime(i) = (stopTime - startTime) * 24 * 60 * 60
Next i
Application.ScreenUpdating = True
MsgBox "Elapsed time, screen updating on: " & elapsedTime(1) & _
" sec." & Chr(13) & _
"Elapsed time, screen updating off: " & elapsedTime(2) & _
" sec."
来源:http://msdn.microsoft.com/en-us/library/office/ff193498.aspx
但是,Msgbox永远不会被执行,VBA也不会显示任何错误 - 它只是默默地失败。
Anyidea为什么会这样,以及如何解决这个问题?
答案 0 :(得分:3)
这不是答案;像早期的海报一样,我无法让这个例程失败。
首先,我会说这是一段可怕的代码。我无法理解为什么微软发布了这么糟糕的东西。例如:
Dim elapsedTime(2) As Double
)Excel中存在一个我很少遇到的错误,而且几年内都没有。当我遇到它时,我花了很长时间才发现我落后的原因并且忘记记录下次的细节。 Excel有一些错误不会停止并报告错误;相反,它终止当前函数并继续调用例程中的下一个语句。这个子程序已被直接调用,因此它将在没有完成的情况下停止。
我唯一的建议是,计算机上的Sheet1上有一些代码导致此错误。
您似乎认为Application.ScreenUpdating = True
语句失败了。这是可能的但不太可能。根据您的描述,您所知道的是例程没有达到MsgBox
语句。
我怀疑c.Hidden = True
。我已经看到一个问题,询问隐藏列的最大数量,但没有人知道最大值。一个答案是你不能隐藏合并区域的一部分,但我无法复制该错误。看看你的Sheet1:隐藏了一些偶数列而不是全部吗?取消隐藏列,然后重试。例程是否在一致的列中失败?隐藏1,024列之后是否会失败?
祝你有任何调查好运。但是,我建议您放弃这个致命的代码,并接受Application.ScreenUpdating = False
将减少更新活动工作表的任何例程的运行时间。
答案 1 :(得分:1)
在这种情况下,出现了以下问题,乍看之下并未立即找到:
=NOT(IsValidCell(INDIRECT("RC";FALSE)))
baqd代码示例:
Function IsValidCell(ByVal CellValue As String) As Boolean
IsValidCell = False
If CellValue Like "#####" Then
IsValidColumn = True ' Notice bug
Else ' Notice second bug
End Function
结果是,当excel尝试重新计算规则时,完全未分离的例程中的代码将失败。