私のExcelプロジェクトは自宅では正しく機能しますが(Excel 2010)、2台の仕事用コンピューターでは機能しません(Excel 2016を使用) )そして私はWorksheet_Change
イベントが問題であると思います。
ユーザーが変更を加えると、(スクリーンショットの)黄色のバーが再び白に変わるはずですが、そうではありません。 2台の仕事用コンピューターで2つの異なる応答があります。
コードで指摘する2つのこと:
vbColor
拡張子を使用する場所もあれば、数値コードを使用する必要がある場所もありました。
1台のコンピューターがWorksheet_Change
イベントをまったく発生させていません。変更イベントはコードの先頭にありますが、それとは関係ありません。
私が学ぶのを助けるために、アドバイスと詳細な説明をいただければ幸いです。
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
この問題を引き起こす要因はいくつか考えられます。診断する1つの方法は、次のようにトラブルシューティングすることです。
手順の開始時、この行の直後:
Private Sub Worksheet_Change(ByVal Target As Range)
...temporary行を追加します:
MsgBox "Changed: " & Target.Address
...次に、ワークシートの何かを変更します(どのような変更でも、期待どおりにイベントが発生しません)。
2つのうちの1つが発生します:
変更されたばかりのセル参照を示すメッセージボックスがポップアップ表示されます。
これは、イベントが適切に発生していることを示しているため、問題は次のコードにある必要があります。
または、メッセージボックスがポップアップ表示されません。これは、イベントがnot発生していることを示しています。これは、いくつかの可能性によって引き起こされる可能性があります。
ブックでマクロが完全に無効になっていますか?これは多くの場合、外部ソースから受け取ったワークブックで自動的に行われます。ブックを(電子メールから開くのではなく)ローカルコンピューターまたはネットワーク上の信頼できる場所に保存します。コードの他のセクションは正しく実行されますか?ファイルを閉じたり再度開いたりすると、マクロセキュリティに関する警告が表示されますか?また、コンピュータを再起動してみてください。
その他のセキュリティ設定が問題になる可能性があります。これらのマシンでVBAを実行したことがありますか?次の場所で、Excelのセキュリティ設定でコードを実行できることを確認できます。
File→Options→Trust Center→Trust Center Settings→Macro Settings
ここでマクロが有効になっていることを確認するだけでなく、チェックすることもできます Trusted Locations トラストセンターで、リストされた場所にドキュメントを保存するか、新しい場所を追加します。これらの場所に保存されたドキュメントのセキュリティ設定は「削減」されます。
EnableEvents
は、コードの他の場所で意図的に無効にされていますか?すべてのコードを記述した場合は、ある時点でEnableEvents = False
を設定したかどうかを知っておく必要があります。おそらく意図的なものでしたが、再度有効にされていません。
一時的に追加した行を削除することを忘れないでください。そうしないと、変更が行われるたびにMsgBoxがポップアップするため、すぐに煩わしくなります。 :)
私も同じ問題を抱えていました。私はすべてをチェックしました。すべてが適切であるように見えました(有効なマクロ、EnableEvents = Trueなど)。 Excelを閉じて開きました。問題が解決しませんでした。私にできることは何もありませんでした。 Windowsを再起動しました。問題はなくなりました。再起動には7分かかり(すべてのアプリケーションを閉じて再起動します)、原因を突き止めようとするとさらに時間がかかります。たぶん、タスクマネージャーですべてのExcelプロセスを見つけて強制終了しようとした可能性があります。 「再起動してみてください」というアドバイスをするのは好きではありませんが、WindowsはWindowsです。
「変更イベントはコードの先頭にあります」と言います。ワークシート変更イベントは、関連するシートモジュールにコードを配置した場合にのみ発生します。関係するコードを非シートモジュール(たとえば、オブジェクトエクスプローラーの「モジュール」ブランチの下にリストされている「モジュール1」など)に配置した場合は、それが問題です。
また、VBAコードに「L3」のようなセル参照をハードコーディングしないでください。後でこれらの参照の上/左に行/列を挿入した場合、すべてのハード参照を修正する必要があります。代わりに、Excelでこれらのセルに意味のある名前付き範囲を割り当て、VBAでそれらを使用します。
また、あなたがしているようにイベントハンドラーを使用するときは、If not intersect(Target, InputRange) is nothing then...
のようなものを用意して、関心のあるものが変更された場合にのみコードが実行されるようにする必要があります。