web-dev-qa-db-ja.com

Worksheet_Changeイベントが発生しない

私のExcelプロジェクトは自宅では正しく機能しますが(Excel 2010)、2台の仕事用コンピューターでは機能しません(Excel 2016を使用) )そして私はWorksheet_Changeイベントが問題であると思います。

ユーザーが変更を加えると、(スクリーンショットの)黄色のバーが再び白に変わるはずですが、そうではありません。 2台の仕事用コンピューターで2つの異なる応答があります。

コードで指摘する2つのこと:

  1. vbColor拡張子を使用する場所もあれば、数値コードを使用する必要がある場所もありました。

  2. 1台のコンピューターがWorksheet_Changeイベントをまったく発生させていません。変更イベントはコードの先頭にありますが、それとは関係ありません。

私が学ぶのを助けるために、アドバイスと詳細な説明をいただければ幸いです。

screenshot

Private Sub Worksheet_Change(ByVal Target As Range) 'Check for On-Time and Delays then change the Command Button Colors to show completed.  

'Return headers to white after jump to
Range("B3:I3,O3:V3,B28:I28,O28:V28,B53:I53,O53:V53,B78:I78,O78:V78,B103:I103,O103:V103,B128:I128,O128:V128,B153:I153,O153:V153").Interior.Color = vbWhite
'Check for On Time and Delayed Trips
'Trip 1 Scan Ready
If IsEmpty(Range("L3").Value) = False Then
    If Range("L3").Value > Range("I3").Value Then 'If actual is greater than Departure
        'If Delayed check for a delay code
        If IsEmpty(Range("L24").Value) Then 'If Delay code is missing
            Range("K24:L25").Interior.Color = 16711935
            CommandButton1.BackColor = 16711935
            CommandButton1.ForeColor = vbBlack
        Else 'If Delay Code is present check for delay time
            If IsEmpty(Range("L25").Value) Then
                Range("K24:L25").Interior.Color.Index = 16711935
                CommandButton1.BackColor = 16711935
                CommandButton1.ForeColor = vbBlack
            Else
                CommandButton1.BackColor = vbRed
                CommandButton1.ForeColor = vbWhite
                Range("K24:L25").Interior.Color = vbWhite
            End If
        End If
    Else
        'Flight was on Time
        CommandButton1.BackColor = 32768 '32768 = Green
        CommandButton1.ForeColor = vbWhite
        Range("K24:L25").Interior.Color = vbWhite
    End If
End If
3
NWTech

この問題を引き起こす要因はいくつか考えられます。診断する1つの方法は、次のようにトラブルシューティングすることです。

手順の開始時、この行の直後:

Private Sub Worksheet_Change(ByVal Target As Range)

...temporary行を追加します:

MsgBox "Changed: " & Target.Address

...次に、ワークシートの何かを変更します(どのような変更でも、期待どおりにイベントが発生しません)。

2つのうちの1つが発生します

  1. 変更されたばかりのセル参照を示すメッセージボックスがポップアップ表示されます。
    これは、イベントが適切に発生していることを示しているため、問題は次のコードにある必要があります。

  2. または、メッセージボックスがポップアップ表示されません。これは、イベントがnot発生していることを示しています。これは、いくつかの可能性によって引き起こされる可能性があります。

    • ブックでマクロが完全に無効になっていますか?これは多くの場合、外部ソースから受け取ったワークブックで自動的に行われます。ブックを(電子メールから開くのではなく)ローカルコンピューターまたはネットワーク上の信頼できる場所に保存します。コードの他のセクションは正しく実行されますか?ファイルを閉じたり再度開いたりすると、マクロセキュリティに関する警告が表示されますか?また、コンピュータを再起動してみてください。

    • その他のセキュリティ設定が問題になる可能性があります。これらのマシンでVBAを実行したことがありますか?次の場所で、Excelのセキュリティ設定でコードを実行できることを確認できます。
      FileOptionsTrust CenterTrust Center SettingsMacro Settings

      ここでマクロが有効になっていることを確認するだけでなく、チェックすることもできます Trusted Locations トラストセンターで、リストされた場所にドキュメントを保存するか、新しい場所を追加します。これらの場所に保存されたドキュメントのセキュリティ設定は「削減」されます。

    • EnableEventsは、コードの他の場所で意図的に無効にされていますか?すべてのコードを記述した場合は、ある時点でEnableEvents = Falseを設定したかどうかを知っておく必要があります。おそらく意図的なものでしたが、再度有効にされていません。

一時的に追加した行を削除することを忘れないでください。そうしないと、変更が行われるたびにMsgBoxがポップアップするため、すぐに煩わしくなります。 :)

3
ashleedawg

私も同じ問題を抱えていました。私はすべてをチェックしました。すべてが適切であるように見えました(有効なマクロ、EnableEvents = Trueなど)。 Excelを閉じて開きました。問題が解決しませんでした。私にできることは何もありませんでした。 Windowsを再起動しました。問題はなくなりました。再起動には7分かかり(すべてのアプリケーションを閉じて再起動します)、原因を突き止めようとするとさらに時間がかかります。たぶん、タスクマネージャーですべてのExcelプロセスを見つけて強制終了しようとした可能性があります。 「再起動してみてください」というアドバイスをするのは好きではありませんが、WindowsはWindowsです。

0
RafalSroka

「変更イベントはコードの先頭にあります」と言います。ワークシート変更イベントは、関連するシートモジュールにコードを配置した場合にのみ発生します。関係するコードを非シートモジュール(たとえば、オブジェクトエクスプローラーの「モジュール」ブランチの下にリストされている「モジュール1」など)に配置した場合は、それが問題です。

また、VBAコードに「L3」のようなセル参照をハードコーディングしないでください。後でこれらの参照の上/左に行/列を挿入した場合、すべてのハード参照を修正する必要があります。代わりに、Excelでこれらのセルに意味のある名前付き範囲を割り当て、VBAでそれらを使用します。

また、あなたがしているようにイベントハンドラーを使用するときは、If not intersect(Target, InputRange) is nothing then...のようなものを用意して、関心のあるものが変更された場合にのみコードが実行されるようにする必要があります。

0
jeffreyweir