Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 在每次保存到宏之前检查必填字段是否不为空_Vba_Excel - Fatal编程技术网

Vba 在每次保存到宏之前检查必填字段是否不为空

Vba 在每次保存到宏之前检查必填字段是否不为空,vba,excel,Vba,Excel,我有一个场景,其中我必须检查列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

我有一个场景,其中我必须检查列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

但是,这不起作用,每次保存之前都不会进行验证,我也无法调试它。有什么帮助吗?我做错什么了吗

试试这样的

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

为什么您无法调试?如何在定义它们之前使用rngCell和lngLstRow?正确缩进代码后,如果在最后一个
下一个
@FunThomas-将代码作为一个模块编写之前,
缺失了
结尾,则会显示在某个地方有一个
结尾!这就是为什么。我的错。@jivko-写对了。我把它贴在这里的时候出了点问题。问题变了。谢谢!