Я студент-бизнес, который только начал изучать VBA. Я пытаюсь написать макрос для проекта, но только минимальный опыт действительно вступает в код. То, что я пытаюсь сделать, это удалить все записи строк, в которых есть даты в будущем месяце, и я хотел бы, чтобы это обновление было основано на текущем месяце. Надеюсь, что я использую правильные функции, но, возможно, в неправильном порядке.Ошибка ввода данных VBA Excel
Я пытаюсь сравнить данные для каждой строки (в этом случае я смотрю на ячейку 16 в каждом), и я думал, что если цифры месяца для даты в этом столбце больше, чем значение цифры месяца за текущий месяц, затем он должен удалить, но я получаю сообщение об ошибке [Ошибка времени выполнения «5» Неверный вызов или аргумент процедуры].
Так вот часть кода у меня возникли проблемы с:
If DatePart(mm, Cells(iCntr, 16)).Value > DatePart(mm, Date).Value Then
Rows(iCntr).Delete
В коде я только сосредоточившись на месяц часть, потому что файл я использую содержит только текущую информацию года, поэтому мне не пришлось бы беспокоиться о том, чтобы случайно не удалить что-либо в марте следующего года (03/2017) из-за того, что это июнь этого года (например, технически 03/13/2017 не будет удалено с 03 < 06).
(Второй вопрос для моего собственного опыта обучения - кто-то предложил мне использовать iCntr в этом, но что это на самом деле сделать для формулы?)
Update: Пошел обзор кода и они обновили мой код, и теперь проблема, с которой я столкнулся, заключается в том, что друг, который отправил мне файл, оставил несколько строк пробелов, которые содержат одно пространство, что вызывает ошибку при запуске макроса. Может ли кто-нибудь предложить, как использовать функцию 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