Я пишу макрос, который начинается с ввода действительной даты. После записи даты я хочу, чтобы макрос выполнил поиск в листе для всех строк, имеющих эту дату. Затем я хочу, чтобы все соответствующие кредиты и дебетовые суммы были собраны для этих строк, а затем я хочу, чтобы эти итоги были помещены в другой рабочий лист. Это код, который я написал для этого.Excel VBA looping issue
Проблема в том, что EVENTUALLY, код будет бесконечно зацикливаться внутри «Search =, If и End If». Если я поставлю «Else: Next I» перед End If, тогда я получаю сообщение об ошибке «Else without For».
Любые предложения?
Private Sub CommandButton3_Click()
Dim dateCheck As String
Dim lastRow As Long
Dim L As Integer
Dim I As Long
Dim shipDay As Date
Dim search As String
Dim usaTotal As Long
Dim usaCredit As Long
Dim usaDebit As Long
dateCheck = InputBox("What Date is Ship Day 1?", "Ship Day Entry")
If IsDate(dateCheck) Then
shipDay = DateValue(dateCheck)
Else:
MsgBox ("Invalid Date")
Exit Sub
End If ' Prompts user for ship day 1, and checks if actual date
For L = 0 To 30 ' Execute this code for 1 month worth of dates
shipDay = shipDay + L
MsgBox shipDay
For I = 1 To 10000 ' Check every row of the worksheet
search = Worksheets("sheet1").Cells(I, 12).Value ' Variable to use InStr to check for "CAN"
If ((InStr(1, search, "CAN", vbBinaryCompare) = 0) _
And (Worksheets("Sheet1").Cells(I, 8) = shipDay) _
And (Worksheets("Sheet1").Cells(I, 6).Text = "Invoice")) Then
usaDebit = Worksheets("Sheet1").Cells(I, 22).Value ' Account for Debits
usaCredit = Worksheets("Sheet1").Cells(I, 24).Value ' Account for Credits
usaTotal = usaTotal + usaCredit - usaDebit ' Calculate contribution
' This is where I tried placing an Else: Next I, which gives me an else without for prompts.
End If
Next I
MsgBox (usaTotal)
Worksheets("JUNE canada").Cells(L + 10, 4).Value = usaTotal/1000 'Enter value into sheet
usaTotal = 0 ' Reset usaTotal value
Next L
Итак, когда оператор IF не работает, вы просто хотите продолжить цикл For? AFAIK вы не можете сделать «next i», чтобы перейти к следующей итерации цикла. Что не так, просто оставив его как есть, без части «Else»? Таким образом, когда оператор IF не работает, он перейдет к следующему I. – BruceWayne
Проблема в том, что «Next I» не возвращается к «For i = 1 to 10000». Вместо этого он возвращается к «search = worksheets» и бесконечно петляет. –
Кажется, что это бесконечный цикл, почему вы так думаете? Хотя это крайне неэффективно: вместо 'To 1000' вы должны использовать' To Worksheets («sheet1»). UsedRange.Rows.Count'; если это будет вашей целью, но даже цикл 'For' не нужен, поскольку вы можете сделать это с помощью' WorksheetFunction.SumIFS' более легко. –