Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2010, 08:46   #1
Flangini
Форумчанин
 
Аватар для Flangini
 
Регистрация: 11.02.2008
Сообщений: 119
По умолчанию Автоподстановка

Добрый день! Подскажите, пожалуйста, как создать следующую обработку.
Имеется перечень всех субъектов Российской Федерации (отсортированный по алфавиту, хранить перечень субъёктов предполагается в массиве), при вводе в ячейку (столбец) буквы "Н" автоматически подставляется "Новгородская" (под "подставляется" подразумевается дописывание слова, по аналогии со стандартной функцией excel, когда вводишь ранее введённое значение), далее вводятся "ово", в ячейку подставляется "Новосибирская", нажимаешь enter значение выбрано - "Новосибирская".
Flangini вне форума Ответить с цитированием
Старый 14.05.2010, 10:27   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Только разве что так:



Можно, конечно, усовершенствовать: при выделении нужных ячеек макрос автоматически будет рисовать поверх них комбобокс, а при нажатии Enter в комбобоксе - скрывать его, а результат ввода помещать в ячейку.
EducatedFool вне форума Ответить с цитированием
Старый 14.05.2010, 10:48   #3
Flangini
Форумчанин
 
Аватар для Flangini
 
Регистрация: 11.02.2008
Сообщений: 119
По умолчанию

То есть, если мне необходимо заполнять огромную таблицу, используя данный метод, нужно будет нарисовать множество ComboBox и для каждого прописать приведённый код?
Flangini вне форума Ответить с цитированием
Старый 14.05.2010, 10:52   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
нужно будет нарисовать множество ComboBox и для каждого прописать приведённый код?
Нет.
Будет 1 комбобокс - по умолчанию он скрыт (размеры 0*0)
При выделении любой ячейки из нужного диапазона, по событию Worksheet_SelectionChange, комбобокс подгоняется по размерам под выделенную ячейку, и располагается прямо поверх неё.

После завершения ввода (по нажатию Enter) - по событию ComboBox1_KeyDown - введённые данные попадают в ячейку под комбобоксом, а сам он скрывается (ставятся вновь размеры 0*0)
EducatedFool вне форума Ответить с цитированием
Старый 14.05.2010, 11:36   #5
Flangini
Форумчанин
 
Аватар для Flangini
 
Регистрация: 11.02.2008
Сообщений: 119
По умолчанию

К сожаления я слаб в коде (даже в этом не разобрался ) не поможете реализовать выше описанную возможность? А то я даже новую область не понимаю как можно добавить в список
Flangini вне форума Ответить с цитированием
Старый 14.05.2010, 11:37   #6
Flangini
Форумчанин
 
Аватар для Flangini
 
Регистрация: 11.02.2008
Сообщений: 119
По умолчанию

Как добавить область нашёл Даже понял как перенести на другой лист список А вот чтобы поле исчезало и появлялось не понимаю как реализовать

Последний раз редактировалось Flangini; 14.05.2010 в 11:45.
Flangini вне форума Ответить с цитированием
Старый 14.05.2010, 13:57   #7
Flangini
Форумчанин
 
Аватар для Flangini
 
Регистрация: 11.02.2008
Сообщений: 119
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Нет.
Будет 1 комбобокс - по умолчанию он скрыт (размеры 0*0)
При выделении любой ячейки из нужного диапазона, по событию Worksheet_SelectionChange, комбобокс подгоняется по размерам под выделенную ячейку, и располагается прямо поверх неё.

После завершения ввода (по нажатию Enter) - по событию ComboBox1_KeyDown - введённые данные попадают в ячейку под комбобоксом, а сам он скрывается (ставятся вновь размеры 0*0)
Помогите, пожалуйста, это реализовать
Flangini вне форума Ответить с цитированием
Старый 14.05.2010, 15:38   #8
Flangini
Форумчанин
 
Аватар для Flangini
 
Регистрация: 11.02.2008
Сообщений: 119
По умолчанию

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Me.ComboBox1.Left = 0
Me.ComboBox1.Top = ???
End Sub

Скажите, как заставить ComboBox двигаться в соответствии с выбранной ячейкой?
Flangini вне форума Ответить с цитированием
Старый 14.05.2010, 16:21   #9
Flangini
Форумчанин
 
Аватар для Flangini
 
Регистрация: 11.02.2008
Сообщений: 119
По умолчанию

Мне удалось придумать только такой вариант:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim a As Single
Me.ComboBox1.Left = 0
a = ActiveCell.Row
Me.ComboBox1.Top = (a - 1) * 12.75
End Sub
Flangini вне форума Ответить с цитированием
Старый 14.05.2010, 20:30   #10
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вот вам готовый пример:



Выделите любую ячейку в диапазоне b2:b350 - и увидите результат.

Код совсем несложен:

Код:
Private Sub Combo_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 13 Then Me.Combo.TopLeftCell = Me.Combo.Value: HideCombo: ActiveCell.Offset(1).Activate
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    HideCombo
    If Target.Cells.Count > 1 Then Exit Sub
    If Intersect(Target, Range("b2:b350")) Is Nothing Then Exit Sub
    showCombo
End Sub

Sub showCombo()
    Me.Combo.Value = ""
    Me.Combo.Top = ActiveCell.Top: Me.Combo.Left = ActiveCell.Left
    Me.Combo.Width = ActiveCell.Width + 1: Me.Combo.Height = ActiveCell.Height + 1
    Me.Combo.Activate
End Sub

Sub HideCombo()
    Me.Combo.Top = 0: Me.Combo.Left = 0: Me.Combo.Width = 0: Me.Combo.Height = 0
End Sub


PS: Вот ещё пример поиска подходящих записей в момент ввода данных в "ячейку":



Попробуйте в этом примере ввести в ячейку B4 число 255
EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоподстановка Fezdipekla Microsoft Office Access 2 20.04.2010 18:10
Автоподстановка Nightwolf Microsoft Office Access 3 19.04.2009 12:11
DBMemo автоподстановка John_chek Компоненты Delphi 3 25.01.2007 13:41