Уважаемые знатоки Помогите автоматизировать процесс. Есть 2 файла: файл реестр и файл ошибок. В файле ошибок поля N_ZA и IDCASE соответствуют значениям полей N_ZA и IDCASE в файле реестр. Нужно найти строки по значениям полей N_ZA и IDCASE в файле "реестр" и залить их желтым цветом. Выгрузил значения поля IDCASE из книги "ошибки" в массив, сделал поиск в книге "реестр" - ячейки залил желтым. А как определить адрес найденой ячейки, что б потом от нее плясать вниз и определить диапазон? И как вообще залить цветом строки?
Уважаемые знатоки Помогите автоматизировать процесс. Есть 2 файла: файл реестр и файл ошибок. В файле ошибок поля N_ZA и IDCASE соответствуют значениям полей N_ZA и IDCASE в файле реестр. Нужно найти строки по значениям полей N_ZA и IDCASE в файле "реестр" и залить их желтым цветом. Выгрузил значения поля IDCASE из книги "ошибки" в массив, сделал поиск в книге "реестр" - ячейки залил желтым. А как определить адрес найденой ячейки, что б потом от нее плясать вниз и определить диапазон? И как вообще залить цветом строки?123mark123
Нумерация строк в массиве "a" начинается с 1, а не с нуля. В VBA в некоторых случаях нумерация массивов может быть с нуля, может быть с 1. В данном случае с 1. Поэтому цикл надо делать так: [vba]
Код
For i = 1 To s
[/vba] Строки залить цветом можно так: [vba]
Код
cell.EntireRow.Interior.Color = 65535
[/vba] Адрес найденной ячейки можно записать в переменную. Если просто вызывать свойство Address, то будет ошибка.
'создание массива и занесение в него данных из таблицы Dim a() a = Range("G" & 2 & ":" & "G" & s).Value
Windows("реестр.xlsm").Activate
For i = 1 To s Dim cell As Range: Set cell = Range("C2:C20000").Find(a(i, 1), , xlValues) If Not cell Is Nothing Then cell.EntireRow.Interior.Color = 65535 If Not cell Is Nothing Then strAddress = cell.Address Next i
End Sub
[/vba]
Нумерация строк в массиве "a" начинается с 1, а не с нуля. В VBA в некоторых случаях нумерация массивов может быть с нуля, может быть с 1. В данном случае с 1. Поэтому цикл надо делать так: [vba]
Код
For i = 1 To s
[/vba] Строки залить цветом можно так: [vba]
Код
cell.EntireRow.Interior.Color = 65535
[/vba] Адрес найденной ячейки можно записать в переменную. Если просто вызывать свойство Address, то будет ошибка.
'создание массива и занесение в него данных из таблицы Dim a() a = Range("G" & 2 & ":" & "G" & s).Value
Windows("реестр.xlsm").Activate
For i = 1 To s Dim cell As Range: Set cell = Range("C2:C20000").Find(a(i, 1), , xlValues) If Not cell Is Nothing Then cell.EntireRow.Interior.Color = 65535 If Not cell Is Nothing Then strAddress = cell.Address Next i
Karataev, Спасибо за оперативный ответ. То что нумерация с нуля - мне известно, цикл с 1 сделан с умыслом, для выполнения дальнейших задач Но я так и не понял, как определить адрес найденой ячейки , потом выделить диапазон
Karataev, Спасибо за оперативный ответ. То что нумерация с нуля - мне известно, цикл с 1 сделан с умыслом, для выполнения дальнейших задач Но я так и не понял, как определить адрес найденой ячейки , потом выделить диапазон123mark123
Для данной задачи не нужно использовать свойство "Address", достаточно использовать переменную cell, которая представляет собой ячейку, в которой найден искомый текст.
'создание массива и занесение в него данных из таблицы Dim a() a = Range("G" & 2 & ":" & "G" & s).Value
Windows("реестр.xlsm").Activate
For i = 1 To s - 1
Dim cell As Range: Set cell = Range("C2:C20000").Find(a(i, 1), , xlValues)
If Not cell Is Nothing Then
cell.Select
x = ActiveCell.Row Selection.End(xlDown).Select y = ActiveCell.Row - 1 ActiveSheet.Range("A" & x & ":" & "G" & y).Interior.Color = 65535 End If
Next i
End Sub
[/vba]
P.S. Оформляйте код специальными тегами (об этом сказано в правилах форума).
Для данной задачи не нужно использовать свойство "Address", достаточно использовать переменную cell, которая представляет собой ячейку, в которой найден искомый текст.