powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel - два комбобокса с проверкой данных
6 сообщений из 6, страница 1 из 1
Excel - два комбобокса с проверкой данных
    #39385329
RegisteredUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги!
Есть вопрос такого плана:
- есть колонка (С1) с комбобоксами (Data - Validation) - тут элементы статичны
- есть вторая (С2) колонка с комбобоксами - тут должны элементы меняться в зависимости от выбора в С1

все возможные элементы у меня у меня лежат на листе и в принципе мне надо только менять RowSource

т.е. все просто: в С1 выбрали элемент в С2 должно заполнится данными

Меня интересует на какое событие повесить обработчик?
...
Рейтинг: 0 / 0
Excel - два комбобокса с проверкой данных
    #39385520
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Excel - два комбобокса с проверкой данных
    #39387145
RegisteredUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
big-dukeRegisteredUser,

http://stackoverflow.com/questions/4783019/can-i-use-vba-function-to-return-a-dynamic-list-of-acceptable-values-into-exce

пасиба
гляну
вчера смастерил эту шнягу
выложу сюда. мож кому надо будет тоже
...
Рейтинг: 0 / 0
Excel - два комбобокса с проверкой данных
    #39389701
RegisteredUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
немного накручено там у меня, но для рывка хватит.
не хочется чистить уже написанное.

Код: vbnet
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.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
'списки для инициализации Мастер-комбобокса и Подчиненного-комбобокса
'хранятся в rangename
'Например:
' - для значения в мастере  = 'BO' - подчиненный Range("rgBO")
' - для значения в мастере  = 'BO' - подчиненный Range("rgBO")
'...
' - для значения в мастере  = 'BX' - подчиненный Range("rgBX")

    Public Const RangeMasterCombo As String = "col_Master"          ' MASTER column - фактически это Rangename заголовка в таблице
    Public Const RangeSlaveCombo As String = "col_Slave"         ' SLAVE column  - фактически это Rangename заголовка в таблице




' этот код в коде Sheet 

Private Sub Worksheet_Change(ByVal Target As Range)
Dim prevTargetValue As String: prevTargetValue = ""
Dim curTargetValue As String: curTargetValue = ""
    
    If (Target.Column = Range(RangeMasterCombo ).Column) Then
        
        'MsgBox "Address:    " & Target.Address & "  Value = " & Target.Value
        
       ' - определяем значение которое было ДО изменения Мастер-ячейки
        On Error Resume Next
        Application.EnableEvents = False
            curTargetValue = Target.Value
        Application.Undo
            prevTargetValue = Target
            Target = curTargetValue
        Application.EnableEvents = True
        
        On Error GoTo 0
        
            Call ChangeComboBoxItems(RangeMasterCombo , RangeSlaveCombo, Target, prevTargetValue)
        
    End If
    
End Sub


' этот код можно в Module

Sub ChangeComboBoxItems(ByVal MasterRangeName As String, ByVal TargetRangeName As String, ByVal RangeCheck As Range, ByVal prevTargetValue As String)

Dim curRow As Long: curRow = 0
Dim curCol As Long: curCol = 0
Dim curValue As String: curValue = ""


MasterRangeName = Trim(MasterRangeName)

If (Len(MasterRangeName) > 0) Then

    If (Range(MasterRangeName).Column = RangeCheck.Column) Then
    
        On Error Resume Next
        If Not (RangeCheck Is Nothing) Then
            curRow = RangeCheck.Row
            curValue = Trim(RangeCheck.Value & "")
        End If
        On Error GoTo 0
        
        TargetRangeName = Trim(TargetRangeName)
        
        If (Len(TargetRangeName) > 0 And curRow > 0 And Len(curValue) > 0) Then
        
            curCol = Range(TargetRangeName).Column
            Cells(curRow, curCol).Select
            
            With Selection.Validation
                .Delete
                
                    If (UCase(prevTargetValue) <> UCase(curValue)) Then
                        ' if was change in Master Cell then clearing Target Cell
                        Cells(curRow, curCol).Value = ""
                    End If
                
' Formula1:="=rg" & curValue - в моем случае мастер-комбобокс возвращает часть rangename 
' из которого потом подтягиваются значения для подчиенного-комбобокса

                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:="=rg" & curValue
                .IgnoreBlank = True
                .InCellDropdown = True
                .InputTitle = ""
                .ErrorTitle = ""
                .InputMessage = ""
                .ErrorMessage = ""
                .ShowInput = True
                .ShowError = True
            End With
            
            Range("A1").Select
            
        End If
            
            If (Len(TargetRangeName) > 0 And curRow > 0 And Len(curValue) = 0) Then
                curCol = Range(TargetRangeName).Column
                Cells(curRow, curCol).Validation.Delete
                Cells(curRow, curCol).Value = ""
            End If
    
    
    End If '(MasterRangeName).Column
    
End If 'MasterRangeName

End Sub
...
Рейтинг: 0 / 0
Excel - два комбобокса с проверкой данных
    #39389712
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RegisteredUser,

А принципиально макросами? Такой вариант не подойдет: Связанные выпадающие списки
?
Просто не нашел ничего такого в задаче, про требовало бы городить огород с VBA. Возможно, это из-за отсутствия перед глазами примера данных.
...
Рейтинг: 0 / 0
Excel - два комбобокса с проверкой данных
    #39390202
RegisteredUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_PristRegisteredUser,

А принципиально макросами? Такой вариант не подойдет: Связанные выпадающие списки
?
Просто не нашел ничего такого в задаче, про требовало бы городить огород с VBA. Возможно, это из-за отсутствия перед глазами примера данных.

спасибо! гляну на Ваш пример.
Может и подойдет
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel - два комбобокса с проверкой данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]