Доброго всем дня Уважаемые! Опять к вам за помощью! Сделал выпадающий список на основе элемента ActiveX. Вопрос :как сделать так , что бы курсор перемещался в ту ячейку таблицы, значение которого выбрано в окне выпадающего списка? [p.s.]на самом деле в таблице 20000 строк и не факт, что все они( в столбце С ) заполнены[/p.s.] [moder]Игорь, конкретно напиши - если там-то написано то-то, то при нажатии здесь курсор нужно переместить туда[/moder]
Доброго всем дня Уважаемые! Опять к вам за помощью! Сделал выпадающий список на основе элемента ActiveX. Вопрос :как сделать так , что бы курсор перемещался в ту ячейку таблицы, значение которого выбрано в окне выпадающего списка? [p.s.]на самом деле в таблице 20000 строк и не факт, что все они( в столбце С ) заполнены[/p.s.] [moder]Игорь, конкретно напиши - если там-то написано то-то, то при нажатии здесь курсор нужно переместить туда[/moder]китин
Конкретно нада вот так. в окне ActiveX написано к примеру 10000000030 надо чтобы курсор при нажaтии Enter переместился в ячейку С32 написано 10000000085 курсор в ячейку С87. а если эта ячейка еще и подсветится то будет вообще великолепно!
Конкретно нада вот так. в окне ActiveX написано к примеру 10000000030 надо чтобы курсор при нажaтии Enter переместился в ячейку С32 написано 10000000085 курсор в ячейку С87. а если эта ячейка еще и подсветится то будет вообще великолепно! китин
Не судите очень строго:я пытаюсь научиться ЯД 41001877306852
Сообщение отредактировал китин - Понедельник, 23.05.2016, 14:28
Ты про вот так? Позаимствовал индекс у Hugo, [vba]
Код
Private Sub ComboBox1_Change() If ComboBox1.ListIndex <= 0 Then Exit Sub Cells(ComboBox1.ListIndex + 3, 3).Select Columns("C:C").Interior.Pattern = xlNone Selection.Interior.ColorIndex = 8 End Sub
[/vba] Ну или с ПОИСКПОЗом [vba]
Код
Private Sub ComboBox1_Change() On Error Resume Next r_ = WorksheetFunction.Match(--ComboBox1.Value, Columns(3), 0) If Err.Number Then Exit Sub Columns("C:C").Interior.Pattern = xlNone Cells(r_, 3).Select Selection.Interior.ColorIndex = 8 End Sub
[/vba]
Индексом лучше.
Ты про вот так? Позаимствовал индекс у Hugo, [vba]
Код
Private Sub ComboBox1_Change() If ComboBox1.ListIndex <= 0 Then Exit Sub Cells(ComboBox1.ListIndex + 3, 3).Select Columns("C:C").Interior.Pattern = xlNone Selection.Interior.ColorIndex = 8 End Sub
[/vba] Ну или с ПОИСКПОЗом [vba]
Код
Private Sub ComboBox1_Change() On Error Resume Next r_ = WorksheetFunction.Match(--ComboBox1.Value, Columns(3), 0) If Err.Number Then Exit Sub Columns("C:C").Interior.Pattern = xlNone Cells(r_, 3).Select Selection.Interior.ColorIndex = 8 End Sub
В идеале очень хотелось бы так: Набираешь в окне ActiveX первые цифры/буквы, появляется выпадающее окно со списком из столбца С, который совпадает с набранными цифрами/буквами .Нажимаешь на нужный параметр, он появляется в окне ActiveX и одновременно курсор уходит на соответствующую ячейку и она подсвечивается каким либо цветом. Саша ругается на [vba]
В идеале очень хотелось бы так: Набираешь в окне ActiveX первые цифры/буквы, появляется выпадающее окно со списком из столбца С, который совпадает с набранными цифрами/буквами .Нажимаешь на нужный параметр, он появляется в окне ActiveX и одновременно курсор уходит на соответствующую ячейку и она подсвечивается каким либо цветом. Саша ругается на [vba]
конечно.( после того как прочитал) Второй твой вариант работает как надо. Завтра на большом файле попробую. Может получится соединить с файлом по сыылке. Спасибо господа !
конечно.( после того как прочитал) Второй твой вариант работает как надо. Завтра на большом файле попробую. Может получится соединить с файлом по сыылке. Спасибо господа ! китин
Не судите очень строго:я пытаюсь научиться ЯД 41001877306852
Набираешь в окне ActiveX первые цифры/буквы, появляется выпадающее окно со списком из столбца С, который совпадает с набранными цифрами/буквами
[vba]
Код
Private Sub ComboBox1_Change() Dim arr As Variant, r& With ComboBox1 If Len(.Value) = 0 Then Exit Sub arr = Application.Transpose([c3].Resize(Cells(Rows.Count, 2).End(xlUp).Row - 3).Value) On Error Resume Next .List = Filter(arr, ComboBox1.Value): .DropDown: DoEvents If UBound(.List) < 0 Then Application.SendKeys "{ESC}", 1 r = Application.Match(IIf(IsNumeric(.Value), --.Value, .Value), arr, 0) If r Then Application.Goto Range("C3")(r), 1 End With End Sub
Набираешь в окне ActiveX первые цифры/буквы, появляется выпадающее окно со списком из столбца С, который совпадает с набранными цифрами/буквами
[vba]
Код
Private Sub ComboBox1_Change() Dim arr As Variant, r& With ComboBox1 If Len(.Value) = 0 Then Exit Sub arr = Application.Transpose([c3].Resize(Cells(Rows.Count, 2).End(xlUp).Row - 3).Value) On Error Resume Next .List = Filter(arr, ComboBox1.Value): .DropDown: DoEvents If UBound(.List) < 0 Then Application.SendKeys "{ESC}", 1 r = Application.Match(IIf(IsNumeric(.Value), --.Value, .Value), arr, 0) If r Then Application.Goto Range("C3")(r), 1 End With End Sub
Всем доброго утра!!! Попытался соединить вместе оба макроса Андрея и первый макрос Саши (ту часть, что красит ячейку) Получилось вот так[vba]
Код
Private Sub ComboBox1_Change() Dim arr As Variant, r& With ComboBox1 If Len(.Value) = 0 Then Exit Sub arr = Application.Transpose([c3].Resize(Cells(Rows.Count, 2).End(xlUp).Row - 3).Value) On Error Resume Next .List = Filter(arr, ComboBox1.Value): .DropDown: DoEvents If UBound(.List) < 0 Then Application.SendKeys "{ESC}", 1 r = Application.Match(IIf(IsNumeric(.Value), --.Value, .Value), arr, 0) If r Then Application.Goto Range("C3")(r), 1 End With With ComboBox1 Application.Goto Range(.ListFillRange)(.ListIndex + 1), 1
End With Selection.Interior.ColorIndex = 8 End Sub
[/vba]
Все великолепно!!! Правда он оставляет ячейки окрашенными. А хотелось бы, что бы только одна ячейка была окрашена -активная. [p.s.]и традиционно: если не трудно прокомметируйте плз
Всем доброго утра!!! Попытался соединить вместе оба макроса Андрея и первый макрос Саши (ту часть, что красит ячейку) Получилось вот так[vba]
Код
Private Sub ComboBox1_Change() Dim arr As Variant, r& With ComboBox1 If Len(.Value) = 0 Then Exit Sub arr = Application.Transpose([c3].Resize(Cells(Rows.Count, 2).End(xlUp).Row - 3).Value) On Error Resume Next .List = Filter(arr, ComboBox1.Value): .DropDown: DoEvents If UBound(.List) < 0 Then Application.SendKeys "{ESC}", 1 r = Application.Match(IIf(IsNumeric(.Value), --.Value, .Value), arr, 0) If r Then Application.Goto Range("C3")(r), 1 End With With ComboBox1 Application.Goto Range(.ListFillRange)(.ListIndex + 1), 1
End With Selection.Interior.ColorIndex = 8 End Sub
[/vba]
Все великолепно!!! Правда он оставляет ячейки окрашенными. А хотелось бы, что бы только одна ячейка была окрашена -активная. [p.s.]и традиционно: если не трудно прокомметируйте плз китин
я совсем забыл сказать, что для корректной работы моего кода нужно в свойствах комбобокса нужно очистить свойство LisFfillRange и установить MatchEntry fmMatchEntryNone , немного переписал код, добавил комментарии [vba]
Код
Private Sub ComboBox1_Change() Dim arr As Variant, r&, v As Variant With ComboBox1 If Len(.Value) Then 'пишем в массив значения из диапазона от C3 до последней непустой ячейки в C:C arr = Application.Transpose([c3].Resize(Cells(Rows.Count, 2).End(xlUp).Row - 3).Value) 'Application.Transpose нужен для получения горизонтального массива, 'ибо функция Filter с вертикальными массивами работать отказывается
On Error Resume Next 'отключаем отлов ошибок 'очищаем список: задаем список массивом, фильтрованным по значению в ComboBox1: разворачиваем список .List = Array(): .List = Filter(arr, IIf(Len(.Value), .Value, "џ"), 1, 1): .DropDown: DoEvents 'если список пуст или значение не задано, "жмем" Escape, чтобы его свернуть и завершаем процедуру End If If UBound(.List) < 0 Or Len(.Value) = 0 Then Application.SendKeys "{ESC}", 1: DoEvents: .Activate: Exit Sub 'если в ComboBox1 числовое значение, конвертируем в число 'число, записанное текстом, тоже распознается как числовое If IsNumeric(.Value) Then v = --.Value Else v = .Value Err.Clear 'очищаем информацию об ошибке 'ищем значение ComboBox1 в массиве, и прокручиваем лист до соответствующей ячейки Application.Goto Range("C3")(Application.Match(v, arr, 0)), 1 End With If Err = 0 Then 'если значение было найдено 'снимаем окрашивание со столбца Columns("C:C").Interior.Pattern = xlNone 'красим ячейку Selection.Interior.ColorIndex = 8 End If End Sub
[/vba]
я совсем забыл сказать, что для корректной работы моего кода нужно в свойствах комбобокса нужно очистить свойство LisFfillRange и установить MatchEntry fmMatchEntryNone , немного переписал код, добавил комментарии [vba]
Код
Private Sub ComboBox1_Change() Dim arr As Variant, r&, v As Variant With ComboBox1 If Len(.Value) Then 'пишем в массив значения из диапазона от C3 до последней непустой ячейки в C:C arr = Application.Transpose([c3].Resize(Cells(Rows.Count, 2).End(xlUp).Row - 3).Value) 'Application.Transpose нужен для получения горизонтального массива, 'ибо функция Filter с вертикальными массивами работать отказывается
On Error Resume Next 'отключаем отлов ошибок 'очищаем список: задаем список массивом, фильтрованным по значению в ComboBox1: разворачиваем список .List = Array(): .List = Filter(arr, IIf(Len(.Value), .Value, "џ"), 1, 1): .DropDown: DoEvents 'если список пуст или значение не задано, "жмем" Escape, чтобы его свернуть и завершаем процедуру End If If UBound(.List) < 0 Or Len(.Value) = 0 Then Application.SendKeys "{ESC}", 1: DoEvents: .Activate: Exit Sub 'если в ComboBox1 числовое значение, конвертируем в число 'число, записанное текстом, тоже распознается как числовое If IsNumeric(.Value) Then v = --.Value Else v = .Value Err.Clear 'очищаем информацию об ошибке 'ищем значение ComboBox1 в массиве, и прокручиваем лист до соответствующей ячейки Application.Goto Range("C3")(Application.Match(v, arr, 0)), 1 End With If Err = 0 Then 'если значение было найдено 'снимаем окрашивание со столбца Columns("C:C").Interior.Pattern = xlNone 'красим ячейку Selection.Interior.ColorIndex = 8 End If End Sub
Я тоже на большой таблице - лучше заполнение комбобокса и поиск начинать после ввода 3-х - 4-х символов - тогда не будет тормозов. : [vba]
Код
If Len(.Value) < 3 Then Exit Sub
[/vba]
и - мне кажется - лучше не менять заливку ячеек - а изменять правило уф - тогда можно выделять ячейки столбца С при необходимости и макрос не будет убивать заливку. Кроме того если написать так: [vba]
Я тоже на большой таблице - лучше заполнение комбобокса и поиск начинать после ввода 3-х - 4-х символов - тогда не будет тормозов. : [vba]
Код
If Len(.Value) < 3 Then Exit Sub
[/vba]
и - мне кажется - лучше не менять заливку ячеек - а изменять правило уф - тогда можно выделять ячейки столбца С при необходимости и макрос не будет убивать заливку. Кроме того если написать так: [vba]