Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/58: Рейтинг темы: голосов - 58, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 6

Проблема с ComboBox (Excel)

28.12.2010, 17:19. Показов 11387. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Спецы, помогите.

Сделал простенький ComboBox в Екселе, все вроде нормально работает, но есть одна проблема - когда я открываю файл с этим ComboBox, то списка позиций в нем нет (он просто пустой). Оживить ComboBox можно, только если вручную запустить макрос из VB Editor.

В чем тут проблема? Почему ComboBox не запукается сразу при открытии файла.

Вот макрос для этого ComboBox'а:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Private Sub UserForm_Initialize()
 
    ComboBox1.AddItem '11'
    ComboBox1.AddItem '22'
    ComboBox1.AddItem '33'
    ComboBox1.AddItem '44'
    ComboBox1.AddItem '55'
    ComboBox1.AddItem '66'
 
    '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
End Sub
 
Private Sub ComboBox1_Change()
   
Select Case ComboBox1.Value
    Case 0
        Worksheets('System_eval').Range('c17') = Worksheets('System Calculate').Range('O76')
        Worksheets('System_eval').Range('d17') = Worksheets('System Calculate').Range('J76')
    Case 1
        Worksheets('System_eval').Range('c17') = Worksheets('System Calculate').Range('O78')
        Worksheets('System_eval').Range('d17') = Worksheets('System Calculate').Range('J78')
    Case 2
        Worksheets('System_eval').Range('c17') = Worksheets('System Calculate').Range('O79')
        Worksheets('System_eval').Range('d17') = Worksheets('System Calculate').Range('J79')
    Case 3
        Worksheets('System_eval').Range('c17') = Worksheets('System Calculate').Range('O81')
        Worksheets('System_eval').Range('d17') = Worksheets('System Calculate').Range('J81')
    Case 4
        Worksheets('System_eval').Range('c17') = Worksheets('System Calculate').Range('O82')
        Worksheets('System_eval').Range('d17') = Worksheets('System Calculate').Range('J82')
    Case 5
        Worksheets('System_eval').Range('c17') = Worksheets('System Calculate').Range('O85')
        Worksheets('System_eval').Range('d17') = Worksheets('System Calculate').Range('J85')
    End Select
    
End Sub
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.12.2010, 17:19
Ответы с готовыми решениями:

Проблема с OLEObject, Forms.ComboBox, DropDown
Здравствуйте! Вопрос такой: на листе находится Forms.ComboBox. В начале Visible = False. при правом щелчке, если этот щелчок на...

Работа с ComboBox в Excel
Хотелось бы реализовать одну вещь по средствам ComboBox в Excel: Имеется табличка в БД в которой есть задания для выполнения и id этих...

Combobox и диапазон ячеек в Excel
Используется лист1 экселя, как миниатюрная база данных. На листе2 есть списки с данными, которые отображаются в Combobox-ах на форме....

13
14 / 14 / 2
Регистрация: 23.03.2010
Сообщений: 635
28.12.2010, 17:48
Это должно решить проблему
Visual Basic
1
2
3
Private Sub Workbook_Open()
UserForm.Show
End Sub
0
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 6
28.12.2010, 18:41  [ТС]
И куда это вставлять?
Я вставил в начале макроса, выдало ошибку Runtime Error '424'. Object required
0
0 / 0 / 3
Регистрация: 28.01.2010
Сообщений: 279
28.12.2010, 18:42
Сдается мне непоможет! У тебя где он расположен на форме или на листе?
если на листе, то форма к нему не имеет никакого отношения. Тебе при старте книги нужно принудительно запускать макрос заполнения комбика. Вынеси свой код из кода Initialize и поставь в модуле в обычную Sub а потом как и писал vlth в событии Private Sub Workbook_Open()
вызови эту Sub.
0
14 / 14 / 2
Регистрация: 23.03.2010
Сообщений: 635
28.12.2010, 19:23
Если ComboBox всё-таки на форме, строку UserForm.Show перепиши на ИмяТвоейФормы.Show

Код нужно размещать в модуле ЭтаКнига.
0
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 6
28.12.2010, 19:40  [ТС]
Спасибо всем за помощь!
to XPraptor: да, ComboBox расположен на листе обычной книги. Честно говоря не совсем понял твой совет...В VB я пока не очень разбираюсь... Если не сложно, не мог бы ты написать, как должен выглядет новый макрос (я так понимаю, нужно изменить только его первую часть)...

Спасибо всем снова!
0
0 / 0 / 0
Регистрация: 26.12.2010
Сообщений: 10
28.12.2010, 19:52
Если на листе то можно по хелпу сделать так:
Создание списка
Выделите диапазон данных, из которых необходимо создать список.
Примечание. Можно также выбрать диапазон ячеек, которые будут заданы в качестве списка, используя диалоговое окно Создание списка.

В меню Данные выберите пункт Список, а затем команду Создать список.
Если у выбранных данных есть заголовки, установите флажок Список с заголовками и нажмите кнопку OK.
Выбранный диапазон данных выделяется индикатором списка, а на панели инструментов Список становится доступной большая часть общих функциональных возможностей, связанных со списком.

Примечание. Чтобы отобразить панель инструментов Список, в меню Вид выберите Панели инструментов и щелкните Список.

После создания списка он будет выделен синей границей. Кроме того, в каждый столбец списка автоматически добавляется раскрывающийся автофильтр, а вниз списка помещается строка ввода. Если при помощи кнопки Переключить строку итогов панели инструментов Список будет добавлена строка итогов, то она будет отображаться под строкой ввода.

При выборе ячейки, строки или столбца вне списка он становится неактивным. Неактивный список окружен синей границей, и для него не отображаются строка ввода и раскрывающиеся автофильтры.

Примечание. Чтобы граница списка не отображалась, в меню Список выберите Скрывать границы неактивных списков.

И почти аналогично можно и на форме.
0
14 / 14 / 2
Регистрация: 23.03.2010
Сообщений: 635
28.12.2010, 19:58
1. В модуле ЭтаКнига:
Visual Basic
1
2
3
Private Sub Workbook_Open()
ПроцедураЗаполненияКомбобокса
End Sub
2. В стандартном модеуле:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub ПроцедураЗаполненияКомбобокса()
With Sheets(1).ComboBox1
    .AddItem '11'
    .AddItem '22'
    .AddItem '33'
    .AddItem '44'
    .AddItem '55'
    .AddItem '66'
    .ListIndex = 0
End With
End Sub
0
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 6
28.12.2010, 21:17  [ТС]
Спасибо, vlth. Вроде заработало все как надо...
Еще такой вопрос - сложно ли сделать так, что бы этот комбокс 'отслеживал' изменения координат ячеек с исходными данными или ячеек, куда вставляются данные, при их перемещении (например, банально добавили строку или столбец перед данными ячейками, и этот комбокс уже не будет нормально работать)
0
14 / 14 / 2
Регистрация: 23.03.2010
Сообщений: 635
28.12.2010, 21:31
Не понял я твоего последнего вопроса:
-исходные данные для чего?
-почему ComboBox должен перестать работать?
0
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 6
28.12.2010, 22:09  [ТС]
Ну, может, я не совсем правильно выразился...
Комбокс будет работать, но...
Например, мой комбокс вставляет данные в строго определенные ячейки таблицы. Если над этой таблицей вставить одну или несколько строк, таблица опуститься вниз, и комбокс будет вставлять данные уже не в нужные ячейки, а в ячейки, например, с заголовками, или вообще 'мимо' таблицы.
Как с эти можно бороться?

И еще тут у меня какая-то ерунда выходит - на этом же листе я создал еще один комбокс. Логика его работы абсолютно такая же, как и у первого, только пуктов меньше, и работает с другими ячейками. Список выбора создается нормально, но почему-то те ячейки, куда должны вставлятся данные, остаются пустыми... В чем может быть дело?
0
14 / 14 / 2
Регистрация: 23.03.2010
Сообщений: 635
29.12.2010, 12:14
Бороться с этим можно разными путями:
1. Защитить лист от изменений, разрешив изменение необходимых ячеек
или снимая защиту при вводе данных на лист программно.
2. Отключить пункты меню в панелях инструментов и запретить изменение панелей.
3. Запретить выделение любого диапазона над таблицей.
4. Присвоить при открытии книги значение глобальной объектной
переменной ссылку на диапазон, представляющий таблицу с соответствующей
корректировкой кода заполнения ячеек таблицы.
5. Кажется, я перечислил далеко не всё ))
1
14 / 14 / 2
Регистрация: 23.03.2010
Сообщений: 635
29.12.2010, 12:22
По второй части вопроса:
Проверь внимательно, откуда ты берёшь данные и куда их 'вставляешь'.
0
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 6
29.12.2010, 15:28  [ТС]
Спасибо за советы...
По поводу последней проблемки - причину я нашел. Все ссылки там были правильные, необходимо было в свойствах комбокса изменить параметр BoundColumn c 1 на 0 (хотя странно - когда я делал первый комбокс, там этот параметр уже был равен 0).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.12.2010, 15:28
Помогаю со студенческими работами здесь

Как в Excel создать combobox?
Как в Excel Создать combo-box???? Но не средствами VBA а самим екселем? всмысле в ячейке - комбо бокс с значениями 'да' или 'нет' и...

Работа с combobox и ячейкам excel
Очень нужна помощь. Есть задание написать программу для excel в vba. Нужно заполнить combobox значениями ячейки. Вопрос: есть такая...

Вопрос по VBA, EXCEL.COMBOBOX
Помогите разрешить след. проблему: на рабочем листе EXCEL находится COMBOBOX (форма на используется), с помощью которого...

Сортировка списка в Combobox-е (Excel)
Подскажите пожалуйста как отсортировать список в ComboBox(e). Можно даже извращенским способом через внесение в ячейки рабочего листа...

Вопрос по ComboBox, Timer, DropDown, Excel
Эст ComboBox1 на форме и код: Private Sub ComboBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru