我是剛剛開始學習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