2017-05-23 6 views
0

カラムAが空でないかどうかをチェックしなければならないシナリオがあります。もしそうであれば、私はエラーメッセージを投げたい。マクロ内に保存する前に必須フィールドが空でないかどうかを確認します。

私はこれを思いついた。

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

    Dim rngCell As Range 
    Dim lngLstRow As Long, lngTCols As Long 
    Dim lngRowCheck(1 To 5) As String 

    For Each rngCell In Range("A1:A" & lngLstRow) 
     If Not IsEmpty(rngCell.Value) Then 

      lngRowCheck(1) = "C" 
      lngRowCheck(2) = "F" 
      lngRowCheck(3) = "G" 
      lngRowCheck(4) = "J" 

      lngLstRow = ActiveSheet.UsedRange.Rows.Count 

      For i = 1 To UBound(lngRowCheck) 
       For Each rngCell In Range(lngRowCheck(i) & "2:" & lngRowCheck(i) & lngLstRow) 
        If rngCell.Value = 0 Then 
         MsgBox ("Please enter a name in cell " & rngCell.Address) 
         rngCell.Select 
        End If 
       Next 
      Next i 
    Next 
End Sub 

ただし、これは機能しません。また、保存するたびに検証が行われるのではなく、これもデバッグできません。どんな助け?私は何か間違っているのですか?

+1

なぜあなたは、デバッグすることができませんか? – FunThomas

+0

定義する前にrngCellとlngLstRowを使用する方法は? – jivko

+1

あなたのコードを正しく字下げした後に、おそらく最後の 'Next'の前に' End If'があります。 –

答えて

1

このような何かを試してみてください...

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _ 
Cancel As Boolean) 
Dim rngCell As Range, cell As Range 
Dim lngLstRow As Long, lngTCols As Long 
Dim lngRowCheck(1 To 5) As String 

lngLstRow = ActiveSheet.UsedRange.Rows.Count 

For Each rngCell In Range("A1:A" & lngLstRow) 
    If Not IsEmpty(rngCell.Value) Then 
     lngRowCheck(1) = "C" 
     lngRowCheck(2) = "F" 
     lngRowCheck(3) = "G" 
     lngRowCheck(4) = "J" 

     For i = 1 To UBound(lngRowCheck) 
      For Each cell In Range(lngRowCheck(i) & "2:" & lngRowCheck(i) & lngLstRow) 
       If cell.Value = 0 Then 
        MsgBox "Please enter a name in cell " & cell.Address(0, 0) 
        cell.Select 
        Cancel = True 
        Exit Sub 
       End If 
      Next cell 
     Next i 
    End If 
Next rngCell 

End Sub 
+0

ありがとう!それはうまくいった –

+0

あなたは大歓迎です! – sktneer

関連する問題