我是刚刚开始学习VBA的商科学生。我正在尝试为项目编写一个宏,但实际上只有很少的经验进入代码。我想要做的是删除所有具有未来月份日期的行条目,我希望根据当前月份进行更新。我希望我正在使用正确的功能,但可能只是错误的顺序。Excel VBA输入错误
我想比较每行的数据(在这种情况下,我在看每个单元格16),我在想,如果该列中的日期的月份数字大于当前月份的月份数字,那么它应该删除,但我收到错误[运行时错误'5'无效的过程调用或参数]。
因此,这里是我有麻烦的部分代码:
If DatePart(mm, Cells(iCntr, 16)).Value > DatePart(mm, Date).Value Then
Rows(iCntr).Delete
在代码中,我只是专注于本月部分,因为我使用的文件只包含当前的年,所以我不必担心由于今年6月份意外无法删除明年3月份(03/2017)的某些内容(例如,技术上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
另外我很抱歉如果我在错误的地方问这个问题,我是通过朋友堆栈溢出的新手 –
'iCntr'将是一个包含行号。你不需要命名它,它可以是任何东西。如果你没有设置这个值,那么你会得到一个错误。作为一个测试,用一个硬编码的行代替'iCntr',看看你的代码是否工作。 – Crowcoder
你可以使自己更容易,只需使用'Month()'函数。 – Crowcoder