2016-06-13 119 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