2016-08-27 4 views
1

私の仕事を完了するのに役立つコードやコードの変更についての助けが必要です。 VBAの保護されたブック。私はB18、D20、K11、M46でsheet1にドロップダウンし、各ドロップダウンの値のリストを持っています。VBAプロンプトをスローするコード

ユーザーがドロップダウンB18とD20の値を変更すると、「ok」と「キャンセル」のプロンプトが表示されます。ユーザーは「ok」を選択してモジュール1(シートの名前を変更する)を実行する必要があります。

私は2つのことを達成できません。 1. I に、上記の2つのセルとは別のドロップダウン値を変更すると、プロンプトが表示されないようにします。 「OK」をクリックすると 2.それはあなたが以下のコードを試してみてくださいより良いコード

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim rNg As Range 

Set rNg = Range("B18", "D20") 
MsgBox "Please click Calculate Button", vbOKOnly, "Calculate button" 
End Sub 
+0

をクリック以下の回答を参照してください –

答えて

0

を持っている場合はお勧めしてくださいモジュール1.

を実行する必要があります。

(あなたがMsgBoxを使用しているため、ユーザーはvbOKOnlyと「OK」を押すと、彼は他の選択肢を持っていないかどうかを確認したい理由を理解していない)

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim rNg       As Range 
Dim IntersectRange    As Range 
Dim message      As Integer 

' modify here to the Range you need monitored 
Set rNg = Range("B18", "D20") 
Set IntersectRange = Intersect(Target, rNg) 

If Not IntersectRange Is Nothing Then 
    message = MsgBox("Please click Calculate Button", vbOKOnly, "Calculate button") 
    If message = vbOK Then 
     Call Module1 ' or your Module/Function name 
    End If 
Else 
    'Do Nothing if outside range 

End If 

End Sub 
+0

私が提供したコードは、以前の人が書き込みました。私はVBAの初心者です。彼がコードを完了したか、途中であったかどうかはわかりません。 私はラインコールモジュール内のモジュール、変数またはプロシージャではない期待1.エラー状態を」エラーを取得し、あなたのコードを使用しようとしました。 ちなみに、モジュール1は)サブCalculatesheetを(持っている。 – Manu

+0

@Manuを提案して下さいあなたの関数名に 'Call Module1'の名前を変更する必要があります。あなたの呼び出したいモジュールまたは関数の名前は何ですか? –

+0

私は悪いです、私は関数に置き換えられました。それは働いた。ありがとう。 – Manu

0

私はこれを言っていないですライトメソッドですが、ユーザーフォームを使用してカスタムプロンプトを作成することもできます。そして、これは私のやり方です。なぜなら、私にとっては、私が何をする必要があるかをより良くコントロールできるからです。

あなたは[OK]をクリックしてユーザーフォームを作成し、ボタンをキャンセルした場合、その後、あなたは、ドロップダウン値の変化にユーザーフォームをトリガーとし、

Sub DropDown1_Change() 
    UserForm1.Show 
End Sub 

[OK]をのためのコードを書き、キャンセルボタンは

Private Sub Ok_Click() 
    UserForm1.Hide 
    MsgBox "clicked ok" 
End Sub 

Private Sub cancel_Click() 
    UserForm1.Hide 
    MsgBox "clicked cancel" 
End Sub