#excel #vba
#excel #vba
Вопрос:
Короче говоря
- Я ищу в диапазоне одного столбца «psiTimBeamLabel1»
- По какой-то причине Vba .Функция поиска — это поиск «psiTimBeamLabel10» в качестве соответствия.
Справочная информация
Я ищу именованный диапазон (rn&CellsList), который представляет собой один столбец ячеек. В случае сбоя — значение, которое я ищу, равно «psiTimBeamLabel1», этот элемент появляется в списке несколько раз. У меня есть некоторая обработка, которая происходит каждый раз, когда она найдена в списке. Мой код перефразирует следующее:
Set rn&Cell = rn&CellsList.Find("psiTimBeamLabel1")
strFoundCellAddr = rn&Cell.Address
Do
... some processin&
Set rn&Cell = rn&CellList.Find("psiTimBeamLabel1",rn&Cell)
Loop Until rn&Cell is Nothin& or rn&Cell.Address = strFoundCellAddr
В основном
- Выполните поиск в диапазоне, чтобы найти первый экземпляр строки
- Обратите внимание на адрес этого первого экземпляра
- Запустите цикл и выполните некоторую обработку
- Перед завершением цикла выполните еще один поиск, обратившись к самому последнему найденному местоположению
- Цикл выполняется до тех пор, пока либо не будет найдено, либо единственным экземпляром будет первое найденное местоположение
До сих пор это работало нормально. Есть несколько других случаев, когда в списке есть кратные значения, и моя логика работала ранее.
В данном конкретном случае у меня есть несколько экземпляров «psiTimBeamLabel1» в списке. Но у меня также есть пара «psiTimBeamLabel10» — и по какой-то причине при поиске «psiTimBeamLabel1» вид такой .Поиск «psiTimBeamLabel10»
Есть идеи, почему или как я могу обойти это?
Спасибо, Кен
Комментарии:
1. Вы должны выполнить поиск по всему содержимому ячейки, иначе это совпадет.
2. Попробуйте изменить
rn&CellList.Find("psiTimBeamLabel1",rn&Cell)
сrn&CellList.Find(What:="psiTimBeamLabel1", After:=rn&Cell, LookAt:=xlWhole
помощью.3. Find() запоминает параметры с момента последнего ее использования, поэтому при ее использовании в VBA всегда следует включать по крайней мере параметры
lookIn
иlookAt
.4. Черт. Конечно. Спасибо.
Ответ №1:
Используйте For..Each
вместо этого, потому что Like
оператор позволяет использовать отрицательные подстановочные знаки.
For Each rn&Cell in rn&CellsList
If rn&Cell Like "psiTimBeamLabel1[!0-9]" Then ...
Next rn&Cell
Ссылка: