Combobox vba excel как заполнить
Перейти к содержимому

Combobox vba excel как заполнить

  • автор:

Combobox vba excel как заполнить

Argument ‘Topic id’ is null or empty

Сейчас на форуме

© Николай Павлов, Planetaexcel, 2006-2023
info@planetaexcel.ru

Использование любых материалов сайта допускается строго с указанием прямой ссылки на источник, упоминанием названия сайта, имени автора и неизменности исходного текста и иллюстраций.

ООО «Планета Эксел»
ИНН 7735603520
ОГРН 1147746834949
ИП Павлов Николай Владимирович
ИНН 633015842586
ОГРНИП 310633031600071

Добавление уникального списка значений в поле со списком

В этих примерах показаны различные подходы к получению списка из электронной таблицы и его использованию для заполнения элемента управления полем со списком, используя только уникальные значения. В первом примере используется метод AdvancedFilter объекта Range, а во втором — объект Collection.

Пример кода, предоставляемый: Деннис Валлентин(Dennis Wallentin), VSTO & .NET & Excel

Sub Populate_Combobox_Worksheet() 'The Excel workbook and worksheets that contain the data, as well as the range placed on that data Dim wbBook As Workbook Dim wsSheet As Worksheet Dim rnData As Range 'Variant to contain the data to be placed in the combo box. Dim vaData As Variant 'Initialize the Excel objects Set wbBook = ThisWorkbook Set wsSheet = wbBook.Worksheets("Sheet1") 'Set the range equal to the data, and then (temporarily) copy the unique values of that data to the L column. With wsSheet Set rnData = .Range(.Range("A1"), .Range("A100").End(xlUp)) rnData.AdvancedFilter Action:=xlFilterCopy, _ CopyToRange:=.Range("L1"), _ Unique:=True 'store the unique values in vaData vaData = .Range(.Range("L2"), .Range("L100").End(xlUp)).Value 'clean up the contents of the temporary data storage .Range(.Range("L1"), .Range("L100").End(xlUp)).ClearContents End With 'display the unique values in vaData in the combo box already in existence on the worksheet. With wsSheet.OLEObjects("ComboBox1").Object .Clear .List = vaData .ListIndex = -1 End With End Sub 
Sub Populate_Combobox_Worksheet_Collection() 'The Excel workbook and worksheets that contain the data, as well as the range placed on that data Dim wbBook As Workbook Dim wsSheet As Worksheet Dim rnData As Range Dim vaData As Variant 'the list, stored in a variant Dim ncData As New VBA.Collection 'the list, stored in a collection Dim lnCount As Long 'the count used in the On Error Resume Next loop. Dim vaItem As Variant 'a variant representing the type of items in ncData 'Instantiate the Excel objects. Set wbBook = ThisWorkbook Set wsSheet = wbBook.Worksheets("Sheet2") 'Using Sheet2,retrieve the range of the list in Column A. With wsSheet Set rnData = .Range(.Range("A2"), .Range("A100").End(xlUp)) End With 'Place the list values into vaData. vaData = rnData.Value 'Place the list values from vaData into the VBA.Collection. On Error Resume Next For lnCount = 1 To UBound(vaData) ncData.Add vaData(lnCount, 1), CStr(vaData(lnCount, 1)) Next lnCount On Error GoTo 0 'Clear the combo box (in case you ran the macro before), 'and then add each unique variant item from ncData to the combo box. With wsSheet.OLEObjects("ComboBox1").Object .Clear For Each vaItem In ncData .AddItem ncData(vaItem) Next vaItem End With End Sub 

Об участнике

Деннис Валлентин является автором блога VSTO & .NET & Excel, в который основное внимание уделяется решениям платформа .NET Framework для Excel и службы Excel. Деннис разрабатывает решения Excel более 20 лет и также является соавтором книги «Professional Excel Development: The Definitive Guide to Developing Applications Using Microsoft Excel, VBA, and .NET (2nd Edition)».

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Класс ComboBox — комбинированный список в VBA

Класс ComboBox — комбинированный список в VBA

Макросы на VBA

Автор Coding На чтение 6 мин Просмотров 1.6к. Опубликовано 22.12.2014

Элемент управления ComboBox VBA языка позволяет формировать комбинированный список. Он предоставляет возможность, как выбирать готовые значения, так и вводить собственные данные. Вообще, стоит сказать, что робота со списками требует отдельной темы по определению, так как наиболее ярким примером создания сложных и комбинированных списков является — формирование базы данных.

Однако и тут есть один момент – большая часть возможностей языка VBA отходит на задний план. Даже продукт Microsoft Access (работа с базами данных), который в былые времена я скрупулезно изучал на уроках информатики, мне на практике ни разу не пригодился.

Поэтому, и в этой статье я не буду вникать во все премудрости компонента ComboBox.

Базовые свойства элемента управления ComboBox VBA языка:

  • ColumnCount – позволяет задать количество столбиков в списке
  • ColumnWidth – ширина столбиков
  • ColumnHeads – определяет, отображать (значение true) или не отображать (значение false) заголовки столбиков.
  • RowSource – позволяет задать диапазон для элементов списка
  • Value и Text – собственно, текущее значение, что хранится в списке.

Как и для компонента TextBox, для ComboBox главным событием является Change. Событие Change возникает при вводе данных в список.

Ладно, пора приступать к практике. Сначала мы напишем пример использования объекта языка VBA ComboBox в Excel, а потом в Word.

VBA ComboBox Excel

vba combobox excel

И так, добавьте в окно Проекта новый модуль и новую форму. Модуль назовите ComboBox, а форму – CB_Form, за имена отвечает свойство Name. В редакторе кода для модуля пропишите следующую процедуру:

Sub ComboBox() CB_Form.Show End Sub

Sub ComboBox() CB_Form.ShowEnd Sub

Процедура сделает форму видимой.

Теперь нужно приступить к созданию и настройке формы. Как она выглядит, вы можете просмотреть на картинке, но… для “слепого” браузера я ее опишу.

Параметры формы (UserForm): название (Caption) — работа с ComboBox в VBA, ширина – 340, высота – 190.

Параметры надписи (Label): Имя (Name) L_CB, свойство Caption оставляете пустым, ширина 324, высота 30, отступ слева и сверху равен 6.

Далее нам следует добавить четыре элемента управления vba ComboBox excel, разместите их так: по два в одну строку, имена для каждого компонента задайте такие: CB_A, CB_B, CB_C и CB_D. Я выбрал такие имена потому, что в каждом списке будет отображаться содержимое текущего листа Excel для колонок A, B, C и D.

Это важно. Позаботьтесь, что бы содержимое колонок A-B не было пустым и что бы количество в них элементов не было слишком огромным, достаточно 100 записей максимум. В противном случае у вас возникнут ошибки.

Для наглядности над каждым объектом ComBox vba можете поставить надписи вида: Ячейка А, Ячейка В и так далее.

В самом низу, разместите, кнопку с именем CommandButton1 и напишите на ней “Объединить”.

Ладно, теперь в редакторе кода для форму пропишите следующие процедуры:

Private Sub CommandButton1_Click() L_CB.Caption = CB_A.Value & " " & _ CB_B.Value & " " & _ CB_C.Value & " " & _ CB_D.Value End Sub Private Sub UserForm_Initialize() Dim oColumn As Range Dim oCell As Range 'Заполняем первый список Set oColumn = Columns("A") For Each oCell In oColumn.Cells If oCell.Value <> "" Then CB_A.AddItem oCell.Value End If Next CB_A.ListIndex = 0 'Заполняем второй список Set oColumn = Columns("B") For Each oCell In oColumn.Cells If oCell.Value <> "" Then CB_B.AddItem oCell.Value End If Next CB_B.ListIndex = 0 'Заполняем третий список Set oColumn = Columns("C") For Each oCell In oColumn.Cells If oCell.Value <> "" Then CB_C.AddItem oCell.Value End If Next CB_C.ListIndex = 0 'Заполняем четвертый список Set oColumn = Columns("D") For Each oCell In oColumn.Cells If oCell.Value <> "" Then CB_D.AddItem oCell.Value End If Next CB_D.ListIndex = 0 End Sub

Private Sub CommandButton1_Click()L_CB.Caption = CB_A.Value & » » & _CB_B.Value & » » & _CB_C.Value & » » & _CB_D.ValueEnd SubPrivate Sub UserForm_Initialize()Dim oColumn As RangeDim oCell As Range’Заполняем первый списокSet oColumn = Columns(«A»)For Each oCell In oColumn.CellsIf oCell.Value <> «» ThenCB_A.AddItem oCell.ValueEnd IfNextCB_A.ListIndex = 0’Заполняем второй списокSet oColumn = Columns(«B»)For Each oCell In oColumn.CellsIf oCell.Value <> «» ThenCB_B.AddItem oCell.ValueEnd IfNextCB_B.ListIndex = 0’Заполняем третий списокSet oColumn = Columns(«C»)For Each oCell In oColumn.CellsIf oCell.Value <> «» ThenCB_C.AddItem oCell.ValueEnd IfNextCB_C.ListIndex = 0’Заполняем четвертый списокSet oColumn = Columns(«D»)For Each oCell In oColumn.CellsIf oCell.Value <> «» ThenCB_D.AddItem oCell.ValueEnd IfNextCB_D.ListIndex = 0End Sub

Процедура CommandButton1_Click – тут происходит обработка клика по кнопке. После клика, произойдет считывание выбранных данных для каждого объекта ComboBox vba excel, далее, все четыре значения объединяются и записываются в содержимое свойства Caption объекта Надпись.

Процедура UserForm_Initialize – тут происходит заполнение списков содержимым колонок сразу после инициализации формы. Происходит выбор заданной колонки листа Excel, потом циклично идет перебор всех ее значений и их добавление (метод AddItem) в выбранный список.

VBA ComboBox Word

combobox word vba

Тут мы создадим список, состоящий из трех колонок, как он выглядит, можно посмотреть на рисунке. Не буду вникать во все премудрости, а сразу покажу код:

Private Sub UserForm_Initialize() With ComboBox1 .ColumnCount = 3 .ColumnWidths = "50;50;50" .ColumnHeads = False .RowSource = "" End With ComboBox1.AddItem "Украина" ComboBox1.List(0, 1) = "Киев" ComboBox1.List(0, 2) = "Украинский" ComboBox1.AddItem "Россия" ComboBox1.Column(1, 1) = "Москва" ComboBox1.Column(2, 1) = "руский" ComboBox1.AddItem "Белоруссия" ComboBox1.List(2, 1) = "Минск" ComboBox1.List(2, 2) = "русский" ComboBox1.ListIndex = 0 End Sub

Private Sub UserForm_Initialize()With ComboBox1.ColumnCount = 3.ColumnWidths = «50;50;50».ColumnHeads = False.RowSource = «»End WithComboBox1.AddItem «Украина»ComboBox1.List(0, 1) = «Киев»ComboBox1.List(0, 2) = «Украинский»ComboBox1.AddItem «Россия»ComboBox1.Column(1, 1) = «Москва»ComboBox1.Column(2, 1) = «руский»ComboBox1.AddItem «Белоруссия»ComboBox1.List(2, 1) = «Минск»ComboBox1.List(2, 2) = «русский»ComboBox1.ListIndex = 0End Sub

Как видим, при инициализации мы сначала заполняем свойства объекта ComboBox1 в блоке with … wend: три колонки, равной длины, заголовки отсутствуют. Далее происходит ручное заполнение списка. Как видим, элемент первой колонки добавляется с помощью метода AddItem, остальные колонки заполняются как массивы с помощью метода List.

Пример использования элемента управления ComboBox, метода AddItem и свойств Picture и PicturePosition

В следующем примере comboBox используется для отображения параметров размещения рисунков для элемента управления . Каждый раз, когда пользователь щелкает выбор списка, изображение и подпись обновляются в CommandButton. В этом примере кода также используется метод AddItem для заполнения вариантов ComboBox .

Чтобы воспользоваться этим примером, скопируйте данный пример кода в раздел описаний формы. Убедитесь, что эта форма содержит:

  • Метка с именем Label1.
  • Элемент CommandButton с именем CommandButton1.
  • Элемент ComboBox с именем ComboBox1.
Private Sub UserForm_Initialize() Label1.Left = 18 Label1.Top = 12 Label1.Height = 12 Label1.Width = 190 Label1.Caption = "Select picture placement " _ & "relative to the caption." 'Add list entries to combo box. The value of each 'entry matches the corresponding ListIndex value 'in the combo box. ComboBox1.AddItem "Left Top" 'ListIndex = 0 ComboBox1.AddItem "Left Center" 'ListIndex = 1 ComboBox1.AddItem "Left Bottom" 'ListIndex = 2 ComboBox1.AddItem "Right Top" 'ListIndex = 3 ComboBox1.AddItem "Right Center" 'ListIndex = 4 ComboBox1.AddItem "Right Bottom" 'ListIndex = 5 ComboBox1.AddItem "Above Left" 'ListIndex = 6 ComboBox1.AddItem "Above Center" 'ListIndex = 7 ComboBox1.AddItem "Above Right" 'ListIndex = 8 ComboBox1.AddItem "Below Left" 'ListIndex = 9 ComboBox1.AddItem "Below Center" 'ListIndex = 10 ComboBox1.AddItem "Below Right" 'ListIndex = 11 ComboBox1.AddItem "Centered" 'ListIndex = 12 'Use drop-down list ComboBox1.Style = fmStyleDropDownList 'Combo box values are ListIndex values ComboBox1.BoundColumn = 0 'Set combo box to first entry ComboBox1.ListIndex = 0 ComboBox1.Left = 18 ComboBox1.Top = 36 ComboBox1.Width = 90 ComboBox1.ListWidth = 90 'Initialize CommandButton1 CommandButton1.Left = 230 CommandButton1.Top = 36 CommandButton1.Height = 120 CommandButton1.Width = 120 'Note: Be sure to refer to a bitmap file that is 'present on your system, and to include the path 'in the filename. CommandButton1.Picture = _ LoadPicture("c:\windows\argyle.bmp") CommandButton1.PicturePosition = ComboBox1.Value End Sub Private Sub ComboBox1_Click() Select Case ComboBox1.Value Case 0 'Left Top CommandButton1.Caption = "Left Top" CommandButton1.PicturePosition = _ fmPicturePositionLeftTop Case 1 'Left Center CommandButton1.Caption = "Left Center" CommandButton1.PicturePosition = _ fmPicturePositionLeftCenter Case 2 'Left Bottom CommandButton1.Caption = "Left Bottom" CommandButton1.PicturePosition = _ fmPicturePositionLeftBottom Case 3 'Right Top CommandButton1.Caption = "Right Top" CommandButton1.PicturePosition = _ fmPicturePositionRightTop Case 4 'Right Center CommandButton1.Caption = "Right Center" CommandButton1.PicturePosition = _ fmPicturePositionRightCenter Case 5 'Right Bottom CommandButton1.Caption = "Right Bottom" CommandButton1.PicturePosition = _ fmPicturePositionRightBottom Case 6 'Above Left CommandButton1.Caption = "Above Left" CommandButton1.PicturePosition = _ fmPicturePositionAboveLeft Case 7 'Above Center CommandButton1.Caption = "Above Center" CommandButton1.PicturePosition = _ fmPicturePositionAboveCenter Case 8 'Above Right CommandButton1.Caption = "Above Right" CommandButton1.PicturePosition = _ fmPicturePositionAboveRight Case 9 'Below Left CommandButton1.Caption = "Below Left" CommandButton1.PicturePosition = _ fmPicturePositionBelowLeft Case 10 'Below Center CommandButton1.Caption = "Below Center" CommandButton1.PicturePosition = _ fmPicturePositionBelowCenter Case 11 'Below Right CommandButton1.Caption = "Below Right" CommandButton1.PicturePosition = _ fmPicturePositionBelowRight Case 12 'Centered CommandButton1.Caption = "Centered" CommandButton1.PicturePosition = _ fmPicturePositionCenter End Select End Sub 

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *