Проблемы Combobox в Excel

     Рассмотрим довольно популярный элемент управления “Поле со списком”(Combobox). Если вы только недавно стали изучать Excel, то у вас могут возникнуть некоторые трудности при использовании этого элемента. У меня лично возникли. Попробуйте добавить combobox на рабочий лист Excel, для этого откройте вкладку Разработчик  (если у вас на ленте Excel 2007 нет этой вкладки, то нужно зойти в Главное меню (Кнопка Office, alt + A) – Параметры Excel – Основные параметры работы с Excel —  и установить галочку “Показывать вкладку Разроботчик на ленте”). Продолжим, открыли вкладку Разработчик и в группе “Элементы управления” – Вставить – Элемент ActiveX (для работы с VBA) – выбираем ”Поле со списком”  и растягиваем его на рабочем листе. Можете попытаться заполнить Combobox, для этого вам понадобиться немного изучить его свойства:  вкладка Разработчик, группа “Элементы управления” – Свойства… Единственное что у меня получилось — заполнить первую строку, используя Свойство Text (или Value), но ведь это совсем не то, что мы бы хотели получить, не так ли?

     Судя по всему Excel не поддерживает явное(я бы это назвал так) заполнение ”Поля со списком”, но ведь Excel программа — работа которой в большинтсве своих случаев построено на работе с ячейками. У Combobox, есть свойство ListFillRange, введите в него какой-нибудь диапазон ячеек, к примеру A1:A5. Если в этих ячейках были цифры от 1 до 5, то у вас получится Список, такой как на картинке.

 combobox     

     Единственное неудобство такого способо это то, что у вас на листе должны быть специальные ячейки, в которых будут храниться данные для Полей со списками. Скорее всего вам бы не хотелось, чтобы кто-то редактировал эти данные. Поэтому вам придётся, либо: 

  • делать цвет текста в ячейках = цвету фона, чтобы защитить их от любопытных глаз;
  • защищать их, способом описанным в статье Защита ячеек в Excel;
  • разместить их к примеру в ячейке ZZ999 

     Самый разумный из этих способов — второй(+первый) =)

     Хотелось бы отметить, что у меня был один файлик(проектик), в котором было два Combobox. Причем значения одного из них зависили от выбранного значения второго, к примеру:

combobox1combobox2

     Так вот, сохранив и закрыв этот файл, после его открытия появляется ошибка “Object doesn’t support this property or method (Error 438)“… Если кто-то знает как это исправить, прошу отписаться в комментариях… Вы можете проделать тоже самое у себя, вот код для Combobox1 (месяцы):

Private Sub ComboBox1_Change()
Select Case ComboBox1.ListIndex
Case 0, 2, 4, 6, 7, 9, 11
    Worksheets(”gualan”).ComboBox2.ListFillRange = “A1:A31″

Case 1
    Worksheets(”gualan”).ComboBox2.ListFillRange = “A1:A29″
Case Else
    Worksheets(”gualan”).ComboBox2.ListFillRange = “A1:A30″
End Select
End Sub

    Есть и другой способ заполнить Поле со список,  не использую ListFillRange — программное заполнение(с помощью макроса). Разумеется нам нужно, чтобы данные в Поле со списком появлялись сразу при открытии файла, поэтому способ с заполнением Combobox при нажатии определённой кнопки(CommandButton_Click) или Активации листа(выбора, Worksheet_Activate) нас не строит. Становится интуитивно понятно, что загрузку Combobox нужно привязывать к открытию книги, но как это сделать?

     Откройте редактор VBA (alt(зажать) + x(нажать и отпустить) + i) и в панели Project – VBAProject(если у вас нет этой панели, то нажмите ctrl+r) вы увидите Microsoft Excel Objects, далее названия всех ваших Листов и в конце “Эта книга”(на английском скорее всего ThisWorkbook section) – откройте её. Появится окно для редактирования событий привязанных к Книге (WorkBook), нам нужно событие Open. Введём туда код:

Private Sub Workbook_Open()
Worksheets(”gualan”).ComboBox2.Clear
For i = 1 To 32
Worksheets(”gualan”).ComboBox2.AddItem i
Next i
Worksheets(”gualan”).ComboBox1.Clear

Worksheets(”gualan”).ComboBox1.AddItem “январь”
//тоже самое для других месяцев
Worksheets(”gualan”).ComboBox1.AddItem “декабрь”
End Sub

     Теперь при открытии файла у нас будут заполнены оба Combobox. Я думаю вам не составит труда изменить макрос Combobox_Change, чтобы он работал правильно без использоваия ListFillRange. Как обычно, буду рад ответить на все ваши вопросы в комментариях.

»»Существует большое количество icq-клиентов для мобильных устройств, но самый известный и используемый клиент — это Jimm. Чтобы установить приложение jimm на nokia необходимо скачать и распаковать на компьютере архив с программой. Клиент jimm абсолютно бесплатен.

© Блог гордого владельца говносайтов – автор текста gualan.

Категория: Excel
Вы можете следить за изменениями этой записи через RSS 2.0 фид. Вы можете оставить комментарий, или трэкбек с вашего сайта.
Оставить комментарий