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
行。