VBA application.match错误2015

时间:2013-01-06 23:40:16

标签: vba excel-vba excel

在我的Main过程中,我想编写一个快速的if语句,用于检查用户是否进行了有效输入(用户从数据列表中选择项目数,请参阅附带的屏幕截图)。为此,我正在检查项目编号是否不属于项目列表。如果是,则显示错误消息;如果没有,则调用许多其他程序。

出于某种原因,虽然我在运行时遇到错误2015,这意味着if语句始终为true,即使在正确的用户条目上也是如此。有人可以帮我理解错误吗?

  • 项目编号输入是名为“IdSelect”的命名单元格,位于名为“Invoice”的工作表上
  • 检查此输入的数据位于名为“输入”
  • 的工作表上
  • 数据存储在B列中,称为“ProjectList”

下面的代码(注意:我已尝试将其粘贴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

“输入”表格的屏幕截图:

enter image description here

1 个答案:

答案 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 

以下是您为error handling on on match.

继续阅读的内容