![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 19.10.2012
Сообщений: 217
|
![]()
Помогите пожалуйста!
Нужно добавить в макрос функцию поиска по первым буквам. Чтобы я начал набирать фамилию, а она сортировалась в списке. Потом после выбора фамилии она добавлялась в ячейку. Список будет большой.Макрос у меня в колонке H, а мне нужно еще в колонки J , R , V . Помогите пожалуйста, уже неделю сижу и ничего не получается. ![]() |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 30.01.2008
Сообщений: 314
|
![]()
вот одна из моих разработок:
на листе форма заполняется анкета, напротив некот ячеек, например, фамилия - выскакивает окно списка, в котором реализован необходимый вам алгоритм. его можно реализовать и для списка проверки данных с некот ограничениями. на листе справочники - источники для списков. попробуйте разобраться, хотя это и не совсем просто ![]() |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 30.01.2008
Сообщений: 314
|
![]()
ps
при выделении ячейки запускается программа получения списка с листа справочники: Код:
при наборе букв в листбоксе, список начинает фильтроваться: Код:
при очень больших списках можно с каждой набранной буквой фильровать не с исходного массива lst? а уже отфильтрованный rez, который будет становиться все короче и короче. при огромных списках я их индексировал и начинал фильтровать только начиная с ввода не мене 3х символов.. Последний раз редактировалось slan; 22.10.2012 в 12:53. |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 19.10.2012
Сообщений: 217
|
![]()
В необходимые столбцы добавил. А вот как сделать поиск незнаю.
Вот что у меня получилось Private Sub Worksheet_Change(ByVal Target As Range) Dim lReply As Long, i As Integer Dim counter As Integer, MyName As String, NameRange As String If Target.Cells.Count > 1 Then Exit Sub If Target.Column = "8" Then If IsEmpty(Target) Then Exit Sub counter = Len(Target) MyName = Left(Target, counter) For i = 1 To Range("People").Count NameRange = Left(Range("People").Cells(i), counter) If LCase(NameRange) = LCase(MyName) Then Application.EnableEvents = False Application.EnableEvents = True Exit For End If Next If WorksheetFunction.CountIf(Range("Pe ople"), Target) = 0 Then lReply = MsgBox("Добавить введенное имя " & _ Target & " в выпадающий список?", vbYesNo + vbQuestion) If lReply = vbYes Then Range("People").Cells(Range("People ").Rows.Count + 1, 1) = Target Range("People").Resize(Range("Peopl e").Rows.Count + 1).Name = "People" Range("People").Sort Key1:=Range("AD12"), _ Order1:=xlAscending, Header:=xlNo Else Target = "" End If End If End If If Target.Column = "10" Then If IsEmpty(Target) Then Exit Sub counter = Len(Target) MyName = Left(Target, counter) For i = 1 To Range("People").Count NameRange = Left(Range("People").Cells(i), counter) If LCase(NameRange) = LCase(MyName) Then Application.EnableEvents = False Application.EnableEvents = True Exit For End If Next If WorksheetFunction.CountIf(Range("Pe ople"), Target) = 0 Then lReply = MsgBox("Добавить введенное имя " & _ Target & " в выпадающий список?", vbYesNo + vbQuestion) If lReply = vbYes Then Range("People").Cells(Range("People ").Rows.Count + 1, 1) = Target Range("People").Resize(Range("Peopl e").Rows.Count + 1).Name = "People" Range("People").Sort Key1:=Range("AD12"), _ Order1:=xlAscending, Header:=xlNo Else Target = "" End If End If End If If Target.Column = "18" Then If IsEmpty(Target) Then Exit Sub counter = Len(Target) MyName = Left(Target, counter) For i = 1 To Range("People").Count NameRange = Left(Range("People").Cells(i), counter) If LCase(NameRange) = LCase(MyName) Then Application.EnableEvents = False Application.EnableEvents = True Exit For End If Next If WorksheetFunction.CountIf(Range("Pe ople"), Target) = 0 Then lReply = MsgBox("Добавить введенное имя " & _ Target & " в выпадающий список?", vbYesNo + vbQuestion) If lReply = vbYes Then Range("People").Cells(Range("People ").Rows.Count + 1, 1) = Target Range("People").Resize(Range("Peopl e").Rows.Count + 1).Name = "People" Range("People").Sort Key1:=Range("AD12"), _ Order1:=xlAscending, Header:=xlNo Else Target = "" End If End If End If If Target.Column = "22" Then If IsEmpty(Target) Then Exit Sub counter = Len(Target) MyName = Left(Target, counter) For i = 1 To Range("People").Count NameRange = Left(Range("People").Cells(i), counter) If LCase(NameRange) = LCase(MyName) Then Application.EnableEvents = False Application.EnableEvents = True Exit For End If Next If WorksheetFunction.CountIf(Range("Pe ople"), Target) = 0 Then lReply = MsgBox("Добавить введенное имя " & _ Target & " в выпадающий список?", vbYesNo + vbQuestion) If lReply = vbYes Then Range("People").Cells(Range("People ").Rows.Count + 1, 1) = Target Range("People").Resize(Range("Peopl e").Rows.Count + 1).Name = "People" Range("People").Sort Key1:=Range("AD12"), _ Order1:=xlAscending, Header:=xlNo Else Target = "" End If End If End If End Sub Может кто знает? ![]() |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Создать односвязный список и вывести его на экран. Из этого списка создать новый список по указанному ниже правилу и новый список | San111 | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 15.05.2012 22:08 |
открытие нескольких книг одним макросом и закрытие книг другим макросом | kursant95 | Microsoft Office Excel | 6 | 27.01.2011 16:54 |
Список с заглавным звеном, из текстового файла получить список из записей и по нему уже сделать задание | Zigfried | Помощь студентам | 2 | 04.10.2010 20:29 |
Раскрывающийся список значений, макросом. | Flangini | Microsoft Office Excel | 13 | 22.06.2009 17:01 |
Данные-проверка-список (список на другом листе) | Inbox | Microsoft Office Excel | 7 | 26.12.2008 01:43 |