Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Влияние xlValues - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Влияние xlValues (Макросы/Sub)
Влияние xlValues
Сергей13 Дата: Воскресенье, 24.11.2019, 02:10 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 310
Репутация: -3 ±
Замечаний: 0% ±

Excel 2016
Здравствуйте!
Ребята, вопрос чисто теоретический без примера.
Может ли данная конструкция поиска после выполнения его в коде
[vba]
Код
Find("Поиск1", , xlValues, xlPart)
[/vba]
влиять на выполнение другого кода где прописана иная конструкция поиска
[vba]
Код
Find("Поиск2", LookAt:=xlWhole)
[/vba]
с учетом того что данные коды не пересекаются и выполняются на разных листах.
В моем случае если вначале выполнить код с Поиском1, то Поиск2 перестает искать в скрытом столбце, поиск осуществляется только в открытых столбцах, в тоже время если Поиске1 выполнять без константы xlValues, то Поиск2 осуществляет поиск как в открытом так и в скрытом столбце.


Сообщение отредактировал Сергей13 - Воскресенье, 24.11.2019, 02:12
 
Ответить
СообщениеЗдравствуйте!
Ребята, вопрос чисто теоретический без примера.
Может ли данная конструкция поиска после выполнения его в коде
[vba]
Код
Find("Поиск1", , xlValues, xlPart)
[/vba]
влиять на выполнение другого кода где прописана иная конструкция поиска
[vba]
Код
Find("Поиск2", LookAt:=xlWhole)
[/vba]
с учетом того что данные коды не пересекаются и выполняются на разных листах.
В моем случае если вначале выполнить код с Поиском1, то Поиск2 перестает искать в скрытом столбце, поиск осуществляется только в открытых столбцах, в тоже время если Поиске1 выполнять без константы xlValues, то Поиск2 осуществляет поиск как в открытом так и в скрытом столбце.

Автор - Сергей13
Дата добавления - 24.11.2019 в 02:10
Gustav Дата: Воскресенье, 24.11.2019, 02:42 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1729
Репутация: 692 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Может влиять. Find запоминает параметры предыдущего вызова и поэтому могут быть неожиданности а случае разных списков явно указываемых параметров. Поэтому лучше указывать всё что возможно в явном виде при каждом вызове, не полагаясь на умолчания.


Мой tip box - яд 41001663842605
 
Ответить
СообщениеМожет влиять. Find запоминает параметры предыдущего вызова и поэтому могут быть неожиданности а случае разных списков явно указываемых параметров. Поэтому лучше указывать всё что возможно в явном виде при каждом вызове, не полагаясь на умолчания.

Автор - Gustav
Дата добавления - 24.11.2019 в 02:42
Сергей13 Дата: Воскресенье, 24.11.2019, 02:51 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 310
Репутация: -3 ±
Замечаний: 0% ±

Excel 2016
Gustav, что конкретно подразумевается в сказанном «указывать всё что возможно в явном виде при каждом вызове», если указан и лист и колонка листа.
[vba]
Код
    Dim InvoiceSheet As Worksheet
    Dim myF As Range
    Set InvoiceSheet = ThisWorkbook.Worksheets("invoice") 'Лист invoice
    Set myF = InvoiceSheet.Columns(2).Find("Поиск1", , xlValues, xlPart)
[/vba]
[vba]
Код
    Dim OstatSheet As Worksheet
    Dim osT As Range
    Set OstatSheet = ThisWorkbook.Worksheets("ostat") 'Лист ostat
    Set osT = OstatSheet.Columns(13).Find("Поиск2", LookAt:=xlWhole)
[/vba]


Сообщение отредактировал Сергей13 - Воскресенье, 24.11.2019, 03:15
 
Ответить
СообщениеGustav, что конкретно подразумевается в сказанном «указывать всё что возможно в явном виде при каждом вызове», если указан и лист и колонка листа.
[vba]
Код
    Dim InvoiceSheet As Worksheet
    Dim myF As Range
    Set InvoiceSheet = ThisWorkbook.Worksheets("invoice") 'Лист invoice
    Set myF = InvoiceSheet.Columns(2).Find("Поиск1", , xlValues, xlPart)
[/vba]
[vba]
Код
    Dim OstatSheet As Worksheet
    Dim osT As Range
    Set OstatSheet = ThisWorkbook.Worksheets("ostat") 'Лист ostat
    Set osT = OstatSheet.Columns(13).Find("Поиск2", LookAt:=xlWhole)
[/vba]

Автор - Сергей13
Дата добавления - 24.11.2019 в 02:51
Gustav Дата: Воскресенье, 24.11.2019, 07:04 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1729
Репутация: 692 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Я говорю о параметрах. Параметры - это то, что в скобках после Find.
Цитата
Синтаксис
выражение.Find (What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)
выражение: переменная, представляющая объект Range.
Параметры для аргументов LookIn, LookAt, SearchOrder и MatchByte сохраняются при каждом использовании этого метода. Если вы не укажете значения этих аргументов при следующем вызове метода, будут использоваться сохраненные значения. Установка этих аргументов изменяет параметры в диалоговом окне Найти, а изменение параметров в диалоговом окне Найти приводит к изменению сохраненных значений, которые используются, если опустить аргументы. Чтобы избежать проблем, устанавливайте эти аргументы явным образом при каждом использовании этого метода.


Мой tip box - яд 41001663842605

Сообщение отредактировал Gustav - Воскресенье, 24.11.2019, 07:10
 
Ответить
СообщениеЯ говорю о параметрах. Параметры - это то, что в скобках после Find.
Цитата
Синтаксис
выражение.Find (What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)
выражение: переменная, представляющая объект Range.
Параметры для аргументов LookIn, LookAt, SearchOrder и MatchByte сохраняются при каждом использовании этого метода. Если вы не укажете значения этих аргументов при следующем вызове метода, будут использоваться сохраненные значения. Установка этих аргументов изменяет параметры в диалоговом окне Найти, а изменение параметров в диалоговом окне Найти приводит к изменению сохраненных значений, которые используются, если опустить аргументы. Чтобы избежать проблем, устанавливайте эти аргументы явным образом при каждом использовании этого метода.

Автор - Gustav
Дата добавления - 24.11.2019 в 07:04
bmv98rus Дата: Воскресенье, 24.11.2019, 08:38 | Сообщение № 5
Группа: Проверенные
Ранг: Участник клуба
Сообщений: 2802
Репутация: 483 ±
Замечаний: 0% ±

Excel 2013/2016
В добавление к #4 - Format тоже запоминается, по этому его для уверенности надо тоже отдельно сбрасывать.


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
СообщениеВ добавление к #4 - Format тоже запоминается, по этому его для уверенности надо тоже отдельно сбрасывать.

Автор - bmv98rus
Дата добавления - 24.11.2019 в 08:38
Сергей13 Дата: Воскресенье, 24.11.2019, 12:53 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 310
Репутация: -3 ±
Замечаний: 0% ±

Excel 2016
Здравствуйте!
Ребята с учетом данной темы понял это так - метод поиска на основании совокупности данных для выбранного диапазон ячеек, где некоторые аргументы (в моем случаи это LookAt) сохраняются при каждом выполнении этого метода, и если не указать дополнительные параметры аргументу, то при следующем вызове метода может быть использован сохраненный аргумент и параметры иного ранее произведенного метода, в результате текущий метод (в данном конкретном случае Поиск2 после Поиска1) будет выполняться не корректно.
Если правильно определил, то какие необходимо дополнительные параметры методу Поиск2 потому как именно он срабатывает не корректно перед изначально выполненным методом Поиск1, сам же Поиск1 не подвержен стороннему влиянию? Или надо как-то дополнительно сбрасывать сохраненные значения параметров после выполнения методов?


Сообщение отредактировал Сергей13 - Воскресенье, 24.11.2019, 13:28
 
Ответить
СообщениеЗдравствуйте!
Ребята с учетом данной темы понял это так - метод поиска на основании совокупности данных для выбранного диапазон ячеек, где некоторые аргументы (в моем случаи это LookAt) сохраняются при каждом выполнении этого метода, и если не указать дополнительные параметры аргументу, то при следующем вызове метода может быть использован сохраненный аргумент и параметры иного ранее произведенного метода, в результате текущий метод (в данном конкретном случае Поиск2 после Поиска1) будет выполняться не корректно.
Если правильно определил, то какие необходимо дополнительные параметры методу Поиск2 потому как именно он срабатывает не корректно перед изначально выполненным методом Поиск1, сам же Поиск1 не подвержен стороннему влиянию? Или надо как-то дополнительно сбрасывать сохраненные значения параметров после выполнения методов?

Автор - Сергей13
Дата добавления - 24.11.2019 в 12:53
Pelena Дата: Воскресенье, 24.11.2019, 13:33 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 14887
Репутация: 3251 ±
Замечаний: ±

Excel 2010, 2016 & Mac Excel
Сергей13, все эти параметры практически те же, что в диалоговом окне Найти.

Если не поставить xlValues, то по умолчанию будет искать по формулам
К сообщению приложен файл: 2764684.jpg(22.6 Kb)


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеСергей13, все эти параметры практически те же, что в диалоговом окне Найти.

Если не поставить xlValues, то по умолчанию будет искать по формулам

Автор - Pelena
Дата добавления - 24.11.2019 в 13:33
Сергей13 Дата: Воскресенье, 24.11.2019, 14:47 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 310
Репутация: -3 ±
Замечаний: 0% ±

Excel 2016
Pelena,
Тогда вместо параметров в Поиске1
, , xlValues, xlPart
Лучше поставить как в Поиске2
, LookAt:=xlWhole
Вроде как бы работает и то и это.
А если в Поиске1 просто убрать
, xlValues
то уже не ищет, или не работает…

Короче изначально уловил воздействие параметра xlValues который в пояснении от Gustav не значится как параметр с сохраняемыми значениями после выполнения метода, но он почему-то влияет…


Сообщение отредактировал Сергей13 - Воскресенье, 24.11.2019, 14:49
 
Ответить
СообщениеPelena,
Тогда вместо параметров в Поиске1
, , xlValues, xlPart
Лучше поставить как в Поиске2
, LookAt:=xlWhole
Вроде как бы работает и то и это.
А если в Поиске1 просто убрать
, xlValues
то уже не ищет, или не работает…

Короче изначально уловил воздействие параметра xlValues который в пояснении от Gustav не значится как параметр с сохраняемыми значениями после выполнения метода, но он почему-то влияет…

Автор - Сергей13
Дата добавления - 24.11.2019 в 14:47
Gustav Дата: Воскресенье, 24.11.2019, 15:40 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1729
Репутация: 692 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Цитата Сергей13, 24.11.2019 в 14:47, в сообщении № 8 ()
уловил воздействие параметра xlValues который в пояснении от Gustav не значится как параметр с сохраняемыми значениями после выполнения метода

Господи-и-и-и... xlValues это НЕ ПАРАМЕТР метода, а КОНСТАНТА - одно из возможных в этом месте значений параметра LookIn, о котором в моем "пояснении" еще как говорится!

https://u.to/9OaBEw

Цитата
LookIn
Необязательный
Variant
Может быть одной из следующих констант XlFindLookIn: xlFormulas, xlValues, xlComments или xlCommentsThreaded.

Определите в обоих вызовах явно
[vba]
Код
... LookIn:=..., LookAt:=...
[/vba]
и будет счастье. Типа так:
[vba]
Код
.Find(What:="Поиск1", LookIn:=xlValues, LookAt:=xlPart)
.Find(What:="Поиск2", LookIn:=xlFormulas, LookAt:=xlWhole)
[/vba]ну или что там Вам надо. Главное - чтобы эти параметры указывались в обоих вызовах вот так явно, как я написал.


Мой tip box - яд 41001663842605

Сообщение отредактировал Gustav - Воскресенье, 24.11.2019, 15:44
 
Ответить
Сообщение
Цитата Сергей13, 24.11.2019 в 14:47, в сообщении № 8 ()
уловил воздействие параметра xlValues который в пояснении от Gustav не значится как параметр с сохраняемыми значениями после выполнения метода

Господи-и-и-и... xlValues это НЕ ПАРАМЕТР метода, а КОНСТАНТА - одно из возможных в этом месте значений параметра LookIn, о котором в моем "пояснении" еще как говорится!

https://u.to/9OaBEw

Цитата
LookIn
Необязательный
Variant
Может быть одной из следующих констант XlFindLookIn: xlFormulas, xlValues, xlComments или xlCommentsThreaded.

Определите в обоих вызовах явно
[vba]
Код
... LookIn:=..., LookAt:=...
[/vba]
и будет счастье. Типа так:
[vba]
Код
.Find(What:="Поиск1", LookIn:=xlValues, LookAt:=xlPart)
.Find(What:="Поиск2", LookIn:=xlFormulas, LookAt:=xlWhole)
[/vba]ну или что там Вам надо. Главное - чтобы эти параметры указывались в обоих вызовах вот так явно, как я написал.

Автор - Gustav
Дата добавления - 24.11.2019 в 15:40
Сергей13 Дата: Воскресенье, 24.11.2019, 17:28 | Сообщение № 10
Группа: Проверенные
Ранг: Обитатель
Сообщений: 310
Репутация: -3 ±
Замечаний: 0% ±

Excel 2016
Gustav,
Немного разобрался, также увидел то, что при выполнении метода
.Find("Поиск1", , xlValues, xlPart)
сохраненные значения изменяют область поиска диалогового окна установленного по умолчанию с формулы на значение, что и приводит к сбою для выполнения второго метода.
Непонимание еще было и в том - почему знающий человек применил данный метод для поиска одного всего лишь текстового данного через значение а не через формулу, поэтому я пытался подогнать под него натыкаясь на баги, а надо было для обоих методов не мудрить а просто
, LookAt:=xlWhole
или как у Вас
LookIn:=xlFormulas, LookAt:=xlWhole
Благодарю за пояснения!


Сообщение отредактировал Сергей13 - Воскресенье, 24.11.2019, 17:38
 
Ответить
СообщениеGustav,
Немного разобрался, также увидел то, что при выполнении метода
.Find("Поиск1", , xlValues, xlPart)
сохраненные значения изменяют область поиска диалогового окна установленного по умолчанию с формулы на значение, что и приводит к сбою для выполнения второго метода.
Непонимание еще было и в том - почему знающий человек применил данный метод для поиска одного всего лишь текстового данного через значение а не через формулу, поэтому я пытался подогнать под него натыкаясь на баги, а надо было для обоих методов не мудрить а просто
, LookAt:=xlWhole
или как у Вас
LookIn:=xlFormulas, LookAt:=xlWhole
Благодарю за пояснения!

Автор - Сергей13
Дата добавления - 24.11.2019 в 17:28
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Влияние xlValues (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования
© 2010-2019 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!