Новости:

Новая редакция правил форума: 2.4. Если вопрос или ответ содержится во вложенном файле, все-равно кратко описывайте в сообщении вопрос или суть решения. Это необходимо, чтобы тему можно было найти через поиск.

Главное меню

Автозавершение из определенного диапазона.

Автор Oleg13, 22.03.2009, 00:06

« назад - далее »

Oleg13

Доброго времени суток!
Excel помогает, при наборе текста в столбце, по первым введенным буквам добавлять ранее введенный текст. Возможность эта называется автозавершение. К сожалению, список из которого происходит подстановка, находится сверху ячейки столбца, в котором производится набор текста.
Подскажите, пожалуйста, как получить возможность автозавершения, если список заранее определен и находится в нужном мне месте листа рабочей книги.
Я думаю, многим бы такой макрос пригодился.

Андрей Письменский

Если список у вас заранее определен, то думаю стоит предоставить возможность выбирать значение ячейки из списка. Это делается с помощью "Проверки данных", где в типе данных надо выбрать "Список" и указать диапазон, содержащий этот список. Если список находится на ином листе, чем тот на котором вводятся данные, то его надо проименовать и в поле "Список" указать =ИмяДиапазона. Информации об этом полно и на этом форуме ина всех сайтах, на которых коворится об Excel
NULL

Oleg13

#2
Андрей, спасибо за ответ.  :) Список конечно вещь хорошая, но он не дает возможности автоматически завершать слово или предложение. Можно было бы и списком, но у него маленькое поле (ширина колонки маленькая) в котором не видно все предложение. Автозавершение показывает все набранное ранее в ячейке.
Объясню свою задачу: есть список людей, которые постоянно участвуют в мероприятиях (есть и новые, которых не было в прошлый раз) и при регистрации, вводя фамилию, автозавершение мне помогает не набирать лишний раз данные человека и помогает видеть, что человек был в прошлый раз. Может быть мою задачу можно решить и каким либо другим способом. Access например с помощью запросов к базе данных это хорошо делает. Можно ли в Excel  начиная набирать фамилию видеть, что человек был в прошлый раз, и если да, занести его данные в эту или другую ячейку. Буду очень рад любым  возможным идеям решения этой задачи или примерам. Заранее спасибо.

Шпец Докапыч

Цитата: Oleg13 от 22.03.2009, 20:10
Может быть мою задачу можно решить и каким либо другим способом.

Автозавершение есть в эл.упр. "Поле со списком". Во вложении продемонстрированы фокусы с этим элементом.
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли

Oleg13

Шпец Докапыч, Ваше мастерство не знает границ!!! Спасибо огромедное. То, что хотелось и в лучшем виде!!!  :)

Цитата: Шпец Докапыч от 23.03.2009, 03:27
"Поле со списком". Во вложении продемонстрированы фокусы с этим элементом.
Как на примере легко учиться!!!  :D
Интересно, а если нам нужно поедать не блинчики, а например мороженое, что нужно изменить в коде???  ;D

Oleg13

Уважаемый Шпец Докапыч!!!
Помогите, пожалуйста, разобраться с Вашим примером. Хотел приладить его к своим нуждам, но не тут то было. Самостоятельно не разобраться, долго пытался.  :o  ???
Если вписать код в новую книгу, то останавливается на записи
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
После попытки добавить поле со списком останавливается на
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  With Me.ComboBox1

Я то по началу подумал, что поле со списком действительно чудесным образом появляется в диапазоне D8:D20.  ::) Видимо есть какой то секрет, раскройте его, пожалуйста!!!
(Имя "ФИО" как у Вас присвоил.)

Oleg13

Цитата: GWolf от 23.04.2009, 13:21
Ваша задача с комментированным нашим кодом (я имел ввиду коментарии: что это такое и почему оно тут стоит) - вот лучший учебник и школа.
Может я слишком самонадеян?! ;D

;D
Подскажите пожалуйста от куда в примере уважаемого Гуру Шпеца Докапыча
https://forum.msexcel.ru/microsoft_excel/avtozavershenie_iz_opredelennogo_diapazona-t1538.0.html;msg8604#msg8604
появляется поле со списком?
Самого Гуру два дня нет, а решить вопрос хочется  :).

Я думаю, что за это отвечает эта программка, но не уверен:
Private Sub ComboBox1_GotFocus() 'фокусируясь, перемещаемся и заполняемся
  With ActiveCell
    Me.ComboBox1.Text = .Value
    Me.ComboBox1.Top = Range("D1:D" & .Row - 1).Height + 0.75  - цифры влияет на местоположения поля относительно ячейки ввода (проверено опытным путем  :) ).
  End With
End Sub

Прошу не ругатся, что залез в чужую тему, но заявка ведь была сделана  ;).
Цитата: GWolf от 23.04.2009, 13:21
Ваша задача с комментированным нашим кодом (я имел ввиду коментарии: что это такое и почему оно тут стоит) - вот лучший учебник и школа.
Может я слишком самонадеян?! ;D
VBA мне тоже очень хочется научиться!  :)

GWolf

ЦитироватьСамого Гуру два дня нет, а решить вопрос хочется  :).

Уважаемый Шпец действительно не появляется. И это грустно ...

ЦитироватьЯ думаю, что за это отвечает эта программка, но не уверен:
Private Sub ComboBox1_GotFocus() 'фокусируясь, перемещаемся и заполняемся
  With ActiveCell
    Me.ComboBox1.Text = .Value
    Me.ComboBox1.Top = Range("D1:D" & .Row - 1).Height + 0.75  - цифры влияет на местоположения поля относительно ячейки ввода (проверено опытным путем  :) ).
  End With
End Sub

Совершенно верно


ЦитироватьПрошу не ругатся, что залез в чужую тему, но заявка ведь была сделана  ;).

Ругатся никто и не собирался. Мы приветствуем тебя в полку продвинутых Юзеров!!! И милости просим! Ибо и я сам, всего лишь пользователь!

ЦитироватьVBA мне тоже очень хочется научиться!  :)

Ну та к в чем дело? - От тебя лишь требуется описание задач.
Путей к вершине - множество. Этот один из многих!

Шпец Докапыч

Цитата: Oleg13 от 23.04.2009, 23:08
Прошу не ругатся, что залез в чужую тему, но заявка ведь была сделана  ;).

Ругаться не в моих правилах, просто перетащу сообщения на место.

ЦитироватьПодскажите, пожалуйста, откуда в примере появляется поле со списком?
Я думаю, что за это отвечает эта программка, но не уверен:...

Итак, чтобы всё это работало нужно сделать следующие шаги:
1) Присвоить списку имя "ФИО" в лучших традициях динамики (не поленитесь заглянуть во Вставка -> Имя –> Присвоить). ;)
2) Разместить на листе Поле со списком (ActiveX) в том столбце, где нужно. Указать ListFillRange: ФИО. А чтобы не маячило без надобности, выставить свойство Visible в False.
3) Тогда размещённый в модуле листа код будет работать, если имя поля ("ComboBox1") совпадает с тем, которое Вы создали. Если это первое размещённое на листе поле, то так и будет.
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли

Oleg13

Цитата: Шпец Докапыч от 24.04.2009, 20:43
Итак, чтобы всё это работало нужно сделать следующие шаги:
2) Разместить на листе Поле со списком (ActiveX) в том столбце, где нужно. Указать ListFillRange: ФИО. А чтобы не маячило без надобности, выставить свойство Visible в False.

Вот этого ListFillRange: ФИО мне и не хватало, только вот не знаю как посмотреть свойства полей в Вашем примере   :).
СПАСИБО!!! Мне удалось воспроизвести Ваш пример в новой книге и разобраться (громко сказано  ;) ) как работает код.
А куда интересно исчезают "свойства" поля со списком по ПКМ и можно ли их вернуть, хотя бы для того, чтобы изменить размер поля? Побывал стереть код, не помогло.
Excel и VBA в нем начал изучать только попав к Вам на форум и очень порадовался возможности учиться и общаться с грамотными и отзывчивыми людьми "живущими" здесь.

Шпец Докапыч

Цитата: Oleg13 от 25.04.2009, 00:04
А куда интересно исчезают "свойства" поля со списком по ПКМ и можно ли их вернуть, хотя бы для того, чтобы изменить размер поля? Побывал стереть код, не помогло.

Какое, например, "свойство" исчезает? Или Вы про окно свойств?
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли

Oleg13

Цитата: Шпец Докапыч от 25.04.2009, 00:16
Какое, например, "свойство" исчезает? Или Вы про окно свойств?

При создании нового поля по ПКМ можно вызвать окно свойств и изменять какие либо свойства.
Дальше окно свойств не исчезает или его можно вызвать на каком либо объекте в другой книге если я его раньше закрыл.
А не получается посмотреть свойства объекта "поле со списком", которое "прыгает" в Вашем примере, в окне свойств.

Я в коде показал это поле: Visible Then .Visible = True и стер код. Поле то в листе появилось, но выделить это поле как объект, а потом ПКМ - свойства не получается.
Всего лишь хотел сделать поле пошире.  :)

Наверное можно изменить ширину и в VBA, но хотелось в окне свойств.

Шпец Докапыч

Цитата: Oleg13 от 25.04.2009, 00:56
Цитата: Шпец Докапыч от 25.04.2009, 00:16
Какое, например, "свойство" исчезает? Или Вы про окно свойств?

При создании нового поля по ПКМ можно вызвать окно свойств и изменять какие либо свойства.
...
Наверное можно изменить ширину и в VBA, но хотелось в окне свойств.

Вы при создании определили ширину, а потом что мешает? Так же мышкой и растаскивается.  ???
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли

Oleg13

При создании определил. Записал код. Оказалось маловата :). А вот ширее уже сделать не могу!!!!!!!
Это поле уже не выделяется.
Это конечно совсем не проблема, просто хотел узнать, можно что либо сделать, на будущее.

Oleg13

#14
Прошу прощенья, разобрался  ::)!!!!!  Нужно было нажать два раза на кнопку поля со списком на панеле инструментов "Элементы управления" и появилась возможность выделить поле со списком. Еще раз спасибо!!! И за терпение!!!