2017-11-28 3 views
1

VBAコードを書き始めたばかりで、問題に直面しています。つまり、セルがb11にあり、セルa2またはc2に切り替えると、問題なくコードが実行されます。しかし、私がセルb2に何かを書いてを押すと、と入力すると、コードは機能しません。私はこれがActiveCell.rowのために起こると仮定します。どうすればいいですか?を入力してください。変更前の行番号をキャプチャするVBA

P.S.私はMsgBoxエラーでセル番号を取得できるので、ActiveCell.Rowが必要です。

Sub Change() 

Dim i As Long 

i = ActiveCell.Row 

If (Cells(i, "B") + Cells(i, "D")) <> Cells(i, "F") Then 
    MsgBox "B" & i & " + D" & i & " must equal cell F" & i & " which is: " & Range("W" & i).Value 

    Cells(i, "B").Interior.Color = RGB(255, 0, 0) 
    Cells(i, "D").Interior.Color = RGB(255, 0, 0) 
Else 
    Range(Cells(i, "B"), Cells(i, "D")).Interior.Color = RGB(1000, 1000, 1000) 
End If 

End Sub 

Private Sub Worksheet_Change(ByVal Target As Range) 
If Not Application.Intersect(Range("B11:F10000"), Range(Target.Address)) Is Nothing Then 
    Call Change 
End If 

答えて

1

あなたはセル「B2」に変更したときにコードが動作する場合は、Worksheet_Changeイベントでスキャンした範囲内で、あなたの範囲を変更する必要があります。

コード

Private Sub Worksheet_Change(ByVal Target As Range) 

If Not Application.Intersect(Range("B11:F10000"), Target) Is Nothing Then 
    Change Target.Row ' call change and pass the row number 
End If 

End Sub 

Sub Change(i As Long) 
' get the row number directly from the worksheet_change event 

If (Cells(i, "B") + Cells(i, "D")) <> Cells(i, "F") Then 
    MsgBox "B" & i & " + D" & i & " must equal cell F" & i & " which is: " & Range("W" & i).Value 

    Cells(i, "B").Interior.Color = RGB(255, 0, 0) 
    Cells(i, "D").Interior.Color = RGB(255, 0, 0) 
Else 
    Range(Cells(i, "B"), Cells(i, "D")).Interior.Color = RGB(1000, 1000, 1000) 
End If 

End Sub 
+0

。コードは 'B11'から機能するはずです。したがって、私はセル 'B11'すなわち10にデータを書きます。その後にEnterキーを押すと、セル 'B12'に行き、コードは機能しません。代わりに、私のパッド・セル 'C11'または 'A11'で選択すると、マウスは11と同じ行にとどまるため、コードが機能します。Enterを押すと12行目になり、コードは機能しません。私はそれがActiveCell.Row関数を使っていることを確信しています – geocc

+0

@georgecは "私がセル 'B11'すなわち10インチのデータを書き込むときにはわかりませんが、10は何ですか?私がセル "B11"に入力しているとき、上記のコードが動作します。説明できますか ? –

+0

が動作します。どうもありがとうございます! – geocc

0

やり直すと、あなたのイベントハンドラは、それが必要として動作することを確認してください。試しに空のワークシートにこれを追加してください。このイベントハンドラは、このシートのプライベートモジュール内に存在しなければならないこと

Public Sub Worksheet_Change(ByVal Target As Range) 
    MsgBox "You just changed " & Target.Address 
End Sub 

注:ここ

enter image description here

さらに詳しい情報:コメントで間違いだったhttp://www.ozgrid.com/VBA/run-macros-change.htm

関連する問題