[英]Excel VBA input error
我是一名刚开始学习VBA的商科学生。 我正在尝试为一个项目编写宏,但是实际上只有很少的经验才能进入代码。 我要执行的操作是删除其中包含未来月份日期的所有行条目,我希望此行条目根据当前月份进行更新。 我希望我使用正确的功能,但顺序可能不正确。
我正在尝试比较每一行的数据(在这种情况下,我查看的是每行中的单元格16),并且我想如果该列中日期的月份数字大于该行的月份数字的值当前月份,则应删除该月份,但我收到错误[运行时错误'5'无效的过程调用或参数]。
所以这是我遇到麻烦的部分代码:
If DatePart(mm, Cells(iCntr, 16)).Value > DatePart(mm, Date).Value Then
Rows(iCntr).Delete
在代码中,我只关注月份部分,因为我正在使用的文件仅包含当前年份信息,因此我不必担心由于疏忽而未能在明年3月(03/2017)删除某些内容到今年6月(例如,从技术上说03/13/2017不会删除,因为03 <06)。
(关于我自己的学习经历的第二个问题-有人建议我在其中使用iCntr,但这实际上对公式有什么作用?)
更新:去了代码审查,他们更新了我的代码,现在我遇到的问题是,向我发送文件的朋友留下了包含单个空格的空白行,这在我运行宏时导致错误。 有人可以建议如何使用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
类型循环中定义了它?
其次, 根据MSDN , DatePart
“ month”的正确参数是“ m”,而不是mm。 这意味着您的代码应为:
If DatePart("m", Cells(iCntr, 16).Value) > DatePart("m", Date) Then Rows(iCntr).Delete
您还需要在右括号之外添加.Value
,这意味着您试图将其分配给DatePart
对象而不是Cells
对象。 如果我还不够解释,请随时询问
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.