在我的Main
过程中,我想编写一个快速的if语句,用于检查用户是否进行了有效输入(用户从数据列表中选择项目数,请参阅附带的屏幕截图)。为此,我正在检查项目编号是否不属于项目列表。如果是,则显示错误消息;如果没有,则调用许多其他程序。
出于某种原因,虽然我在运行时遇到错误2015,这意味着if语句始终为true,即使在正确的用户条目上也是如此。有人可以帮我理解错误吗?
下面的代码(注意:我已尝试将其粘贴5次,但由于某种原因,格式化仍然无法正常工作 - 任何想法可能是什么?代码格式正确。对不起凌乱的显示;如果有人可以告诉我这个问题可能会非常感激!)
Sub Main()
'Turn off screen updating
Application.ScreenUpdating = False
'Define variable for currently active cell to reactivate it afterwards
Dim OldActiveSheet As Object
Dim OldActiveCell As Object
Dim i As Integer
Dim ProjectList As Range
Set OldActiveSheet = ActiveSheet
Set OldActiveCell = ActiveCell
'If-statement to check whether project number is valid or not
Worksheets("Invoice").Activate
'Print to Immediate Window to check value - remove later
Debug.Print Range("IdSelect").Value
If IsError(Application.Match(Range("IdSelect").Value, "ProjectList", 0)) Then
'Print to Immediate Window to check value - remove later
Debug.Print Application.Match(Range("IdSelect").Value, Worksheets("Input").Range("ProjectList"), 0)
MsgBox "Invalid Choice: Project with this number does not exist!"
Exit Sub
Else
'Call procedures to execute
Call SortData
Call Count_Line_Items
Call Count_Total_Rows
Call Write_Services(ServCnt)
Call Write_Expenses(ExpCnt)
End If
'Reactivate previous active cell
OldActiveSheet.Activate
OldActiveCell.Activate
End Sub
“输入”表格的屏幕截图:
答案 0 :(得分:7)
你引用范围的方式相当奇怪..因为你错过了range
引用。奇怪的是,你在下一行做的正确
Debug.Print Application.Match(Range("IdSelect").Value, Worksheets("Input").Range("ProjectList"), 0)
请试试这个:(我花了100年时间在手机上格式化自己的帖子.....)。请务必使用显式引用,如下面的示例代码所示。相应地设置你的床单。
Dim ws as Worksheet
Set ws = Sheets(1)
IsError(Application.Match(ws.Range("IdSelect").Value, ws.Range("ProjectList"), 0)) Then
继续阅读的内容