Помогите пожалуйста обуздать Код предложенный в этой ветке.
[vba]
Код
Option Explicit Option Compare Text Dim bu As Boolean, cl As Long
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.CountLarge > 1 Then Exit Sub Select Case Target.Column Case 4, 17 If Target.Row > 3 Then bu = True With Me.TextBox1 .Top = Target.Top: .Left = Target.Left: .Text = Target.Value: .Activate End With
With Me.ListBox1 .Top = Target.Top - 20: .Left = Target.Left + 143: .Clear End With cl = IIf(Target.Column = 4, 22, 25): bu = False Me.TextBox1.Visible = True: Me.ListBox1.Visible = True End If Case Else Me.TextBox1.Visible = False: Me.ListBox1.Visible = False End Select End Sub
Private Sub TextBox1_Change() Dim x, i As Long, txt As String, lt As Long, s As String If Len(TextBox1.Text) = 0 Or bu Then Exit Sub
txt = TextBox1.Text: lt = Len(TextBox1.Text) x = Columns(cl).SpecialCells(2).Value
For i = 1 To UBound(x, 1) ' ïîèñê ïî ïåðâûì áóêâàì If txt = Mid(x(i, 1), 1, lt) Then s = s & x(i, 1) & "~" Next i ListBox1.List = Split(s, "~") End Sub
Private Sub ListBox1_Click() If ListBox1.ListIndex = -1 Then Exit Sub bu = True ActiveCell.Value = ListBox1.Value Me.TextBox1.Text = ListBox1.Value bu = False End Sub
Sub tt() Application.EnableEvents = True End Sub
[/vba]
У меня выскакивает ошибка в этой строке.
[vba]
Код
x = Columns(cl).SpecialCells(2).Value
[/vba]
Но мне еще надо понять как указывать откуда брать данные для списка. Так как я хочу с любой страницы вызывать один и тот же список который расположен на одной странице.
Выбрал именно этот пример так как на страничке в оригинальном примере "ENTRYYY" подлагивает, толи дважды кликнуть надо то ли еще как подшаманить. Просто начать писать не выходит. А на страничке "ENTRY" можно сразу писать и он подсказывает. Только почему-то у меня не срабатывает ((((
Здравствуйте.
Помогите пожалуйста обуздать Код предложенный в этой ветке.
[vba]
Код
Option Explicit Option Compare Text Dim bu As Boolean, cl As Long
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.CountLarge > 1 Then Exit Sub Select Case Target.Column Case 4, 17 If Target.Row > 3 Then bu = True With Me.TextBox1 .Top = Target.Top: .Left = Target.Left: .Text = Target.Value: .Activate End With
With Me.ListBox1 .Top = Target.Top - 20: .Left = Target.Left + 143: .Clear End With cl = IIf(Target.Column = 4, 22, 25): bu = False Me.TextBox1.Visible = True: Me.ListBox1.Visible = True End If Case Else Me.TextBox1.Visible = False: Me.ListBox1.Visible = False End Select End Sub
Private Sub TextBox1_Change() Dim x, i As Long, txt As String, lt As Long, s As String If Len(TextBox1.Text) = 0 Or bu Then Exit Sub
txt = TextBox1.Text: lt = Len(TextBox1.Text) x = Columns(cl).SpecialCells(2).Value
For i = 1 To UBound(x, 1) ' ïîèñê ïî ïåðâûì áóêâàì If txt = Mid(x(i, 1), 1, lt) Then s = s & x(i, 1) & "~" Next i ListBox1.List = Split(s, "~") End Sub
Private Sub ListBox1_Click() If ListBox1.ListIndex = -1 Then Exit Sub bu = True ActiveCell.Value = ListBox1.Value Me.TextBox1.Text = ListBox1.Value bu = False End Sub
Sub tt() Application.EnableEvents = True End Sub
[/vba]
У меня выскакивает ошибка в этой строке.
[vba]
Код
x = Columns(cl).SpecialCells(2).Value
[/vba]
Но мне еще надо понять как указывать откуда брать данные для списка. Так как я хочу с любой страницы вызывать один и тот же список который расположен на одной странице.
Выбрал именно этот пример так как на страничке в оригинальном примере "ENTRYYY" подлагивает, толи дважды кликнуть надо то ли еще как подшаманить. Просто начать писать не выходит. А на страничке "ENTRY" можно сразу писать и он подсказывает. Только почему-то у меня не срабатывает ((((koyaanisqatsi
Private Sub TextBox1_Change() Dim x, i As Long, txt As String, lt As Long, s As String If Len(TextBox1.Text) = 0 Or bu Then Exit Sub txt = TextBox1.Text: lt = Len(TextBox1.Text) x = Range(Cells(1, 17), Cells(Rows.Count, 17).End(xlUp)) For i = 1 To UBound(x, 1) ' поиск по первым буквам If txt = Mid(x(i, 1), 1, lt) Then s = s & x(i, 1) & "~" Next i ListBox1.List = Split(s, "~") End Sub
[/vba]
А так ?[vba]
Код
Private Sub TextBox1_Change() Dim x, i As Long, txt As String, lt As Long, s As String If Len(TextBox1.Text) = 0 Or bu Then Exit Sub txt = TextBox1.Text: lt = Len(TextBox1.Text) x = Range(Cells(1, 17), Cells(Rows.Count, 17).End(xlUp)) For i = 1 To UBound(x, 1) ' поиск по первым буквам If txt = Mid(x(i, 1), 1, lt) Then s = s & x(i, 1) & "~" Next i ListBox1.List = Split(s, "~") End Sub
МВТ, Я хотел без дополнительного окна. Сложно объяснить на словах.
Хочется чтобы можно было с клавиатуры бегать по таблице и в нужном столбце бы автоматом вспомогательное окошко всплывало с подсказкой и в ячейке ввода программа бы старалась подсказать по первым символам какие еще есть варианты. Знаете как в проводнике реализовано если много файлов и на любой ткнуть и начать писать то он автоматом начнет спускаться по уже введенным буквам до файла с такими же первыми буквам. Вот что-то подобное хочется.
МВТ, Я хотел без дополнительного окна. Сложно объяснить на словах.
Хочется чтобы можно было с клавиатуры бегать по таблице и в нужном столбце бы автоматом вспомогательное окошко всплывало с подсказкой и в ячейке ввода программа бы старалась подсказать по первым символам какие еще есть варианты. Знаете как в проводнике реализовано если много файлов и на любой ткнуть и начать писать то он автоматом начнет спускаться по уже введенным буквам до файла с такими же первыми буквам. Вот что-то подобное хочется.koyaanisqatsi
doober, У вас кстати почти идеальная реализация. Мне кажется если ее еще чуть до идеала допилить можно в копилку знаний класть откуда я изначальный выцепил.
Что можно улучшить в последнем варианте.
В нужном столбце когда происходит ввод: 1. В нем уже должен появляться первый подходящий контрагент. 2. Выход из ячейки должен происходить по всем клавишам: мышка клик в другую ячейку, стрелки, ентер. При этом должен сохранять последний попавшийся контрагент. (Хотя может быть было бы идеальнее если бы стрелка вниз разрешала из списка выбрать нужный и по ентеру или стрелке в право или клику мышки выходило.)
Хочется запилить такой подбор контрагентов для диспетчеров. А они должны информацию вися на телефоне оперативно вбивать. Поэтому чем сильнее облегчится ввод тем спокойнее и комфортнее будет работа у диспетчера.
Спасибо.
doober, У вас кстати почти идеальная реализация. Мне кажется если ее еще чуть до идеала допилить можно в копилку знаний класть откуда я изначальный выцепил.
Что можно улучшить в последнем варианте.
В нужном столбце когда происходит ввод: 1. В нем уже должен появляться первый подходящий контрагент. 2. Выход из ячейки должен происходить по всем клавишам: мышка клик в другую ячейку, стрелки, ентер. При этом должен сохранять последний попавшийся контрагент. (Хотя может быть было бы идеальнее если бы стрелка вниз разрешала из списка выбрать нужный и по ентеру или стрелке в право или клику мышки выходило.)
Хочется запилить такой подбор контрагентов для диспетчеров. А они должны информацию вися на телефоне оперативно вбивать. Поэтому чем сильнее облегчится ввод тем спокойнее и комфортнее будет работа у диспетчера.