#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
? Если вы перейдете к avbNullString
, условиеNot IE.Busy And IE.readyState = 4
никогда не будет истинным.