Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Зависимые выпадающие списки - Страница 2 - Мир MS Excel

Старая форма входа
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Зависимые выпадающие списки (Макросы/Sub)
Зависимые выпадающие списки
doober Дата: Четверг, 26.08.2021, 08:54 | Сообщение № 21
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
вместо key = Key1 & "_" & Key2 & "_" & Key5 я прописал key = Key1 & "" & Key2 & "" & Key5 все работает

Для формирования ключа это не верное решение.Составной ключ должен быть разделен любым символом кроме пустоты


 
Ответить
Сообщение
вместо key = Key1 & "_" & Key2 & "_" & Key5 я прописал key = Key1 & "" & Key2 & "" & Key5 все работает

Для формирования ключа это не верное решение.Составной ключ должен быть разделен любым символом кроме пустоты

Автор - doober
Дата добавления - 26.08.2021 в 08:54
Santtic Дата: Четверг, 26.08.2021, 11:39 | Сообщение № 22
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 1 ±
Замечаний: 0% ±

Excel 2016
Составной ключ должен быть разделен любым символом кроме пустоты

Пересмотрел, оказалось в двух первых я допустил ошибку не прировнял [vba]
Код
Key"" =combobox""
[/vba] к стартовому комбобоксу и отсюда пошла не работающая форма. Исправил, теперь работает.
Но, на удивление она и тогда работала верно. Я массу вариаций перепробовал, и получал предполагаемый ответ. Может совпадение.
Сделал как вы сказали.
Спасибо большое.


Сообщение отредактировал Santtic - Четверг, 26.08.2021, 11:39
 
Ответить
Сообщение
Составной ключ должен быть разделен любым символом кроме пустоты

Пересмотрел, оказалось в двух первых я допустил ошибку не прировнял [vba]
Код
Key"" =combobox""
[/vba] к стартовому комбобоксу и отсюда пошла не работающая форма. Исправил, теперь работает.
Но, на удивление она и тогда работала верно. Я массу вариаций перепробовал, и получал предполагаемый ответ. Может совпадение.
Сделал как вы сказали.
Спасибо большое.

Автор - Santtic
Дата добавления - 26.08.2021 в 11:39
Santtic Дата: Суббота, 28.08.2021, 12:06 | Сообщение № 23
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 1 ±
Замечаний: 0% ±

Excel 2016
Добрый день. Столкнулся еще с одни вопросом. При "отключении" команды
В UserForm_Activate самая последняя строка
If C_is1.Count > 0 Then ComboBox7.ListIndex = 0

Кобм., не вставляет значения автоматом, дает выбор пользователю это сделать. Но когда в следующем комб. пусто, оператор соответственно игнорирует этот комб. и соответственно уже через один тоже нет ничего и так до конца.
При автомат заполнении такого не наблюдалось, было так : оператор выбрал первое значение в комб1. - форма сама занесла автоматом первые значение во все следующие комбобоксы, таким как записывались даже "пустые значения из пустых ячеек"
теперь стоит вопрос, каким образом можно осуществить запись в зависимые комбобоксы но при этом стартовый их вид имел пустое "окно", при нажатии на вниз падающее меню был выбор.
Спасибо, хорошего дня.
Пример прикрепил. в одном варианте все наполняется а в другом стопорится на втором комбобоксе. т.к. в промежуточном столбце нет данных
К сообщению приложен файл: 8849370.xlsm (50.3 Kb)


Сообщение отредактировал Santtic - Суббота, 28.08.2021, 13:48
 
Ответить
СообщениеДобрый день. Столкнулся еще с одни вопросом. При "отключении" команды
В UserForm_Activate самая последняя строка
If C_is1.Count > 0 Then ComboBox7.ListIndex = 0

Кобм., не вставляет значения автоматом, дает выбор пользователю это сделать. Но когда в следующем комб. пусто, оператор соответственно игнорирует этот комб. и соответственно уже через один тоже нет ничего и так до конца.
При автомат заполнении такого не наблюдалось, было так : оператор выбрал первое значение в комб1. - форма сама занесла автоматом первые значение во все следующие комбобоксы, таким как записывались даже "пустые значения из пустых ячеек"
теперь стоит вопрос, каким образом можно осуществить запись в зависимые комбобоксы но при этом стартовый их вид имел пустое "окно", при нажатии на вниз падающее меню был выбор.
Спасибо, хорошего дня.
Пример прикрепил. в одном варианте все наполняется а в другом стопорится на втором комбобоксе. т.к. в промежуточном столбце нет данных

Автор - Santtic
Дата добавления - 28.08.2021 в 12:06
doober Дата: Воскресенье, 29.08.2021, 00:04 | Сообщение № 24
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Но когда в следующем комб. пусто, оператор соответственно игнорирует этот комб
Ему вера не позволяет выбрать пустое значение.Какой тогда смысл в связанных выпадающих списках.Пускай руками с листа выбирает. Такой подход не верный, еще напоретесь на бяку
К сообщению приложен файл: 4488410.xlsm (45.2 Kb)


 
Ответить
Сообщение
Но когда в следующем комб. пусто, оператор соответственно игнорирует этот комб
Ему вера не позволяет выбрать пустое значение.Какой тогда смысл в связанных выпадающих списках.Пускай руками с листа выбирает. Такой подход не верный, еще напоретесь на бяку

Автор - doober
Дата добавления - 29.08.2021 в 00:04
Santtic Дата: Воскресенье, 29.08.2021, 10:04 | Сообщение № 25
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 1 ±
Замечаний: 0% ±

Excel 2016
Спасибо большое.
Такой подход не верный, еще напоретесь на бяку
Да, я с вами полностью согласен, сначала я свой метод пробовал прикрутить к их требованиям, но он наотрез отказывался работать из за этих пустых ячеек. Ваш метод белее стабильно работал, все отлично было. Пока не посетила гениальная идея "а давайте не будет заполнения комбобокса, где мы видели такое" тот случай когда люди видели просто комбобоксы, но называют это зависимыми ячейками, тот случай когда у них было 5 столбцов и 50 строк. А тут в районе 19 столбцов, строк от 2х тыс. и может доходить до 9 тыс. Как они думают с этим работать ума не приложу :'(
Спасибо вам за помощь.
 
Ответить
СообщениеСпасибо большое.
Такой подход не верный, еще напоретесь на бяку
Да, я с вами полностью согласен, сначала я свой метод пробовал прикрутить к их требованиям, но он наотрез отказывался работать из за этих пустых ячеек. Ваш метод белее стабильно работал, все отлично было. Пока не посетила гениальная идея "а давайте не будет заполнения комбобокса, где мы видели такое" тот случай когда люди видели просто комбобоксы, но называют это зависимыми ячейками, тот случай когда у них было 5 столбцов и 50 строк. А тут в районе 19 столбцов, строк от 2х тыс. и может доходить до 9 тыс. Как они думают с этим работать ума не приложу :'(
Спасибо вам за помощь.

Автор - Santtic
Дата добавления - 29.08.2021 в 10:04
Santtic Дата: Вторник, 31.08.2021, 22:40 | Сообщение № 26
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 1 ±
Замечаний: 0% ±

Excel 2016
Всем доброго времени.
Вроде приближаюсь к концу этой работы. Все вроде бы устраивает, но есть один момент, его я могу обойти путем назначения комбобокса, но хотелось бы именно определение по строке.
У меня в макросе есть такие строки
[vba]
Код
Set iBazaSht = ThisWorkbook.ActiveSheet
        
        Set iFoundRng = iBazaSht.Columns(19).Find(what:=Me.ComboBox19.Text, LookAt:=xlWhole)
       
        If Not iFoundRng Is Nothing Then
            iResponse = MsgBox("Òàêàÿ çàïèñü óæå ñóùåñòâóåò. Çàìåíèòü å¸?" & vbCr & "Äà - çàìåíèòü ñòàðóþ, Íåò - äîáàâèòü â áàçó", vbYesNoCancel + vbExclamation, "Âíèìàíèå!")
            If iResponse = vbYes Then
                With Sheets(iBazaSht.Name)
              
            lrow = iFoundRng.Row
[/vba]
Смысл ее в том, что она определяет значение в ячейке а именно в ComboBox19 и колонке 19 и предлагает мне перезаписать всю строку полностью или же создать новую.
Я как более опытный пользователь смогу определиться, но те для кого пишу, они не будут даже задумываться над этим, сразу скажут ээээ не, не работает.
Подскажите пожалуйста, как разрешить редактировать именно ту строку на которой стоишь.
И прошу совета.
У меня форма считывает данные со всей строки и записывает в себя, из нее я и редактирую.
Как вы посоветуете, создать отдельный макрос под редактирование и отдельный макрос под запись? Мне лично удобней все в одной форме делать.
Спасибо большое за помощь.
К сообщению приложен файл: 3651921-1-.xlsm (50.5 Kb)
 
Ответить
СообщениеВсем доброго времени.
Вроде приближаюсь к концу этой работы. Все вроде бы устраивает, но есть один момент, его я могу обойти путем назначения комбобокса, но хотелось бы именно определение по строке.
У меня в макросе есть такие строки
[vba]
Код
Set iBazaSht = ThisWorkbook.ActiveSheet
        
        Set iFoundRng = iBazaSht.Columns(19).Find(what:=Me.ComboBox19.Text, LookAt:=xlWhole)
       
        If Not iFoundRng Is Nothing Then
            iResponse = MsgBox("Òàêàÿ çàïèñü óæå ñóùåñòâóåò. Çàìåíèòü å¸?" & vbCr & "Äà - çàìåíèòü ñòàðóþ, Íåò - äîáàâèòü â áàçó", vbYesNoCancel + vbExclamation, "Âíèìàíèå!")
            If iResponse = vbYes Then
                With Sheets(iBazaSht.Name)
              
            lrow = iFoundRng.Row
[/vba]
Смысл ее в том, что она определяет значение в ячейке а именно в ComboBox19 и колонке 19 и предлагает мне перезаписать всю строку полностью или же создать новую.
Я как более опытный пользователь смогу определиться, но те для кого пишу, они не будут даже задумываться над этим, сразу скажут ээээ не, не работает.
Подскажите пожалуйста, как разрешить редактировать именно ту строку на которой стоишь.
И прошу совета.
У меня форма считывает данные со всей строки и записывает в себя, из нее я и редактирую.
Как вы посоветуете, создать отдельный макрос под редактирование и отдельный макрос под запись? Мне лично удобней все в одной форме делать.
Спасибо большое за помощь.

Автор - Santtic
Дата добавления - 31.08.2021 в 22:40
Santtic Дата: Понедельник, 06.09.2021, 23:24 | Сообщение № 27
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 1 ±
Замечаний: 0% ±

Excel 2016
Доброго времени.
Теперь требуется только по первому признаку .... %)
Благодарен за помощь.
К сообщению приложен файл: 4488410-2-.xlsm (46.3 Kb)
 
Ответить
СообщениеДоброго времени.
Теперь требуется только по первому признаку .... %)
Благодарен за помощь.

Автор - Santtic
Дата добавления - 06.09.2021 в 23:24
doober Дата: Вторник, 07.09.2021, 22:51 | Сообщение № 28
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Тогда так




Сообщение отредактировал doober - Вторник, 07.09.2021, 22:52
 
Ответить
СообщениеТогда так

Автор - doober
Дата добавления - 07.09.2021 в 22:51
Santtic Дата: Среда, 08.09.2021, 09:05 | Сообщение № 29
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 1 ±
Замечаний: 0% ±

Excel 2016
Тогда так

Доброе утро, спасибо за помощь.
Данные подтягивает, но немного не так.
Посмотрите пожалуйста по возможности файл, я там более детально расписал, объясняльщик что то из меня не очень.
Я пробовал прописать
[vba]
Код
If Not C_is1.Exists(Key1) Then
C_is1.Item(Key1) = Key1 & "_" & key2 & "_" & key3
End If
[/vba]
И занес так же в комбобокс, но результата не дало
К сообщению приложен файл: 2523001.xlsm (45.2 Kb)
 
Ответить
Сообщение
Тогда так

Доброе утро, спасибо за помощь.
Данные подтягивает, но немного не так.
Посмотрите пожалуйста по возможности файл, я там более детально расписал, объясняльщик что то из меня не очень.
Я пробовал прописать
[vba]
Код
If Not C_is1.Exists(Key1) Then
C_is1.Item(Key1) = Key1 & "_" & key2 & "_" & key3
End If
[/vba]
И занес так же в комбобокс, но результата не дало

Автор - Santtic
Дата добавления - 08.09.2021 в 09:05
Santtic Дата: Среда, 08.09.2021, 13:39 | Сообщение № 30
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 1 ±
Замечаний: 0% ±

Excel 2016
Зависимость второго К.Б. от первого К.Б. сделал, но вот зависимость третьего К.Б. от первого К.Б.не выходит.
Что я не делаю не так %)
[vba]
Код
Dim m2()
Dim m3()
Private C_is1 As Object, C_is2 As Object, C_is3 As Object

Private Sub ComboBox7_Change()
If ComboBox7.ListIndex = -1 Then Exit Sub
    Dim key As String, IsPusto As Boolean
    Key1 = ComboBox7.Value
    key = Key1
    keys = C_is2.keys
    ComboBox8.Clear
    
    IsPusto = False
    For n = 0 To C_is2.Count - 1' КАК СЮДА ДОБАВИТЬ ПРАВИЛЬНО ЦИКЛЫ C_is2..... :(
        If InStr(1, keys(n), key, vbTextCompare) = 1 Then
            ComboBox8.AddItem C_is2.Item(keys(n))
            IsPusto = C_is2.Item(keys(n)) = ""
        End If
    Next
    If ComboBox8.ListCount = 1 And IsPusto Then
    
    ComboBox8.ListIndex = 0
    End If
    
    'If ComboBox8.ListCount > 0 Then ComboBox8.ListIndex = 0
End Sub

Private Sub ComboBox8_Change()
If ComboBox8.ListIndex = -1 Then Exit Sub
    Dim key As String
    'Key1 = ComboBox7.Value
     Key2 = ComboBox8.Value
     
    keys = C_is2.keys
    ComboBox9.Clear
   ' key = Key1 & "_" & Key2
    IsPusto = False
    For n = 0 To C_is2.Count - 1
        If InStr(1, keys(n), key, vbTextCompare) = 1 Then
            'ComboBox8.AddItem C_is3.Item(keys(n))
            IsPusto = C_is2.Item(keys(n)) = ""
        End If
    Next
    If ComboBox8.ListCount = 1 And IsPusto Then
    
    ComboBox8.ListIndex = 0
    End If
    'If ComboBox9.ListCount > 0 Then ComboBox9.ListIndex = 0
End Sub

Private Sub ComboBox9_Change()
If ComboBox9.ListIndex = -1 Then Exit Sub
    Dim key As String
    'Key1 = ComboBox7.Value
    
     Key3 = ComboBox9.Value
     
    keys = C_is3.keys
    'ComboBox9.Clear
   ' key = Key1 & "_" & Key2
    IsPusto = False
    For n = 0 To C_is3.Count - 1
        If InStr(1, keys(n), key, vbTextCompare) = 1 Then
            'ComboBox8.AddItem C_is3.Item(keys(n))
            IsPusto = C_is3.Item(keys(n)) = ""
        End If
    Next
    If ComboBox9.ListCount = 1 And IsPusto Then
    
    ComboBox9.ListIndex = 0
    End If
    'If ComboBox9.ListCount > 0 Then ComboBox9.ListIndex = 0
End Sub

Private Sub CommandButton2_Click()
End
End Sub

    Private Sub UserForm_Activate()
    Set C_is1 = CreateObject("scripting.dictionary")
    Set C_is2 = CreateObject("scripting.dictionary")
    Set C_is3 = CreateObject("scripting.dictionary")
    
    Dim mas1, mas2, mas3, mas4, Key1 As String, Key2 As String, Key3 As String, key As String

    ComboBox7.Clear
    ComboBox8.Clear
    ComboBox9.Clear
    

    With Sheets("дата")
    Dim rng As Range
    col1 = 0
    col2 = 0
    col3 = 0
    
    Set rng = .Rows(1).Find("1", , , xlWhole)
    If rng Is Nothing Then Exit Sub
    col1 = rng.Column
    Set rng = .Rows(1).Find("2", , , xlWhole)
    If rng Is Nothing Then Exit Sub
    col2 = rng.Column
    Set rng = .Rows(1).Find("3", , , xlWhole)
    If rng Is Nothing Then Exit Sub
    col3 = rng.Column
    
    
        конец = .Cells(Rows.Count, 2).End(xlUp).Row
        mas1 = .Cells(1, col1).Resize(конец, 2)
        mas2 = .Cells(1, col2).Resize(конец, 2)
        mas3 = .Cells(1, col3).Resize(конец, 2)
        
        For n = 2 To UBound(mas1)
            Key1 = mas1(n, 1)
            Key2 = mas2(n, 1)
            Key3 = mas3(n, 1)
            
            If Not C_is1.Exists(Key1) Then
                C_is1.Item(Key1) = Key1 & "_" & Key2
                
            End If
            key = Key1 & "_" & Key2
            If Not C_is2.Exists(key) Then
                C_is2.Item(key) = Key2
            End If
            key = Key1 & "_" & Key3
            If Not C_is3.Exists(key) Then
                C_is3.Item(key) = Key3
            End If
            

        Next

    End With

    keys = C_is1.keys
    For Each itm In keys
        ComboBox7.AddItem itm
    Next
    'If C_is1.Count > 0 Then ComboBox7.ListIndex = 0

End Sub
[/vba]
К сообщению приложен файл: 3875202.xlsm (43.6 Kb)


Сообщение отредактировал Santtic - Среда, 08.09.2021, 14:17
 
Ответить
СообщениеЗависимость второго К.Б. от первого К.Б. сделал, но вот зависимость третьего К.Б. от первого К.Б.не выходит.
Что я не делаю не так %)
[vba]
Код
Dim m2()
Dim m3()
Private C_is1 As Object, C_is2 As Object, C_is3 As Object

Private Sub ComboBox7_Change()
If ComboBox7.ListIndex = -1 Then Exit Sub
    Dim key As String, IsPusto As Boolean
    Key1 = ComboBox7.Value
    key = Key1
    keys = C_is2.keys
    ComboBox8.Clear
    
    IsPusto = False
    For n = 0 To C_is2.Count - 1' КАК СЮДА ДОБАВИТЬ ПРАВИЛЬНО ЦИКЛЫ C_is2..... :(
        If InStr(1, keys(n), key, vbTextCompare) = 1 Then
            ComboBox8.AddItem C_is2.Item(keys(n))
            IsPusto = C_is2.Item(keys(n)) = ""
        End If
    Next
    If ComboBox8.ListCount = 1 And IsPusto Then
    
    ComboBox8.ListIndex = 0
    End If
    
    'If ComboBox8.ListCount > 0 Then ComboBox8.ListIndex = 0
End Sub

Private Sub ComboBox8_Change()
If ComboBox8.ListIndex = -1 Then Exit Sub
    Dim key As String
    'Key1 = ComboBox7.Value
     Key2 = ComboBox8.Value
     
    keys = C_is2.keys
    ComboBox9.Clear
   ' key = Key1 & "_" & Key2
    IsPusto = False
    For n = 0 To C_is2.Count - 1
        If InStr(1, keys(n), key, vbTextCompare) = 1 Then
            'ComboBox8.AddItem C_is3.Item(keys(n))
            IsPusto = C_is2.Item(keys(n)) = ""
        End If
    Next
    If ComboBox8.ListCount = 1 And IsPusto Then
    
    ComboBox8.ListIndex = 0
    End If
    'If ComboBox9.ListCount > 0 Then ComboBox9.ListIndex = 0
End Sub

Private Sub ComboBox9_Change()
If ComboBox9.ListIndex = -1 Then Exit Sub
    Dim key As String
    'Key1 = ComboBox7.Value
    
     Key3 = ComboBox9.Value
     
    keys = C_is3.keys
    'ComboBox9.Clear
   ' key = Key1 & "_" & Key2
    IsPusto = False
    For n = 0 To C_is3.Count - 1
        If InStr(1, keys(n), key, vbTextCompare) = 1 Then
            'ComboBox8.AddItem C_is3.Item(keys(n))
            IsPusto = C_is3.Item(keys(n)) = ""
        End If
    Next
    If ComboBox9.ListCount = 1 And IsPusto Then
    
    ComboBox9.ListIndex = 0
    End If
    'If ComboBox9.ListCount > 0 Then ComboBox9.ListIndex = 0
End Sub

Private Sub CommandButton2_Click()
End
End Sub

    Private Sub UserForm_Activate()
    Set C_is1 = CreateObject("scripting.dictionary")
    Set C_is2 = CreateObject("scripting.dictionary")
    Set C_is3 = CreateObject("scripting.dictionary")
    
    Dim mas1, mas2, mas3, mas4, Key1 As String, Key2 As String, Key3 As String, key As String

    ComboBox7.Clear
    ComboBox8.Clear
    ComboBox9.Clear
    

    With Sheets("дата")
    Dim rng As Range
    col1 = 0
    col2 = 0
    col3 = 0
    
    Set rng = .Rows(1).Find("1", , , xlWhole)
    If rng Is Nothing Then Exit Sub
    col1 = rng.Column
    Set rng = .Rows(1).Find("2", , , xlWhole)
    If rng Is Nothing Then Exit Sub
    col2 = rng.Column
    Set rng = .Rows(1).Find("3", , , xlWhole)
    If rng Is Nothing Then Exit Sub
    col3 = rng.Column
    
    
        конец = .Cells(Rows.Count, 2).End(xlUp).Row
        mas1 = .Cells(1, col1).Resize(конец, 2)
        mas2 = .Cells(1, col2).Resize(конец, 2)
        mas3 = .Cells(1, col3).Resize(конец, 2)
        
        For n = 2 To UBound(mas1)
            Key1 = mas1(n, 1)
            Key2 = mas2(n, 1)
            Key3 = mas3(n, 1)
            
            If Not C_is1.Exists(Key1) Then
                C_is1.Item(Key1) = Key1 & "_" & Key2
                
            End If
            key = Key1 & "_" & Key2
            If Not C_is2.Exists(key) Then
                C_is2.Item(key) = Key2
            End If
            key = Key1 & "_" & Key3
            If Not C_is3.Exists(key) Then
                C_is3.Item(key) = Key3
            End If
            

        Next

    End With

    keys = C_is1.keys
    For Each itm In keys
        ComboBox7.AddItem itm
    Next
    'If C_is1.Count > 0 Then ComboBox7.ListIndex = 0

End Sub
[/vba]

Автор - Santtic
Дата добавления - 08.09.2021 в 13:39
doober Дата: Среда, 08.09.2021, 14:32 | Сообщение № 31
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Как я понял, задачу, так и сделал.
но вот зависимость третьего К.Б. от первого К.Б
Для третьего словаря берите ключ Key1 & "_" & key3


 
Ответить
СообщениеКак я понял, задачу, так и сделал.
но вот зависимость третьего К.Б. от первого К.Б
Для третьего словаря берите ключ Key1 & "_" & key3

Автор - doober
Дата добавления - 08.09.2021 в 14:32
Santtic Дата: Среда, 08.09.2021, 15:02 | Сообщение № 32
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 1 ±
Замечаний: 0% ±

Excel 2016
Да да да именно так и сделал, но макрос не записывет значения. Нужно в первом цикл прописать на С_is3 и на остальные. Иначе не прописывает. Возможно я что то не так прописал
А вот как прописать цикл, пока не нашел решение) что то я намудрил...
Второй работает чрез пень колоду >(
К сообщению приложен файл: 4962444.xlsm (46.1 Kb)


Сообщение отредактировал Santtic - Среда, 08.09.2021, 15:53
 
Ответить
СообщениеДа да да именно так и сделал, но макрос не записывет значения. Нужно в первом цикл прописать на С_is3 и на остальные. Иначе не прописывает. Возможно я что то не так прописал
А вот как прописать цикл, пока не нашел решение) что то я намудрил...
Второй работает чрез пень колоду >(

Автор - Santtic
Дата добавления - 08.09.2021 в 15:02
Santtic Дата: Среда, 08.09.2021, 16:13 | Сообщение № 33
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 1 ±
Замечаний: 0% ±

Excel 2016
.....[offtop] почему то при добавлении пустых строк в столбец R 2 К.Б. сразу перестаёт учитывать некоторые значения в своем столбце


Сообщение отредактировал Santtic - Среда, 08.09.2021, 16:17
 
Ответить
Сообщение.....[offtop] почему то при добавлении пустых строк в столбец R 2 К.Б. сразу перестаёт учитывать некоторые значения в своем столбце

Автор - Santtic
Дата добавления - 08.09.2021 в 16:13
Santtic Дата: Среда, 08.09.2021, 17:24 | Сообщение № 34
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 1 ±
Замечаний: 0% ±

Excel 2016
Если я прописываю так
[vba]
Код
Private Sub ComboBox7_Change()
'If ComboBox7.ListIndex = -1 Then Exit Sub
    Dim key As String, IsPusto As Boolean
    
    Key1 = ComboBox7.Value
    Key2 = ComboBox8.Value
    Key3 = ComboBox9.Value
    key = Key1
    keys = C_is2.keys
    ComboBox8.Clear
    'keys = C_is3.keys
    'ComboBox9.Clear
    
    IsPusto = False
    For n = 0 To C_is2.Count - 1
    
        If InStr(1, keys(n), key, vbTextCompare) = 1 Then
            ComboBox8.AddItem C_is2.Item(keys(n))
            ComboBox9.AddItem C_is3.Item(keys(n))
            IsPusto = C_is2.Item(keys(n)) = ""
            IsPusto = C_is3.Item(keys(n)) = ""
        End If
    Next
    If ComboBox8.ListCount = 1 And IsPusto Then
    If ComboBox9.ListCount = 1 And IsPusto Then
    ComboBox8.ListIndex = 0
    ComboBox9.ListIndex = 0
    End If
    End If
    'If ComboBox8.ListCount > 0 Then ComboBox8.ListIndex = 0
End Sub
[/vba]
тогда 2йК.Б. работает идеально но работает только 2й. в третий ничего не записывается.
если мне стоит изменить

[vba]
Код
'keys = C_is2.keys
    ComboBox8.Clear
    keys = C_is3.keys
[/vba]
Код начинает работать но криво. т.е. в 2К.Б. отображаются не все данные, но зато в 3К.Б. отображаются нормально.
Мне нужно все же прописать цикл для C_is2 и C_is3?
К сообщению приложен файл: 4379569.xlsm (49.5 Kb)
 
Ответить
СообщениеЕсли я прописываю так
[vba]
Код
Private Sub ComboBox7_Change()
'If ComboBox7.ListIndex = -1 Then Exit Sub
    Dim key As String, IsPusto As Boolean
    
    Key1 = ComboBox7.Value
    Key2 = ComboBox8.Value
    Key3 = ComboBox9.Value
    key = Key1
    keys = C_is2.keys
    ComboBox8.Clear
    'keys = C_is3.keys
    'ComboBox9.Clear
    
    IsPusto = False
    For n = 0 To C_is2.Count - 1
    
        If InStr(1, keys(n), key, vbTextCompare) = 1 Then
            ComboBox8.AddItem C_is2.Item(keys(n))
            ComboBox9.AddItem C_is3.Item(keys(n))
            IsPusto = C_is2.Item(keys(n)) = ""
            IsPusto = C_is3.Item(keys(n)) = ""
        End If
    Next
    If ComboBox8.ListCount = 1 And IsPusto Then
    If ComboBox9.ListCount = 1 And IsPusto Then
    ComboBox8.ListIndex = 0
    ComboBox9.ListIndex = 0
    End If
    End If
    'If ComboBox8.ListCount > 0 Then ComboBox8.ListIndex = 0
End Sub
[/vba]
тогда 2йК.Б. работает идеально но работает только 2й. в третий ничего не записывается.
если мне стоит изменить

[vba]
Код
'keys = C_is2.keys
    ComboBox8.Clear
    keys = C_is3.keys
[/vba]
Код начинает работать но криво. т.е. в 2К.Б. отображаются не все данные, но зато в 3К.Б. отображаются нормально.
Мне нужно все же прописать цикл для C_is2 и C_is3?

Автор - Santtic
Дата добавления - 08.09.2021 в 17:24
doober Дата: Среда, 08.09.2021, 17:45 | Сообщение № 35
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Сядьте, разберитесь в самом алгоритме, потом уже слушайте тех, кто дает указания.
Почитайте азы.
InStr на вхождение пустого значения всегда выдаст 1
К сообщению приложен файл: 2802870.xlsm (45.2 Kb)


 
Ответить
СообщениеСядьте, разберитесь в самом алгоритме, потом уже слушайте тех, кто дает указания.
Почитайте азы.
InStr на вхождение пустого значения всегда выдаст 1

Автор - doober
Дата добавления - 08.09.2021 в 17:45
Santtic Дата: Четверг, 09.09.2021, 08:27 | Сообщение № 36
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 1 ±
Замечаний: 0% ±

Excel 2016
Сядьте, разберитесь в самом алгоритме, потом уже слушайте тех, кто дает указания.

Согласен полностью.
Спасибо вам за помощь.
 
Ответить
Сообщение
Сядьте, разберитесь в самом алгоритме, потом уже слушайте тех, кто дает указания.

Согласен полностью.
Спасибо вам за помощь.

Автор - Santtic
Дата добавления - 09.09.2021 в 08:27
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Зависимые выпадающие списки (Макросы/Sub)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!