2016-06-13 107 views
0

我是刚刚开始学习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 
+0

另外我很抱歉如果我在错误的地方问这个问题,我是通过朋友堆栈溢出的新手 –

+0

'iCntr'将是一个包含行号。你不需要命名它,它可以是任何东西。如果你没有设置这个值,那么你会得到一个错误。作为一个测试,用一个硬编码的行代替'iCntr',看看你的代码是否工作。 – Crowcoder

+0

你可以使自己更容易,只需使用'Month()'函数。 – Crowcoder

回答

0

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。如果我没有足够好地解释它,请随时提出任何问题

+0

感谢您的信息!代码现在可以工作,但运行速度非常缓慢。有没有一个理由需要一段时间?或者加快速度/改变代码以提高速度?对不起,我对这些过程并不了解太多 –

+1

在没有看到代码的其余部分的情况下,不能多说几句 - 其中一行并没有提供很多关于其效率的信息。看看[codereview.se]并在那里发布整个代码;如果可能的话,他们很快就会加快速度 – Dave

0

为正确使用DatePart()功能,类型:

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