Добрый день, всем! Делаю сводную таблицу. Данных (строк) в ней нужно заполнять много, но многие из них шаблонные. Пытаюсь сделать выпадающий список в ячейке, но пока того, что нужно не добился. Прошу помощи! Вот пример кода, фаил так же приложил. [vba]
Код
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) If Sh.Name = "лист" Then Call dropList(Target) End Sub Sub dropList(iCell) Dim arrList() Dim lastRow As Integer Debug.Print iCell.Column Select Case iCell.Row Case "2" lastRow = Worksheets("данные").Cells(Rows.Count, 1).End(xlUp).Row ReDim arrList(lastRow) For i = 0 To lastRow arrList(i) = Worksheets("данные").Cells(i + 1, 1).Value Next i Case "3" lastRow = Worksheets("данные").Cells(Rows.Count - 1, 2).End(xlUp).Row ReDim arrList(lastRow) For i = 0 To lastRow arrList(i) = Worksheets("данные").Cells(i + 1, 2).Value Next i Case "4" lastRow = Worksheets("данные").Cells(Rows.Count - 1, 3).End(xlUp).Row ReDim arrList(lastRow) For i = 0 To lastRow arrList(i) = Worksheets("данные").Cells(i + 1, 3).Value Next i End Select If Worksheets("лист").Cells(iCell.Row, 1).Value <> "" And iCell.Column > 1 Then With Cells(iCell.Row, iCell.Column).Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Join(arrList, ",") .IgnoreBlank = True .InCellDropdown = True .ShowInput = True End With End If End Sub
[/vba] Выпадающий список работает, но не совсем так как хотелось бы. 1. Не могу понять, почему первый столбик - выпадающий список по идее эта строка должна отсечь его [vba]
Код
If Worksheets("лист").Cells(iCell.Row, 1).Value <> "" And iCell.Column > 1 Then
[/vba]
2. Как можно в этом списки прикрутить поиск, по мере ввода (аналог вебпоисковиков).
3. Не очень нравится сборка массива [vba]
Код
For i = 0 To lastRow arrList(i) = Worksheets("данные").Cells(i + 1, 1).Value Next i
[/vba] Если массив большой то будет долго собираться. Пробовал через Range, но там получается двумерный массив и подключить его "Formula1:=Join(arrList, ",")" не смог.
4. Сейчас определение сроки идет по номеру "Select Case iCell.Row", что не очень удобно, так как строки могут добавляться и удаляться. Пытался реализовать через имя ячеек в первом столбце [vba]
[/vba] Мол если у первого элемента строки имя "цвет", то цепляем столбец с цветами... но вылетает ошибка... думаю не верный подход..
5. Не сообразил, как можно добавить ввод элементов, которых нет в списке.
Буду раз, если подскажите что и как... а то я в тупике
Добрый день, всем! Делаю сводную таблицу. Данных (строк) в ней нужно заполнять много, но многие из них шаблонные. Пытаюсь сделать выпадающий список в ячейке, но пока того, что нужно не добился. Прошу помощи! Вот пример кода, фаил так же приложил. [vba]
Код
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) If Sh.Name = "лист" Then Call dropList(Target) End Sub Sub dropList(iCell) Dim arrList() Dim lastRow As Integer Debug.Print iCell.Column Select Case iCell.Row Case "2" lastRow = Worksheets("данные").Cells(Rows.Count, 1).End(xlUp).Row ReDim arrList(lastRow) For i = 0 To lastRow arrList(i) = Worksheets("данные").Cells(i + 1, 1).Value Next i Case "3" lastRow = Worksheets("данные").Cells(Rows.Count - 1, 2).End(xlUp).Row ReDim arrList(lastRow) For i = 0 To lastRow arrList(i) = Worksheets("данные").Cells(i + 1, 2).Value Next i Case "4" lastRow = Worksheets("данные").Cells(Rows.Count - 1, 3).End(xlUp).Row ReDim arrList(lastRow) For i = 0 To lastRow arrList(i) = Worksheets("данные").Cells(i + 1, 3).Value Next i End Select If Worksheets("лист").Cells(iCell.Row, 1).Value <> "" And iCell.Column > 1 Then With Cells(iCell.Row, iCell.Column).Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Join(arrList, ",") .IgnoreBlank = True .InCellDropdown = True .ShowInput = True End With End If End Sub
[/vba] Выпадающий список работает, но не совсем так как хотелось бы. 1. Не могу понять, почему первый столбик - выпадающий список по идее эта строка должна отсечь его [vba]
Код
If Worksheets("лист").Cells(iCell.Row, 1).Value <> "" And iCell.Column > 1 Then
[/vba]
2. Как можно в этом списки прикрутить поиск, по мере ввода (аналог вебпоисковиков).
3. Не очень нравится сборка массива [vba]
Код
For i = 0 To lastRow arrList(i) = Worksheets("данные").Cells(i + 1, 1).Value Next i
[/vba] Если массив большой то будет долго собираться. Пробовал через Range, но там получается двумерный массив и подключить его "Formula1:=Join(arrList, ",")" не смог.
4. Сейчас определение сроки идет по номеру "Select Case iCell.Row", что не очень удобно, так как строки могут добавляться и удаляться. Пытался реализовать через имя ячеек в первом столбце [vba]
4. Сейчас определение сроки идет по номеру "Select Case iCell.Row", что не очень удобно, так как строки могут добавляться и удаляться. Пытался реализовать через имя ячеек в первом столбце
4. Сейчас определение сроки идет по номеру "Select Case iCell.Row", что не очень удобно, так как строки могут добавляться и удаляться. Пытался реализовать через имя ячеек в первом столбце
Здравствуйте. 1. Там, видимо, список был создан раньше. Удалите его через проверку данных, больше он не появится 2. В этом списке никак. Вариант из Готовых решений или ещё вариант 3. см. файл 5. вариант
А зачем создавать списки макросом? Через проверку данных не вариант?
Здравствуйте. 1. Там, видимо, список был создан раньше. Удалите его через проверку данных, больше он не появится 2. В этом списке никак. Вариант из Готовых решений или ещё вариант 3. см. файл 5. вариант
А зачем создавать списки макросом? Через проверку данных не вариант?Pelena
А зачем создавать списки макросом? Через проверку данных не вариант?
Не силен я в стандартных средствах Excel, как то через VBA "думается легче". Да и не знаю как умные таблицы созданные через "данные" к макросам прикручивать.
2. В этом списке никак. Вариант из Готовых решений или ещё вариант 5. вариант
Готовые решения видел, но там есть два момента, которые "оттолкнули" от данной идеи 1. Постоянно висящее пустое окно, при активной ячейке, будет перекрывать часть информации 2. Не совсем тот вариант поиска, который хотел реализовать... хотел реализовать как тут, но без применение комбокса... как я понял такой вариант без комбокса не осуществить.
Очень много примеров видел, с фиксированной ячейкой в виде списка, а мне надо что бы список выпадал в активной ячейке
Пока вот думаю, что бы при активации ячейки поверх нее всплывал комбокс (минимальный, только поле ввода) и попробовать реализовать как на видео. По принципу... ткнули в ячейку для ввода текста, поверх нее открылся комбокс, в него ввели текст, нажали Ентер(или сняли выделение с ячейки), комбокс скрылся... значение записали в ячейке(или не записали, если не нажали ентер)...
Но как задать позицию комбокса относительно активной ячейки пока не знаю.
А зачем создавать списки макросом? Через проверку данных не вариант?
Не силен я в стандартных средствах Excel, как то через VBA "думается легче". Да и не знаю как умные таблицы созданные через "данные" к макросам прикручивать.
2. В этом списке никак. Вариант из Готовых решений или ещё вариант 5. вариант
Готовые решения видел, но там есть два момента, которые "оттолкнули" от данной идеи 1. Постоянно висящее пустое окно, при активной ячейке, будет перекрывать часть информации 2. Не совсем тот вариант поиска, который хотел реализовать... хотел реализовать как тут, но без применение комбокса... как я понял такой вариант без комбокса не осуществить.
Очень много примеров видел, с фиксированной ячейкой в виде списка, а мне надо что бы список выпадал в активной ячейке
Пока вот думаю, что бы при активации ячейки поверх нее всплывал комбокс (минимальный, только поле ввода) и попробовать реализовать как на видео. По принципу... ткнули в ячейку для ввода текста, поверх нее открылся комбокс, в него ввели текст, нажали Ентер(или сняли выделение с ячейки), комбокс скрылся... значение записали в ячейке(или не записали, если не нажали ентер)...
Но как задать позицию комбокса относительно активной ячейки пока не знаю.
Возможно городу огород и есть варианты проще Benos