Excel VBA находит странность функции

#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
  

В основном

  1. Выполните поиск в диапазоне, чтобы найти первый экземпляр строки
  2. Обратите внимание на адрес этого первого экземпляра
  3. Запустите цикл и выполните некоторую обработку
  4. Перед завершением цикла выполните еще один поиск, обратившись к самому последнему найденному местоположению
  5. Цикл выполняется до тех пор, пока либо не будет найдено, либо единственным экземпляром будет первое найденное местоположение

До сих пор это работало нормально. Есть несколько других случаев, когда в списке есть кратные значения, и моя логика работала ранее.

В данном конкретном случае у меня есть несколько экземпляров «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
  

Ссылка: