Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2022, 15:31   #1
Bezdar
Форумчанин
 
Регистрация: 03.06.2008
Сообщений: 213
По умолчанию Событие СomboBox_Change происходит даже тогда, когда в нем ничего не меняется

И я не понимаю почему, объясните, пжл.
У меня на изменение в комбо № 1 происходит очищение значения в комбо № 2, и на изменение в комбо № 2 происходит очищение значения в комбо № 3
И получается так, что при любом дуновении ветра изменении значения в любой ячейке листа значения в комбах очищаются. С какого перепугу возникает событие СomboBox_Change даже при открытии/закрытии книги, если я в нем ничего не меняю?
Ну я так, не очень в VBA шарю, но по логике такого не должно быть.
Bezdar вне форума Ответить с цитированием
Старый 20.10.2022, 16:54   #2
MikeVol
Пользователь
 
Регистрация: 19.07.2021
Сообщений: 21
По умолчанию

Bezdar, Может так:
Код:
Private Sub ComboBox1_Change()
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    
    ' ваш код здесь

End Sub
MikeVol вне форума Ответить с цитированием
Старый 21.10.2022, 10:34   #3
Bezdar
Форумчанин
 
Регистрация: 03.06.2008
Сообщений: 213
По умолчанию

Спасибо за подсказку,
но я не разобралась, как это поможет, если код у меня такой:
ActiveWorkbook.Sheets("1").ComboBox 2.Clear
ActiveWorkbook.Sheets("1").ComboBox 3.Clear
И когда наступает событие ComboBox1_Change (а оно наступает не только тогда, когда действительно ченч) ListIndex не равен -1
Bezdar вне форума Ответить с цитированием
Старый 21.10.2022, 10:46   #4
MikeVol
Пользователь
 
Регистрация: 19.07.2021
Сообщений: 21
По умолчанию

Bezdar, Доброго. Напишите сюда код процедуры полностью для наглядности чтоб понимать что у вас там творится. Без кода и файла примера не совсем понятно почему так у вас происходит.
MikeVol вне форума Ответить с цитированием
Старый 21.10.2022, 12:25   #5
Bezdar
Форумчанин
 
Регистрация: 03.06.2008
Сообщений: 213
По умолчанию файл

прикрепила файл
Вложения
Тип файла: xls Образец файла.xls (224.0 Кб, 6 просмотров)
Bezdar вне форума Ответить с цитированием
Старый 21.10.2022, 15:09   #6
MikeVol
Пользователь
 
Регистрация: 19.07.2021
Сообщений: 21
По умолчанию

Bezdar, Проблему можно решить иным способом.
Код:
Private Sub ComboBox14_DropButtonClick()
    Dim iFamID      As String

    On Error Resume Next
    ActiveWorkbook.Sheets("Лист1").ComboBox15.Clear
    ActiveWorkbook.Sheets("Лист1").ComboBox16.Clear
    On Error GoTo 0

    If ActiveWorkbook.Sheets("Лист1").ComboBox14.ListIndex = -1 Then
        ActiveWorkbook.Sheets("Лист1").Range("Family_ID").Value = ""
    Else
        ' выставляется код семейства
        iFamID = ActiveWorkbook.Sheets("Лист1").Range("Family_ID").Value
    End If

    ' создание списка позиций в комбо 15
    For iFamCount = 2 To ActiveWorkbook.Sheets("Кодификатор").Range("d:d").End(xlDown).Row

        If ActiveWorkbook.Sheets("Кодификатор").Range("F" & iFamCount).Value = iFamID Then
            ActiveWorkbook.Sheets("Лист1").ComboBox15.AddItem ActiveWorkbook.Sheets("Кодификатор").Range("D" & iFamCount).Value
        End If

    Next

    ActiveWorkbook.Sheets("Лист1").ComboBox15.Activate
End Sub

Private Sub ComboBox15_DropButtonClick()
    Dim iClassID    As String
    If ActiveWorkbook.Sheets("Лист1").ComboBox15.ListIndex = -1 Then Exit Sub

    On Error Resume Next
    ActiveWorkbook.Sheets("Лист1").ComboBox16.Clear
    On Error GoTo 0

    For iClCount = 2 To ActiveWorkbook.Sheets("Кодификатор").Range("d:d").End(xlDown).Row

        If ActiveWorkbook.Sheets("Лист1").ComboBox15.Value = ActiveWorkbook.Sheets("Кодификатор").Range("d" & iClCount).Value Then
            iClassID = ActiveWorkbook.Sheets("Кодификатор").Range("e" & iClCount).Value
        End If

    Next

    ' формирование списка в комбо 16
    For iDeskCount = 2 To ActiveWorkbook.Sheets("Кодификатор").Range("g:g").End(xlDown).Row

        If iClassID = ActiveWorkbook.Sheets("Кодификатор").Range("h" & iDeskCount).Value Then
            '            MsgBox ActiveWorkbook.Sheets("Кодификатор").Range("e" & iDeskCount).Value & "  " & iClassID
            ActiveWorkbook.Sheets("Лист1").ComboBox16.AddItem ActiveWorkbook.Sheets("Кодификатор").Range("g" & iDeskCount).Value
        End If

    Next

    ActiveWorkbook.Sheets("Лист1").ComboBox16.Activate
End Sub
Заменил событие ComboBox14_Change() на ComboBox14_DropButtonClick() и нет
Цитата:
Сообщение от Bezdar Посмотреть сообщение
, что при любом дуновении ветра изменении значения в любой ячейке листа значения в комбах очищаются.
MikeVol вне форума Ответить с цитированием
Старый 24.10.2022, 15:22   #7
Bezdar
Форумчанин
 
Регистрация: 03.06.2008
Сообщений: 213
По умолчанию

Благодарю!
Все отрабатывается корректно.
Вы просто маг и волшебник, маг и волшебник
Bezdar вне форума Ответить с цитированием
Старый 25.10.2022, 00:53   #8
MikeVol
Пользователь
 
Регистрация: 19.07.2021
Сообщений: 21
По умолчанию

Bezdar, Доброго времени суток. Да нет я не
Цитата:
Сообщение от Bezdar Посмотреть сообщение
маг и волшебник
, я всего лишь ваш код чуток переделал под другое событие контролла.
Удачи вам!
MikeVol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Chromium когда происходит событие Jsdialog и что можно отправить\получить? Женя32 Работа с сетью в Delphi 7 12.09.2018 23:05
Ждать событие и только тогда вернуть значение из функции Pein95 C# (си шарп) 5 16.11.2014 22:52
У динамически созданной формы есть событие OnClick, но само событие не происходит Hunter_bog Компоненты Delphi 25 23.01.2012 23:50
masm32 подменяет JZ на JE тогда, когда это совсем не нужно notHaker Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 12.07.2011 17:57
При запуске старых файлов ничего не происходит, даже форма с кнопками не появляется UserOK Общие вопросы Delphi 6 13.05.2008 12:30