我在此编码上遇到“编译错误”,无法找出红色的行出了什么问题?
我已经搜索了几个站点以确定可能出了什么问题,但是没有找到可以解决我的问题的东西?
Sub MsgBoxCritical()
Dim ws As Worksheet
Set ws = Worksheets("Travel Expense Form")
Dim amt As Range
Set amt = Range("U15:U45")
Dim proj As Range
Set proj = Range("N15:N45")
For Each Cell In ws("amt")
If Cell.Value > 0 Then
For Each Cell In ws("proj")
If Cell.Value = "" Then Cell.Interior.Color = vbRed
MsgBox "Project Number must be provided for all lines where
reimbursement is being requested" & vbCritical
Cancel = True
End If
End Sub
我希望在保存工作簿时显示以下消息框:如果U列的第15-45行中的任何单元格大于0,并且对应行的N列中的单元格为空白。
我收到范围U15:U45的编译错误,并且是Expected:Expression
错误吗?
答案 0 :(得分:1)
编译错误表示,VBA无法编译代码。因此,它突出显示了“奇怪”的行。在这种情况下,两个If条件有些错误。这是编写And
的标准方法。它写有1 If:
Sub TestMe()
Dim conditionA As Boolean
Dim conditionB As Boolean
conditionA = True
conditionB = True
If conditionA And conditionB Then
MsgBox "Both true!"
End If
End Sub
关于代码,其中有一些缺陷。通常,如果应该检查范围内的每个单元格,则进行循环检查。在某些情况下,也可以尝试WorksheetFunction.Sum(Worksheets("Travel Expense Voucher").Range("U15:U45"))>0
,但是很难获得该行,在这种情况下,该行大于0。无论如何:
Sub MsgBoxCriticalIcon()
Dim myCell As Range
With Worksheets("Travel Expense Voucher")
For Each myCell In .Range("U15:U45")
If myCell.Value > 0 And .Cells(myCell.Row, "N") = "" Then
MsgBox "Project must be ... at row " & myCell.Row
Exit Sub
End If
Next myCell
End With
End Sub
答案 1 :(得分:1)
发布的MsgBox代码有两个问题:
If Cell.Value = "" Then Cell.Interior.Color = vbRed
MsgBox "Project Number must be provided for all lines where
reimbursement is being requested" & vbCritical
Cancel = True
(在上下文中保留两行代码)
第一个是vbCritical
是标志和MsgBox
call的单独参数。但是,jsut可能会在字符串的末尾添加一个不寻常的数字。
第二个问题是您的文本行已环绕并且在单独的行中显示。这会导致编译错误。
尝试一下:
If Cell.Value = "" Then Cell.Interior.Color = vbRed
MsgBox "Project Number must be provided for all lines where reimbursement is being requested", vbCritical
Cancel = True
请注意,适当的缩进将帮助您识别代码块并确保If
语句正确匹配。同样,不确定Cancel
在此循环中正在做什么,但是要了解范围以及如何正确地传递变量(作为参数或通过函数返回它们)。
最后,请始终在模块顶部使用Option Explicit
。虽然这样可以确保强类型化并在未声明变量的情况下返回错误(这对于拾取拼写错误非常有用),但在这种情况下,还可以确保VBA IDE在调试时提供一些其他信息。