Вы рядом. CountIf()
- это метод класса WorksheetFunction
в вашем приложении Excel
. Итак:
Number = Excel.WorksheetFunction.CountIf("A:A", "Ent.Date")
Unrelated. Все это .Active
.Select
не нужно. Люди Select
и Activate
, но ваш сценарий не нужен.
Вместо того, чтобы:
Set Excel = CreateObject("Excel.Application")
Excel.Visible = True
excel.workbooks.open "C:\Users\............."
excel.Rows("1:34").Delete
excel.Columns("A:A").Delete
Number = excel.WorksheetFunction.CountIf(Excel.Range("A:A"), "Ent.Date")
for i = 1 to Number
excel.Cells.Find("Ent.Date").Offset(-1,0).resize(RowSize +3).EntireRow.Delete
next
Также (и это может быть более предпочтительным) вместо цикла с For
вы могли бы вместо этого использовать цикл While
:
Set Excel = CreateObject("Excel.Application")
Excel.Visible = True
excel.workbooks.open "C:\Users\............."
excel.Rows("1:34").Delete
excel.Columns("A:A").Delete
Do While excel.WorksheetFunction.CountIf(Excel.Range("A:A"), "Ent.Date") >= 1
excel.Cells.Find("Ent.Date").Offset(-1,0).resize(RowSize +3).EntireRow.Delete
Loop
Это приводит к небольшим дополнительным накладным расходам, поскольку при каждом цикле он запускается с показателем, но он чувствует себя более лаконичным и снижает вероятность ошибки, поскольку вы, похоже, изменяете диапазон, возвращаемый Find()
, чтобы добавить больше строк, а затем удаляете их все ... это означает, что вы можете выбирать строки, которые также содержат критерии поиска, что означает, что вы слишком много зацикливаетесь в цикле For
. Но ... возможно, ваш лист настроен таким образом, что этого условия не происходит.