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

Как создать связные списки на одной форме VBA?

27.05.2011, 11:48. Показов 3074. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возникла такая проблема:
на одной форме необходимо разместить два комбобокса, причем после выбора значения в первом комбобоксе (например, значение 1) во второй комбобокс должен подгружаться определенный список значений (список 1)

Насколько я понимаю, у меня некорректно обрабатываются события, потому что вот такой вариант кода не работает:
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
Private Sub TypeCB_change()
 
Select Case TypeCB.Value
    Case ThisWorkbook.Worksheets("list").Cells(7, 1).Value
             For Each rgSType In ThisWorkbook.Worksheets("list").Range("i1").CurrentRegion.Cells
                 NewComplaintInd.SubTypeCB.AddItem rgSType.Value
             Next rgSType
    Case ThisWorkbook.Worksheets("list").Cells(7, 2).Value
            For Each rgSType In ThisWorkbook.Worksheets("list").Range("k1").CurrentRegion.Cells
                 NewComplaintInd.SubTypeCB.AddItem rgSType.Value
             Next rgSType
    Case ThisWorkbook.Worksheets("list").Cells(7, 3).Value
            For Each rgSType In ThisWorkbook.Worksheets("list").Range("m1").CurrentRegion.Cells
                 NewComplaintInd.SubTypeCB.AddItem rgSType.Value
             Next rgSType
    Case ThisWorkbook.Worksheets("list").Cells(7, 4).Value
            For Each rgSType In ThisWorkbook.Worksheets("list").Range("o1").CurrentRegion.Cells
                 NewComplaintInd.SubTypeCB.AddItem rgSType.Value
            Next rgSType
End Select
 
End Sub
 
Private Sub CancelButton_Click()
 
 Unload Me
 
End Sub
 
Private Sub nextButton_Click()
Dim rgSType As Range
    
 
    If NameBox.Value = "" Then
        MsgBox ("Enter customer name")
    Else
    
        If TypeCB.Value = "" Then
            MsgBox ("Enter Type")
        Else
            
            If (SubTypeCB = "") And (SubTypeTB = "") Then
                MsgBox ("Enter subtype")
            Else
            
                If ChannelCB.Value = "" Then
                    MsgBox ("Select channel")
                Else
                
                            '========= проверили, что все заполнено, поехали дальше, про защиту не забыли
                            
                            
                            ThisWorkbook.Worksheets("complaints").Unprotect
                            'ThisWorkbook.Worksheets("complaints").Range("12:12").AutoFilter
                            
                            Dim Total As Range
                            Dim Rcount As Integer
                            Dim LastRow As Range
                            
                            Set Total = ThisWorkbook.Worksheets("complaints").Range("a12")
                            Rcount = NumberComplaint
                            Set LastRow = Total.Resize(1).Offset(Rcount)
                            
                            '========== тут начинаем заполнять строку
                            
                        
                        LastRow.Cells(1, 1) = CompanyCB.Value
                        LastRow.Cells(1, 2) = NameBox.Value
                        LastRow.Cells(1, 3) = TypeCB.Value
                            If SubTypeCB.Value <> "" Then
                                         LastRow.Cells(1, 4) = SubTypeCB.Value
                                     Else
                                         LastRow.Cells(1, 4) = SubTypeTB.Value
                            End If
                        LastRow.Cells(1, 5) = ChannelCB.Value
                        LastRow.Cells(1, 7) = Now
 
                            NewComplaintInd.Hide
                            IndCorp.Hide
                            NewComplaint2.Show
                           
 
                End If
            End If
        End If
    End If
    
    
    
End Sub
PS
Просьба не закидывать тапками, я только учусь прогать)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.05.2011, 11:48
Ответы с готовыми решениями:

Связные списки в подчиненной форме
Есть форма &quot;Приобретенные товары&quot;. Там списки связные работают (выбираем группу товаров, в списке наименований только товары выбранной...

Как создать списки на основе указателей в VBA?
Есть ли процедура аналогичная паскалевской new(p)? И вообще возможно ли создать на основе указателей в VBA списки, стек и очередь вручную? ...

Создать списки товаров, выпускаемых как одной, так и другой фирмой
Дан список, содержащий перечень товаров, производимых концернами SHARP и LG. Создать списки товаров, выпускаемых как одной, так и другой...

2
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
27.05.2011, 12:47
По порядковому номеру элемента в комбобоксе:

Visual Basic
1
2
3
4
5
'Заполняем первый комбобокс.
Private Sub CommandButton1_Click()
Me.ComboBox1.AddItem "text1"
Me.ComboBox1.AddItem "text2"
End Sub
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub ComboBox1_Change()
If Me.ComboBox1.ListIndex = 0 Then
    Me.ComboBox2.Clear
    Me.ComboBox2.AddItem "text1"
    Me.ComboBox2.AddItem "text2"
ElseIf Me.ComboBox1.ListIndex = 1 Then
    Me.ComboBox2.Clear
    Me.ComboBox2.AddItem "text3"
    Me.ComboBox2.AddItem "text4"
End If
End Sub

По тексту, отображаемому в комбобоксе:

Visual Basic
1
2
3
4
5
'Заполняем первый комбобокс.
Private Sub CommandButton1_Click()
Me.ComboBox1.AddItem "text1"
Me.ComboBox1.AddItem "text2"
End Sub
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub ComboBox1_Change()
If Me.ComboBox1.Value = "text1" Then
    Me.ComboBox2.Clear
    Me.ComboBox2.AddItem "text1"
    Me.ComboBox2.AddItem "text2"
ElseIf Me.ComboBox1.Value = "text2" Then
    Me.ComboBox2.Clear
    Me.ComboBox2.AddItem "text3"
    Me.ComboBox2.AddItem "text4"
End If
End Sub
0
SunnyShine
27.05.2011, 13:01
Общую идею уловила, if заменила на select, вместо текста - области с листа Excel.
Все работает, спасибо огромное)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.05.2011, 13:01
Помогаю со студенческими работами здесь

Как создать программу на одной форме?
Всем привет. Как можно реализовать программу на одной форме, что бы не всплывали новые окна и т.д.?? Таб контрол конечно помогает, но...

Как создать много действий в одной форме
Вообщем как должна выглядеть программа Появляется форма с вопросами. там 10 лучших фильмов(их популярность и.т.д.) статистика с 10...

Спрятать все поля/списки в форме одной кнопкой
Спрятать все поля/списки в форме одной кнопкой Как?

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

Связные списки
Доброго времени суток! как написать аналог этого узла Type Element = integer; Link = ^Node; Node = record Data: Element;...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru