2016-07-06 3 views
0

私の列Aには、「はい」または「いいえ」を選択できる選択肢があります。両方の選択に必要なセルがあります。ユーザーがVBAで保存したときにエラーをスローする方法

Example: 
If User selects "YES" 
Mandatory cells will be in Colum A, D and E 
If User selects "No" 
Mandatory cells will be in Colum B, C and G 

「行1」では、ユーザーが「はい」を選択してA1とE1に値を入力したが、セルD1に値を追加するのを忘れたとします。 行2では、ユーザーは「いいえ」を選択してB2とC2に値を入力し、セルG2に値を入力するのを忘れました。

彼は私が "は、以下のセルの値を入力しますというエラーをスローしたい、セーブヒットD1、G2

私は以下のコードがあります。。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 

    Dim Target As Range 
    If Not Intersect(Target, Range("A:A")) Is Nothing Then 

       If Target = "YES" Then 

        For i = 1 To 15 
         If Target.Offset(0, i).Value = "" Then 
         MsgBox "Enter values on the mandatory cells (green)", vbCritical, "" 
         End If 
        Next i 
         Cancel = True 

       ElseIf Target = "NO" Then 
        For i = 16 To 30 
         If Target.Offset(0, i).Value = "" Then 
          MsgBox "Enter values on the mandatory cells (green)", vbCritical, "" 
         End If 
        Next i 
        Cancel = True 
       End If 
     End If 
End Sub 
+1

[チェックアウト'Workbook_BeforeSave'イベント](https://msdn.microsoft.com/en-us/library/office/ff840057.aspx) – BruceWayne

答えて

2

使用をワークブックbeforeSaveイベントとそれに応じて処理します。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _ 
     Cancel as Boolean) 
    'your code here 
End Sub 

OPの新しいコードの編集:

あなたのコードにTargetが何であるか決して定義していないので、intersectメソッドは何も返されません。私はあなたがSaveのそれと、(目標範囲を含む)Worksheet_changeメソッドを混乱させていると思います。 BeforeSaveメソッドの実行時に、ターゲットが何であるかを定義する必要があります。特定の範囲の値をループし、すべての条件が満たされていることを確認することをお勧めします。一部が希望どおりでない場合は、欠落しているデータをユーザーが指し示し、保存を防止するためのメッセージを表示できます。

+0

私はその1つを使用するつもりであることを知っています、私の問題は、どのように私はシート全体と欠損値を持つセルアドレスを取得 – PeterS

+0

@PeterSどのセルを読むべきか分かっていればシート全体を読む必要はありません。もしあなたがSheet1.Range( "D1")ならValue = vbNullStringまたはSheet1.Range( "G2")。Value = vbNullString Then MsgBox "いいえ、あなたはいません!" ' –

+0

@ Mat'sMugコード。あなたは私がこの問題を理解するのを助けることができますか? – PeterS

1

これらの2つの行のいずれかを試してください。これは、メッセージボックスであることは、このようなエラーをスローするのは良い考えではありませんが、あなたはそんなにしたい場合は... :

msgbox "Enter a value of the following cells. D1 G2" 

これはエラーです:

err.Raise 1, description:= "Enter a value of the following cells. D1 G2" 
+0

なぜマイナスですか?答えには何が書いてありませんか? – Vityata

+1

私のdownvoteではありません(実際には*ユーザーにメッセージを送り、エラーを投げている*を区別するために+1しましたが)あなたの答えは、やっている。 –

+0

十分うれしい、ありがとう。 – Vityata

関連する問題