2017-03-10 11 views
2

非常に基本的なvbaマクロで助けが必要です。 A6の値が1の場合、msgboxをワークステーションに表示する必要があります。私は以下のコードを開発しましたが、問題は、スプレッドシートに他の情報を追加すると(たとえば、B6で「i love pizza」と書いた場合)、msgboxが再度プロンプトを表示し、私はA6 = 1の値を設定したときに助けてくれますか?VBA - セル値= 1のときにmsgboxを開く

Private Sub Worksheet_Change(ByVal Target As Range) 

If Range("A6").Value = 1 Then 
    MsgBox "THIS IS A MSGBOX." 
End If 

End Sub 

@edit 私は...そう、そのユーザーが手動で挿入しないでVLOOKUPでgettedされた値「1」を1つの非常に重要なことを忘れて、私はこのことについてすみません。私は人々が答えたコードを試してみました。私はvlueを手動で入力したときに機能しました。編集開始時に言ったように、値はVLOOKUPで設定されています。他のヒントはどうですか?

答えて

1

Worksheet_Changeイベントの内部を確認する必要があります。これは、セル「A6」が押された場合にのみ確認してから続行します。あなたは変更がセルA6がかなり異なるよりも、変更されることによるものであるかどうかを確認する必要があり

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Address = "$A$6" Then 
     If Target.Value = 1 Then 
      MsgBox "THIS IS A MSGBOX." 
     End If 
    End If  
End Sub 
1

これを試してみてくださいと等しい場合に、その後、確認してください細胞。 これを試してみてください:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Column = 1 And Target.Row = 6 Then 
    If Target.Value = 1 Then 
     MsgBox "THIS IS A MSGBOX." 
    End If 
    End If 
End Sub 
+0

いいえ、あなたは 'Target.Address =" $ A $ 6 "を意味します。 –

+0

はい、私はそのエラーを見ました。 –

2

:セルの値が1

Private Sub Worksheet_Change(ByVal Target As Range) 

If Not Intersect(Target, Range("A6")) Is Nothing Then 
    If Target.Value = 1 Then MsgBox "THIS IS A MSGBOX." 
End If 

End Sub 
2

あなたが前のもの

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Address = Me.Range("A6").Address And Me.Range("A6").Value = 1 Then 
     MsgBox "THIS IS A MSGBOX." 
    End If 
End Sub 

の代わりにこのコードを使用することができ、ターゲットがExcelで変更された細胞です。変更イベントごとに、対象がRange( "A6")かどうかを確認します。

2

ステートメントに関連して:と私はただ1回だけプロンプトする必要があります、あなたはoldvalueを保存する必要があります。したがって、値を1に設定すると、プロンプトは1回だけ表示されます.A6がすでに1で、1を再度入力した場合、プロンプトは表示されません。


Option Explicit 

Dim oldVal 
Private Sub Worksheet_Change(ByVal Target As Range) 
    If (Target.Address = "$A$6") Then 
     If Target.Value = 1 And Target.Value <> oldVal Then 
      oldVal = Target.Value 
      MsgBox "Test" 
     End If 
    End If 
End Sub 
+0

ここではモジュールスコープ変数を使用するのではなく、ローカルスコープのStatic変数を使用すること、つまりサブルーチン内の "Static oldVal"を使用して変数を宣言することが有効です。 – M1chael

0

そのは、ユーザーが手動で挿入しないので、私は1つの非常に重要なことを忘れてしまった...値「1」​​はVLOOKUPでgettedですが、私はこのことについてすみません。私は人々が答えたコードを試してみました。私はvlueを手動で入力したときに機能しました。編集開始時に言ったように、値はVLOOKUPで設定されています。他のヒントはどうですか?

関連する問題