Цикл VBA, останавливающий всю функцию

#excel #vba

#excel #vba

Вопрос:

У меня возникла небольшая проблема с некоторыми VBA, которые я собрал из разных источников (в том числе здесь!) По сути, я пытаюсь просмотреть список учетных записей клиентов, введенных в список ячеек, и использует InStr, чтобы сообщить мне, отображаются ли ключевые слова в истории их учетных записей. Пока это отлично работает для одного номера учетной записи, но когда я попытался создать цикл для просмотра списка учетных записей, функция, похоже, просто останавливается в начале цикла. Вот VBA…

 Dim rowData As Long
Dim lastRow As Integer

lastRow = Cells(10000, 7).End(xlUp).Row
rowData = 7

For x = rowData To lastRow

With IE
    .Visible = True
    .navigate my_url2
End With

Do Until Not IE.Busy And IE.readyState = 4
    DoEvents
Loop

IE.Document.all("acct").Value = Me.Cells(x, 3).Value
IE.Document.all("Lookup").Click

Do Until Not IE.Busy And IE.readyState = 4
    DoEvents
Loop

IE.Document.getElementsByTagName("iframe")(0).contentWindow.Document.getElementsByTagName("input")(1).Click
'clicks button to open history

Do Until Not IE.Busy And IE.readyState = 4
    DoEvents
Loop

With IE
    .Visible = True
    .navigate my_url4
End With

Do Until Not IE.Busy And IE.readyState = 4
    DoEvents
Loop

promo = IE.Document.all

If InStr(promo.innerText, Range("E5").Value) = 0 Then
    ActiveSheet.Range("C10") = "No"
Else
    ActiveSheet.Range("C10") = "Yes"
End If

Next x
  

Я определенно не лучший, когда дело доходит до функции цикла, но я надеялся, что, может быть, мне здесь не хватает чего-то простого. Любая помощь была бы очень признательна. Спасибо!

Комментарии:

1. Какое значение lastRow ? Поставьте точку останова в For x строке и посмотрите, если lastRow < rowData цикл никогда не запустится. Я вижу, что вы ссылаетесь на столбцы 3, 5 и 7 в коде — все ли эти столбцы имеют одинаковое количество строк?

2. А также предложение @cxw (которое, вероятно, покажет причину, по которой ваш код не выполняется), ваши строки, ссылающиеся на ActiveSheet.Range("C10") , вероятно, потребуется изменить на ActiveSheet.Range("C" amp; x) (если вы действительно не хотите всегда записывать в ячейку C10), но это меня беспокоит, потому что вы используете Me.Cells(x, 3).Value для получения номера своей учетной записи, что означает, что вы собираетесь переписать номера своих учетных записей с помощью «Да» или «Нет». (Разве, может быть, Me и ActiveSheet отличаются?)

3. Где вы устанавливаете значения для `my_url2` и my_url4 ? Если вы перейдете к a vbNullString , условие Not IE.Busy And IE.readyState = 4 никогда не будет истинным.