2

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

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

  • 项目编号输入是一个名为“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

“输入”表的屏幕截图:

在此处输入图像描述

4

1 回答 1

8

您引用范围的方式很奇怪..因为您错过了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 

这里是供您阅读的关于 on 的错误处理match

于 2013-01-07T00:12:08.870 回答