热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在条件格式中使用UDF时,VBA编译器不会破坏/捕获错误并且不会显示错误消息

如何解决《在条件格式中使用UDF时,VBA编译器不会破坏/捕获错误并且不会显示错误消息》经验,请问有什么解决方案?

看到新的发展.

我在Excel中有一个奇怪的问题.我有一个Worksheet_Change我正在使用的事件,我正在尝试调试它.我保存程序并重新打开它,突然之间编译器没有打破错误.事实上,它根本没有破坏!我会在分队的头部(以及接下来的三条线路)进行休息,这样就不会发生.我想也许事件没有启用......所以,我把一个消息框作为第一行代码之一.弹出消息框....即使在它的行上有中断.

这发生在另一个宏的特定行上之前,我尝试将所有内容复制到.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 = "T D Q 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

一个新的发展:我在其中一条评论中遵循了建议."远景:你有任何使用UDF的条件格式吗? - Rory昨天"它解决了我在条件格式中删除用户公式时的破坏错误.现在编译器就像它应该的那样停止,当我注释掉"iRandomNonsense"时,它会破坏我的命令.当我把格式化后,它再次搞砸了.

罗里,把你的评论作为一个答案(有关你如何解决这个问题的更多描述),我会把它给你看.

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


推荐阅读
author-avatar
宇智臣风
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有