Я начинаю пользоваться визуальным базовым, и у меня возникла небольшая проблема. То, что я хочу сделать, это взять таблицу Excel и выполнить поиск по определенному столбцу, чтобы найти имя, а затем захватить все в этой строке, чтобы перенести его на другой лист. У меня все работает, за исключением того, что я столкнулся с бесконечным циклом по той причине, которую я не понимаю.Поиск через заполненные ячейки в визуальном базовом
'set up a for loop that increments through all sheets in the workbook
For i = 1 To ThisWorkbook.Sheets.Count
'set up a temp page to work with the current page
Set tem = ThisWorkbook.Sheets(i)
'increment through all the rows that have data in them
For Each rng In tem.Rows
'if the data matches what was searched for, copy it into another worksheet
If tem.Cells(ct, 4) = SForm.Text Then
sr.Cells(spot, 1) = tem.Cells(ct, 1)
sr.Cells(spot, 2) = tem.Cells(ct, 2)
sr.Cells(spot, 3) = tem.Cells(ct, 3)
sr.Cells(spot, 4) = tem.Cells(ct, 4)
sr.Cells(spot, 5) = tem.Cells(ct, 5)
sr.Cells(spot, 6) = tem.Cells(ct, 6)
sr.Cells(spot, 7) = tem.Cells(ct, 7)
sr.Cells(spot, 8) = tem.Cells(ct, 8)
sr.Cells(spot, 9) = tem.Cells(ct, 9)
sr.Cells(spot, 10) = tem.Cells(ct, 10)
sr.Cells(spot, 11) = tem.Cells(ct, 11)
sr.Cells(spot, 12) = tem.Cells(ct, 12)
'increment the placeholder for the new sheet
spot = spot + 1
End If
'increase ct to keep track of where in the worksheet it is
ct = ct + 1
Next rng
'reset ct for the next worksheet
ct = 1
Next i
Конкретная проблема, с которой я сталкиваюсь, является переполнением, поскольку ct является int и maxes out. который говорит мне, что у меня бесконечная петля на руках.
Спасибо за помощь заранее.
Вы повторяете более 1 миллиона раз за лист, это займет некоторое время. Кроме того, вам не нужно 'ct'. вместо этого используйте 'rng.row' на своем месте. –
[ссылка] (http://www.globaliconnect.com/excel/index.php?option=com_content&view=article&id=112:find-method-in-excel-vba-find-multiple-occurrences-find-method -to-vlookup-find-date & catid = 79 & Itemid = 475) посмотреть на ** Пример - найти несколько вхождений значения в диапазоне. **. Здесь вам будет очень полезно. Кроме того, у вас нет бесконечного цикла. Код написан для проверки ** каждой строки ** на листе, независимо от того, имеются ли там данные. Поэтому, когда строка становится больше, чем ~ 38 562 (не имеют точного количества рук), переменная 'Integer' больше не может ее удерживать. –