Новости:

Теперь на форум можно залогиниться / зарегистрироваться с помощью ВКонтакте. Уже существующие пользователи могут связать свою учетную запись с аккаунтом ВКонтакте одним кликом в профиле пользователя http://forum.msexcel.ru/index.php?action=profile;area=account

Главное меню

Поиск по первым буквам

Автор Gago Ns, 20.05.2014, 09:39

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

Gago Ns

Господа нужна помощь. :-\
Ситуация следующая:
Таблица эксель имеет две страницы:
В первой форма для оформления заказов
Во второй массив данных необходимых для оформления заказов (город, цена доставки, адрес пунктов выдачи и т.д.)

Хотелось бы что бы на первой странице (форма заказов) в конкретной ячейке , например "Город", при вводе первой буквы показывались значения из второй (массив данных) страницы (столбца Город соответственно).
А далее при прописывании города полностью, т.е. при совпадении названия введенного оператором в ячейке формы заказов с городом из массива данных, автоматически проставлялись значения соответствующей строки (страницы массива данных) на страницу формы оформления заказов.

Файл прикреплен, буду очень и очень признателен за помощь.
Спасибо.

Hugo121


Ставите на лист контролы текстбокс и листбокс. Куда угодно, ширину по вкусу, чтоб удобно было.
В C8 и далее правее формулу

=VLOOKUP($B$8,Тарифы!$B:$H,COLUMN()-1,0)

там есть в источнике скрытый столбец, скорректируйте.

Далее в модуль первого листа код:


Option Explicit


Private Sub ListBox1_Click()
    Me.TextBox1.Visible = False
    Me.ListBox1.Visible = False
    ActiveCell = ListBox1.List(ListBox1.ListIndex, 1)
End Sub

Private Sub TextBox1_Change()
    Dim iLastRow As Long, X As Long, i&
    iLastRow = Sheets(2).Cells(Rows.Count, 2).End(xlUp).Row
    Me.ListBox1.Clear
    If Len(Me.TextBox1) <> 0 Then
        Me.ListBox1.Visible = True
        X = 0
        With ListBox1
            For i = 2 To iLastRow
                If UCase(Sheets(2).Cells(i, 2)) Like "*" & UCase(Me.TextBox1) & "*" Then
                    .AddItem ""
                    .List(X, 1) = Sheets(2).Cells(i, 2).Value
                    X = X + 1
                End If
            Next
        End With
    Else
        Me.ListBox1.Visible = False
    End If
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target <> Range("B8") Then Exit Sub
    Me.TextBox1.Text = ""
    Me.TextBox1.Top = ActiveCell.Top
    Me.TextBox1.Visible = True

    Me.ListBox1.Top = ActiveCell.Top + 30
    TextBox1.Activate
    Cancel = True

End Sub


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Me.TextBox1.Visible = False
    Me.ListBox1.Visible = False
End Sub


И теперь смело даблклик в B8.

Файл показать не могу - но на Вашем всё работает.
webmoney: E265281470651 Z422237915069

Gago Ns

Спасибо за ответ.
Про планету эксель - я, действительно, зашел, скопировал текст, но ответа не заметил.

Hugo121

Тут всюду разное время, можно и ошибиться - но кажется я тут ответ написал за 40 минут до создания темы там.
Если не так - извиняюсь :)
Получилось?
Если что - вот ещё варианты на доработку:
http://www.excelworld.ru/forum/10-10821-1
webmoney: E265281470651 Z422237915069

Gago Ns

Господин, Hugo121!
Премного благодарен за ответ, и если Вас не затруднит, распишите, пожалуйста, алгоритм действий более развернуто и используя простые слова ))).
К сожалению, я не смог применить написанные вами формулы. (((

Спасибо!

Hugo121

#5
Развёрнутее уже и некуда... И формула всего одна, стандартная и простая...
Если будет время постараюсь и дома файл сделать и сюда кинуть.

Сделал файл. Двойной клик в ячейке, в окне начинаете вводить город, далее выбираете из предложенных.
webmoney: E265281470651 Z422237915069

Gago Ns

Всё работает!  :D
Огромное спасибо!
Моя работая почта - Naturrecept@mail.ru - с радостью помогу по любым вопросам, связанным с лекарствами.

П.с. только еще один вопрос: из выплывающего списка выбирать приходится мышкой, а есть возможность выбора с помощью клавиатуры (стрелками, энтером или табом) ?

Hugo121

В этой реализации такой возможности нет. Другой реализации не знаю.
webmoney: E265281470651 Z422237915069

Gago Ns

Господин, Hugo!
Еще раз спасибо Вам за помощь!

Gago Ns

Еще один вопрос:
Заданная ширина всплывающего окна (контролбокса) после каждого сохранения уменьшается, доходя до нечитабельного состояния, и приходится время от времени заходить в конструктор и увеличивать размер окна.
Хотелось узнать, с чем это связано и можно ли это предотвратить ?

Спасибо.

Gago Ns

Уменьшение текстбокса происходит также в процессе работы.
Т.е. если поискать подряд 20 городов, то окно текст бокса уменьшиться значительно.


Hugo121

Не знаю, я такого эффекта не наблюдаю.
Но можно подстраховаться:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target <> Range("B8") Then Exit Sub
    Me.TextBox1.Text = ""
    Me.TextBox1.Top = ActiveCell.Top
   
    Me.TextBox1.Width = ActiveCell.Width
    Me.ListBox1.Width = ActiveCell.Width
   
    Me.TextBox1.Visible = True
    Me.ListBox1.Top = ActiveCell.Top + 30
    TextBox1.Activate
    Cancel = True
End Sub

Вот добавил две строки - пользуйтесь.
webmoney: E265281470651 Z422237915069