在条件格式中使用UDF时,VBA编译器不会中断/陷印错误,也不会出现错误消息

看到新的发展。

我在Excel中有一个奇怪的问题。 我有一个Worksheet_Change事件,我正在使用,我试图debugging它。 我保存程序并将其打开,编译器突然间没有出现错误。 事实上,这根本不算什么! 我会在小组的头部rest一下(接下来的三条线是很好的措施),但这并没有发生。 我想也许事件没有启用…所以,我已经把一个消息框作为代码的第一行之一。 消息框popup….甚至在线上的rest。

这发生在另一个macros的特定行之前,我曾尝试将所有内容复制到一个.txt文件,并粘贴到我的程序的早期版本。 这工作了好几个月,但问题现在又回来了。

编码不是很重要,但我会粘贴下面的踢和咯咯。 这是中止没有错误,我删除了所有的“错误”的或不。 我已经将代码剪切并粘贴到一个新的子文件中,并且工作正常。 我也检查了选项,并选中“打破所有错误”。 什么也没有,即使一个未定义的调用不会抛出一个错误,将停止程序中止。

 Private Sub Worksheet_Change(ByVal target As Range) Application.EnableEvents = False Dim aVar() As String Dim iVar As Integer On Error GoTo 0 MsgBox "you changed something" 'this is a msgbox that does pop up during execution, verifying that the sub did in fact, run. Call iRandomNonsense 'this is a sub that does not exist which the compiler does not tell me about any more. If target.Columns.Count = 1 Then Select Case target.Column Case 2 If target.Count = 1 And Cells(target.Row, 1) = "" Then _ Cells(target.Row, 1) = Now Case 8 On Error GoTo ExitSub aVar = Split(target.Value) For Each sVar In aVar If IsNumeric(sVar) And Len(sVar) = 5 Then If sVar > 30000 Then aVar(iVar) = "ALN-" & sVar Else aVar(iVar) = "DEV-" & sVar End If End If iVar = iVar + 1 Next target.Value = Join(aVar, " ") End Select Else On Error GoTo ExitSub target.Resize(target.Rows.Count, Cells(target.Row, target.Columns.Count).End(xlToLeft).Column + 1 - target.Column).Select Select Case Selection.Columns.Count Case 18, 21 'Paste from Scrap report Debug.Print "Paste from Scrap report" & Now Call purgeCheckboxes With Selection .Copy .PasteSpecial (xlValues) End With OnSelRow(4, 8).Select Selection.Copy Destination:=OnSelRow(1) 'desc OnSelRow(6) = OnSelRow(10) OnSelRow(4) = OnSelRow(15) With Range(Cells(Selection.Row, 10), Cells(Selection.Row + Selection.Rows.Count - 1, 10)) .FormulaR1C1 = _ "=RC[2]&"" ""&RC[3]&"" ""&RC[-3]&"" ""&RC[4]&"" ""&RC[7]&"" ""&RC[11]" .Copy .PasteSpecial (xlValues) End With Application.CutCopyMode = False Range(Cells(Selection.Row, 7), Cells(Selection.Row + Selection.Rows.Count - 1, 7)).FormulaR1C1 = "TRUE" Range(Cells(Selection.Row, 8), Cells(Selection.Row + Selection.Rows.Count - 1, 8)).FormulaR1C1 = "TDQ 9 A Wav DMR" Range(Cells(Selection.Row, 9), Cells(Selection.Row + Selection.Rows.Count - 1, 9)).FormulaR1C1 = "2" Range(Cells(Selection.Row, 11), Cells(Selection.Row + Selection.Rows.Count - 1, 11)).Select Range(Selection, Cells(Selection.Row, UsedRange.Columns.Count)).Select Selection.ClearContents ActiveWindow.ScrollColumn = 1 End Select Call RefreshCondFormats End If ExitSub: On Error GoTo 0 Application.EnableEvents = True End Sub 

一个新的发展:我遵循其中一个意见的build议。 “远景:你有任何使用UDF的条件格式?” – Rory昨天“它解决了我在条件格式中删除用户公式时的打破错误。 现在,编译器停止了它的预期,当我注释掉“iRandomNonsense”时,它停止了我的命令。 当我把格式化回来,它再次拧紧。

罗里,把你的评论作为一个答案(多一点的描述,你怎么知道这一点),我会检查它给你。

如果有人愿意的话,我真的很想知道在excel中解决这个问题的方法。 这似乎是我将来可能使用的实用程序,它真的让我困扰,我不能在条件格式中使用用户函数。 此外,这段代码对我来说是非常有用的,我没有看到任何其他的方式来做我没有条件格式的用户公式或毛茸茸的自动更正代码。

如果您在条件格式中使用UDF,则可能会出现此类问题。 如果您没有error handling,或者尝试访问.Value.Formula以外的任何属性,则很可能是这样。 通常可以解决这个问题 – 例如使用替代计算,或者把UDF放在一个单元格中 – 但是偶尔你可能只是运气不好。

我build议使用Rob Bovey的Code Cleaner来清除可能导致这种错误的累积p代码。 当Excel VBA开始performance奇怪时,清理代码通常会解决问题。
http://www.appspro.com/Utilities/CodeCleaner.htm

Interesting Posts