我需要更有经验的 Excel VBA 用户的帮助。
基本上我有 2 组 3 个单元格(总共 6 个单元格)如果填充了一组 3 个单元格,它需要接受它而不是返回消息框。
如果两组中有一组未填写(空白)或返回错误,则需要显示“错误消息框”
两组 3 个细胞分别是: (A39,A40,A41) 和 (E39,E40,E41)
这是目前我的公式:
If IsError(Range("E39, E40, E41")) Then MsgBox ("error msgbox"): Exit Sub
If Range("E39, E40, E41") = Blank Then MsgBox ("error msgbox"): Exit Sub
如何将 A39、A40、A41 添加到此公式中,以便如果
填写了组 1 (A39、A40、A41) 或组 2 (E39、E40、E41),它不会返回“错误消息框”?
我曾尝试自己摆弄它,但如果没有填写所有 6 个单元格,它就会返回“错误消息框”。
我曾尝试查看 AND、OR 语句,但无法获得我想要的功能。
这是一张可能有帮助的图片
任何帮助将不胜感激
答案1
你的代码有些问题。首先,Range("E39, E40, E41")
没有引用这三个单元格。你需要在引号外用逗号将它们分开,就像这样Range("E39", "E40", "E41")
。
其次,为了正确评估这些单元格是否为空,您需要在语句中将它们分开IF
,如下所示:
If Range("E39") = "" Or Range("E40") = "" Or Range("E41") = "" Then
'code here
End If
IsError 也一样:
If IsError(Range("E39")) Or IsError(Range("E40")) ...
但是,要对逻辑进行分组,您需要以不同的方式思考,因为当任何单元格为空/包含错误时,这将引发错误。因此,您可以考虑添加两个新变量,您可以将其设置为True
或False
取决于组是否正确填写。示例:
Dim isFilled1 as Boolean = False
Dim isFilled2 as Boolean = False
If Not Range("E39") = "" Or Not Range("E40") = "" Or Not Range("E41") = "" Then
'All the cells in this range contain a value so set isFilled1 to True
isFilled1 = True
End If
If IsError(Range("E39")) Or IsError(Range("E40")) Or IsError(Range("E40")) Then
'The cells may contain values, but one or more evaluated as an error therefore set isFilled1 to False
isFilled1 = False
End If
If Not Range("A39") = "" Or Not Range("A40") = "" Or Not Range("A41") = "" Then
'All the cells in this range contain a value so set isFilled2 to True
isFilled2 = True
End If
If IsError(Range("A39")) Or IsError(Range("A40")) Or IsError(Range("A40")) Then
'The cells may contain values, but one or more evaluated as an error therefore set isFilled2 to False
isFilled2 = False
End If
'Now check if isFilled1 or isFilled2 are True
If isFilled1 = True or isFilled2 = True Then
'Hooray, one of the groups is properly filled
Else
'Neither group is properly filled; show msgbox
MsgBox("error msgbox")
End If
您可能需要调整此代码以适合您的情况,但这就是我的处理方式。
答案2
我必须对它进行一些调整,以便它能与我正在使用的 Excel 文件很好地兼容。
感谢exantas (用于代码)和Dave Rook(编辑我的帖子),这是最终的代码:
Dim isFilled1 As Boolean
Dim isFilled2 As Boolean
If Not Range("E39") = "" And Not Range("E40") = "" And Not Range("E41") = "" Then
'Set isFilled1 To True if these cells don't return an empty cell
isFilled1 = True
End If
If IsEmpty(Range("E39")) Or IsEmpty(Range("E40")) Or IsEmpty(Range("E41")) Then
'If these cells don't have a value, set isFilled1 to False
isFilled1 = False
End If
If Not Range("A39") = "" And Not Range("A40") = "" And Not Range("A41") = "" Then
'Set isFilled1 To True if these cells don't return an empty cell
isFilled1 = True
End If
If IsEmpty(Range("A39")) Or IsEmpty(Range("A40")) Or IsEmpty(Range("A41")) Then
'If these cells don't have a value, set isFilled1 to False
isFilled1 = False
End If
If isFilled1 = True Or isFilled2 = True Then
'One of the groups is properly filled
Else
'Neither group is properly filled; show msgbox
MsgBox ("error msgbox"): Exit Sub
我必须替换单元格中的公式E39,E40,E41,A39,A40,A41和:
=IF(ISERROR(旧公式);"";(旧公式)这样当返回错误时它会显示一个空白/空的单元格。