条件付き書式でUDFを使用する場合、VBAコンパイラがエラーを壊さない/トラップしない、エラーメッセージが表示されない

ComputerNerd3579617

新しい開発を参照してください。

Excelで奇妙な問題が発生しました。Worksheet_Change使用しているイベントがあり、それをデバッグしようとしています。プログラムを保存して開いておくと、突然コンパイラがエラーで壊れていません。実は全然壊れていません!! 潜水艦の先頭(そして適切な測定のために次の3行)に休憩を入れますが、それは起こりません。イベントが有効になっていないのではないかと思いました...そこで、コードの最初の行の1つとしてメッセージボックスを配置しました。メッセージボックスがポップアップします....その行が途切れていても。

これは以前に別のマクロの特定の行で発生し、すべてを.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

新しい展開:コメントの1つにあるアドバイスに従いました。「ロングショット:UDFを使用する条件付き書式はありますか?–昨日ロリー」条件付き書式でユーザー数式を削除したときのエラーが解決されました。これで、コンパイラは想定どおりに停止し、「iRandomNonsense」をコメントアウトすると、コマンドが中断します。フォーマットを元に戻すと、再びねじ込まれます。

ロリー、あなたのコメントを答えとして(あなたがこれをどのように理解したかについてもう少し説明して)置いてください、そして私はあなたにそれをチェックします。

誰かが喜んでいるなら、私は本当にこのグリッチをうまく回避する方法を知りたいです。将来使用する可能性のあるユーティリティのようで、条件付き形式でユーザー関数を使用できないのは本当に気になります。また、このコードは私にとって非常に便利であり、条件付き書式のユーザー数式またはヘアリーなオートコレクトコードなしで私が行ったことを実行する他の方法はありません。

ロリー

条件付き書式でUDFを使用している場合、この種の問題が発生する可能性があります。あなたはエラー処理を持っていない場合、またはあなたがしようと以外の任意のプロパティの他のアクセスかどうかは、最も可能性が高いです.Value.Formula多くの場合、この問題を回避することは可能です(たとえば、別の計算を使用したり、UDFをセルに配置したりします)が、運が悪い場合もあります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ