Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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
Excel 如果单元格为空,则停止宏运行,并以红色突出显示空单元格_Excel_Vba - Fatal编程技术网

Excel 如果单元格为空,则停止宏运行,并以红色突出显示空单元格

Excel 如果单元格为空,则停止宏运行,并以红色突出显示空单元格,excel,vba,Excel,Vba,我正在尝试运行一个宏来记录放入表单中的数据 运行宏时,它会将信息复制到名为日志工作表的工作表中。然后,它会清除表单,以便下一个用户提交其详细信息 我希望宏仅在所需字段填充到单元格后运行(B3、B4、B5、F3、F4、G19、B30、F30)。如果任何单元格为空,则不要将数据复制到下一页,而是添加Msgbox“填写必填字段”,并以红色突出显示待填写的空单元格 宏用于记录详细信息,但如果上面的单元格没有填写,我不知道如何防止它运行。它当前显示编译错误:没有If的Else Sub Submission

我正在尝试运行一个宏来记录放入表单中的数据

运行宏时,它会将信息复制到名为
日志工作表
的工作表中。然后,它会清除表单,以便下一个用户提交其详细信息

我希望宏仅在所需字段填充到
单元格后运行(B3、B4、B5、F3、F4、G19、B30、F30)
。如果任何单元格为空,则不要将数据复制到下一页,而是添加
Msgbox“填写必填字段”
,并以红色突出显示待填写的空单元格

宏用于记录详细信息,但如果上面的单元格没有填写,我不知道如何防止它运行。它当前显示
编译错误:没有If的Else

Sub Submission()

    If Range("B3") = "" Then
      MsgBox "Please insert Outlet Name"
      Range("B3").Select
    End If
    If Range("B4") = "" Then
      MsgBox "Please insert Date"
    End If
    If Range("F3") = "" Then
      MsgBox "Please insert Till Number"
      Range("F3").Select
    End If
    If Range("F4") = "" Then
      MsgBox "Please insert Operator Name"
    End If
    If Range("B5") = "" Then
      MsgBox "Please insert Department Name"
    End If
    If Range("G19") = "" Then
      MsgBox "Please insert Till Reading"
    End If
    If Range("B30") = "" Then
      MsgBox "Please insert Counted By Name"
    End If
    If Range("F30") = "" Then
      MsgBox "Please insert Witnessed By Name"
    Else
      Sheets("Input ").Select
      Sheets("Log Sheet").Visible = True
      Sheets("Log Sheet").Select
      Sheets("Sheet3").Visible = True
      Sheets("Log Sheet").Select
      Rows("2:2").Select
      Selection.Copy
      Application.Goto Cells(Rows.Count, "A").End(xlUp).Offset(1), Scroll:=True
      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
      Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
      Sheets("Input ").Select
      Range("B3:C3").Select
      Selection.ClearContents
      Range("F3:H3").Select
      Selection.ClearContents
      Range("F4:H4").Select
      Selection.ClearContents
      Range("B4:C4").Select
      Selection.ClearContents
      Range("B5:C5").Select
      Selection.ClearContents
      Range("C7").Select
      Selection.ClearContents
      Range("C8").Select
      Selection.ClearContents
      Range("C9:C17").Select
      Selection.ClearContents
      Range("G19:H19").Select
      Selection.ClearContents
      Range("C6").Select
      Selection.ClearContents
      Range("A24:H28").Select
      Selection.ClearContents
      Range("C21").Select
      Selection.ClearContents
      ActiveWindow.SmallScroll Down:=9
      Range("B30:C30").Select
      Selection.ClearContents
      Range("F30:H30").Select
      Selection.ClearContents
      Range("C19").Select
      Selection.ClearContents
      Range("C20").Select
      Selection.ClearContents
      Range("B3").Select
      Range("K6:K17").Select
      Selection.ClearContents
      Sheets("Log Sheet").Select
      ActiveWindow.SelectedSheets.Visible = False
      Sheets("Sheet3").Select
      ActiveWindow.SelectedSheets.Visible = False
      Range("B3:C3").Select
      Sheets("Input ").Select
      Range("B3:C3").Select
      ActiveWorkbook.Save
End Sub

我对你的代码做了一些调整。。。还有几个是可能的,但这会让你开始。首先,我将您的
End If/If
s替换为
ElseIf
s。这允许仅在未触发其他分支时才触发最终的
Else
。我还删除了所有不必要的
select
s,它们会降低代码的速度

Sub Submission()

    If Range("B3") = "" Then
      MsgBox "Please insert Outlet Name"
      Range("B3").Select
    ElseIf Range("B4") = "" Then
      MsgBox "Please insert Date"
    ElseIf Range("F3") = "" Then
      MsgBox "Please insert Till Number"
      Range("F3").Select
    ElseIf Range("F4") = "" Then
      MsgBox "Please insert Operator Name"
    ElseIf Range("B5") = "" Then
      MsgBox "Please insert Department Name"
    ElseIf Range("G19") = "" Then
      MsgBox "Please insert Till Reading"
    ElseIf Range("B30") = "" Then
      MsgBox "Please insert Counted By Name"
    ElseIf Range("F30") = "" Then
      MsgBox "Please insert Witnessed By Name"
    Else
      Sheets("Log Sheet").Visible = True
      Sheets("Sheet3").Visible = True
      Sheets("Log Sheet").Rows("2:2").Copy
      With Cells(Sheets("Log Sheet").Rows.Count, "A").End(xlUp).Offset(1)
      .PasteSpecial Paste:=xlPasteValues
      .PasteSpecial Paste:=xlPasteFormats
      End With
      With Sheets("Input ")
      .Range("B3:C5").ClearContents
      .Range("F3:H4").ClearContents
      .Range("C6:C17").ClearContents
      .Range("C19:C20").ClearContents
      .Range("G19:H19").ClearContents
      .Range("A24:H28").ClearContents
      .Range("B30:C30").ClearContents
      .Range("F30:H30").ClearContents
      .Range("K6:K17").ClearContents
      End With
      Sheets("Log Sheet").Visible = False
      Sheets("Sheet3").Visible = False
      ActiveWorkbook.Save
    End If
End Sub

在将表单复制到工作表之前,应对表单进行所有数据验证。也就是说,如果textbox2=“”,那么(添加命令以让用户正确填写表单。)这样您就知道工作表包含正确的信息,而不需要在工作表上验证它。您能否通过在表单模块中显示代码来更新您的问题?1)要修复编译错误,请在
结束子项之前添加
End If
。若要在缺少值时停止运行,请在每个条件下的
Msgbox
之后放置
Exit Sub
,阅读相关内容,您的编程生活会好得多。感谢Steve Lovell-这会在提示下起作用,但现在似乎会将数据粘贴到输入表上,而不是日志表中的下一个可用空白行工作表。抱歉,但我仍在学习阅读代码。我明白我所做的。。。已经更新。希望现在已修复。非常感谢您在这方面的帮助。:)别担心。我做了一些额外的小调整。如果您觉得问题现在已得到回答,请将我的回答标记为已接受。另外,我建议您的单元格高亮显示采用条件格式。您可能还可以删除
Visble=True/False
行。