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

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

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

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

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

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

Код: 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
23.01.2017, 17:41
    #39389712
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - два комбобокса с проверкой данных
RegisteredUser,

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

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

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


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