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
对象。如果我解释得不够好,请随时提问
我是商科学生,刚开始学习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
对象。如果我解释得不够好,请随时提问