Хорошо, это меня ошеломило. Я установил для FindFormat значение Bold, а для SearchFormat значение False, поэтому будет выбран первый экземпляр строки поиска, не выделенный жирным шрифтом. Но когда я выхожу из строки Found.Select в Debug, выделяется именно жирный экземпляр! Я что-то упускаю? PS я ранее был заявлен ...
Range(Cells(3, 3).Address(), Cells(lRow, 3).Address()).Select
Dim cn(0 To 300) As String
Dim Found As Range
Application.FindFormat.Font.Bold = True
i = 0
With Selection
For Each Drawing In dn
Set Found = .Find(Drawing, SearchFormat:=False)
Found.Select
ActiveCell.Offset(0, 3).Select
cn(i) = ActiveCell.Value
i = i + 1
Next
End With
Если вы хотите найти элементы, не выделенные жирным шрифтом, почему бы не установить такой формат !?
Не знал, что сможешь. Спасибо за совет
Ваша проблема действительно решена?
Не передан правильный первый элемент, за которым нужно ухаживать. И VBA принимает значение по умолчанию, которое является первым, но начинает следить за ним.
Это пример данных при поиске числа в столбце B:
Sub TestMe()
Dim myR As Range
Dim myS As Range
Set myS = Range("B1:B5") 'change the range to "C1:C5" correspondingly
With myS
Set myR = .Find(1)
Debug.Print myR.Row
Set myR = .Find(1, after:=.Cells(.Cells.Count))
Debug.Print myR.Row
End With
End Sub
The cell after which you want the search to begin. This corresponds to the position of the active cell when a search is done from the user interface. Notice that After must be a single cell in the range. Remember that the search begins after this cell; the specified cell isn’t searched until the method wraps back around to this cell. If you do no specify this argument, the search starts after the cell in the upper-left corner of the range.
Таким образом, для начала вы даете последнюю возможную ячейку. Он знает, что он должен начаться после этого. Таким образом, ему теоретически нечем заняться, и он просто начинает с начала диапазона. Идея параметра After состоит в том, чтобы установить последнее значение, которое будет проверяться. Таким образом, если у нас есть только одно значение, оно всегда возвращается правильно, независимо от параметра After. Имея более одного значения, он возвращает первое найденное значение.
Таким образом, в приведенном выше коде из-за использования After Range.Find()
выполняет поиск ячеек в следующей последовательности:
В1> В2> В3> В4> В5
Без After последовательность будет следующей:
В2> В3> В4> В5> В1
Код с примерами стоит прогнать пару раз. Действительно, параметр по умолчанию не установлен так, как можно было бы ожидать. Я имею в виду, что если я даю диапазон и смотрю на него, я ожидаю, что сначала проверю первую ячейку по умолчанию. И не проверять первую ячейку последней, потому что это параметр по умолчанию для After, когда он не установлен.
Спасибо, очень информативно. Я знал о After, но предполагал, что формат поиска пропустит жирную ячейку и вернется к началу. Не понимал, что SearchFormat работает таким образом. Полагаю, я мог бы поместить Found.Select в блок If и проверить полужирный шрифт ...
Установка для SearchFormat значения False просто означает, что форматирование игнорируется. Он просто найдет первый экземпляр.