Excel VBA 输入错误

Excel VBA input error

我是商科学生,刚开始学习VBA。我正在尝试为一个项目编写宏,但实际进入代码的经验很少。我想要做的是删除所有包含未来月份日期的行条目,我希望它根据当前月份进行更新。我希望我使用的是正确的功能,但可能只是顺序错误。

我正在尝试比较每一行的数据(在本例中我正在查看每行中的单元格 16)并且我在想如果该列中日期的月份数字大于该值当前月份的月份数字,那么它应该删除,但我收到错误 [运行-time error '5' Invalid procedure call or argument.

所以这是我遇到问题的代码部分:

If DatePart(mm, Cells(iCntr, 16)).Value > DatePart(mm, Date).Value Then
    Rows(iCntr).Delete

在代码中,我只关注月份部分,因为我使用的文件只包含当年的信息,所以我不必担心不小心删除明年三月的内容( 03/2017) 因为是今年 6 月(例如,技术上 03/13/2017 不会被删除,因为 03 < 06)。


(第二个问题是我自己的学习经历——有人建议我在这里面使用iCntr,但这对公式有什么实际作用?)


更新:去了 Code Review,他们更新了我的代码,现在我 运行 遇到的问题是发给我文件的朋友留下了一些包含单个 space,当我 运行 宏时会导致错误。有人可以建议如何使用 trim() 函数来消除这些吗?

Sub Remove_excess_entries()
    Application.ScreenUpdating = False

    Dim lRow As Long
    Dim iCntr As Long
    lRow = 10000
    For iCntr = lRow To 1 Step -1
        If Cells(iCntr, 12).Value = "Mule" Or Cells(iCntr, 11).Value = "*R1*" Or Cells(iCntr, 11).Value = "*R2*" Or Cells(iCntr, 7).Value = "*Mule*" Or Cells(iCntr, 6).Value = "*Unassigned*" Or Cells(iCntr, 12).Value = "PS" Or Cells(iCntr, 7).Value = "Marketing" Or Cells(iCntr, 12).Value = "V1" Or DatePart("m", Cells(iCntr, 16).Value) > DatePart("m", Date) Then
            Rows(iCntr).Delete
        End If
    Next

    Application.ScreenUpdating = True
End Sub

关于DatePart()函数的正确使用,输入:

If DatePart("m", Cells(iCntr, 16)) > DatePart("m", Now) Then Rows(iCntr).Delete

iCntr 不是 VBA 命令,它可能只是一个已声明的变量(可能是一个计数器值,用于根据代码所示)。大概你已经在某处声明并在 For 类型循环中定义了它?

其次,according to MSDNDatePart中"month"的正确参数是"m",不是mm。这意味着您的代码应读作:

If DatePart("m", Cells(iCntr, 16).Value) > DatePart("m", Date) Then Rows(iCntr).Delete

您在右括号外还有 .Value,这意味着您正试图将其分配给 DatePart 对象而不是 Cells 对象。如果我解释得不够好,请随时提问