Использование .Find для поиска значения "14:00" времени - PullRequest
0 голосов
/ 06 мая 2020

Я обнаружил эту проблему на двух разных P C с разными листами и версией Excel Microsoft Office 365 ProPlus.

У меня есть столбец с такими значениями в ячейках:

8: 00

8: 30

9: 00

9: 30

10: 00

10: 30

11: 00

11: 30

12: 00

12: 30

13: 00

13 : 30

14: 00

14: 30

15: 00

15: 30

16: 00

16: 30

17: 00

17: 30

Ячейки отформатированы как время («* чч: мм»)

Я выполняю поиск с помощью функции .find, ища значение времени с помощью этого кода VBA:

TimeToFind= "08:00"
Set Position=worksheets("Foglio1").Range("E5:E21").Find(TimeValue(TimeToFind), LookIn:=xlFormulas)

Все пропало, так как я меняю строку TimeToFind на «14:00» или «14». : 30 дюймов.

Когда я меняю строку с этими двумя значениями, Position возвращает ячейку, содержащую «12:00» (вместо «14:00») и «12:30» (вместо «14:30»). Проблема возникла именно с этими двумя значениями. Любое другое значение дает правильную ячейку.

Кто-то нашел ту же проблему или может ее воспроизвести?

Спасибо

РЕДАКТИРОВАТЬ: Я пробовал искать в Excel 2016 Versione с теми же результатами.

1 Ответ

1 голос
/ 06 мая 2020

Согласно Метод поиска диапазона (Excel) :

Настройки для LookIn , LookAt , SearchOrder и MatchByte сохраняются каждый раз, когда вы используете этот метод. Если вы не укажете значения для этих аргументов при следующем вызове метода, будут использоваться сохраненные значения. Установка этих аргументов изменяет настройки в диалоговом окне Найти , а изменение настроек в диалоговом окне Найти изменяет сохраненные значения, которые используются, если вы опускаете аргументы. Чтобы избежать проблем, задавайте эти аргументы явно каждый раз, когда вы используете этот метод.

Итак, в прошлый раз, когда вы использовали диалоговое окно Найти , вы не отметили «Соответствовать всему содержимому ячейки». Поэтому он использовал частичный поиск. VBA всегда равно en_US. Таким образом, для 14:00 выполняется поиск 2:00:00 PM, а это содержится в 12:00:00 PM. То же самое для 14:30 = 14:30 и 12:30:00. Вот почему частичный поиск 2:00:00 PM находит 12:00:00 PM.

Итак, нам нужно LookAt:=xlWhole здесь:

TimeToFind= "14:00"
Set Position=worksheets("Foglio1").Range("E5:E21").Find(TimeValue(TimeToFind), LookIn:=xlFormulas, LookAt:=xlWhole)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...