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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2010, 17:58   #1
segail
Форумчанин
 
Регистрация: 13.06.2009
Сообщений: 691
По умолчанию Повторное открытие сообщений

Здравствуйте.
Подскажите, почему после выбора действия в сообщение 2 вновь появляется сообщение 1?
Если точней, открывается первое сообщение, после закрытия открывается второе сообщение, после выбора НЕТ опять открывается первое сообщение, после закрытия первого сообщения, открывается опять второе сообщение.
Код:
    If a = 1 Or a=2 Then ' Основное условие
        If b = 1 Or b=2 Or b=3 Then ' Условие
            c = 1
            MsgBox "1" Сообщение1
                If MsgBox("2", vbYesNo + vbExclamation) = vbYes Then 'Сообщение2 ДА НЕТ
                    d = 1
                End If
        End If
    End If

Последний раз редактировалось segail; 02.07.2010 в 18:05.
segail вне форума Ответить с цитированием
Старый 02.07.2010, 18:23   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

вы не весь код показали,где - то должен быть цикл
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 02.07.2010, 18:39   #3
segail
Форумчанин
 
Регистрация: 13.06.2009
Сообщений: 691
По умолчанию

Опять не точно?
Код:
    If a = 1 Or j=1 Then ' Основное условие
        If b >0 Or r>0 Or g>0 Then ' Условие
            MsgBox "1" Сообщение1
                If MsgBox("2", vbYesNo + vbExclamation) = vbYes Then 'Сообщение2 ДА НЕТ
                    b=0: r=0: g=0
                End If
        End If
    End If
segail вне форума Ответить с цитированием
Старый 02.07.2010, 18:50   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Не знаю.не знаю.У меня по одному разу открылись.может у вас код перешел в режим вечного двигателя.или я чего то не понял
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 02.07.2010, 19:03   #5
segail
Форумчанин
 
Регистрация: 13.06.2009
Сообщений: 691
По умолчанию

Код тот же самый, который был в предыдущей теме.
В условие показано три проверки If b >0 Or r>0 Or g>0 Then
По идеи их 12, если в проверяемых значений больше нуля пять значений и больше, то тогда идет повторное открытие сообщений.
Код:
Public Sub Test()
    Dim i As Integer
    For i = 1 To 450
        With Sheets("Отчет")
            If Form_SelectDate.ComboBox_Month = CStr(.Cells(i, 27).Text) Or UserForm4.ComboBox1 = CStr(.Cells(i, 27).Text) Then
                If .Cells(i + 35, 21).Value > 0 Or .Cells(i + 72, 21).Value > 0 _
                Or .Cells(i + 109, 21).Value > 0 Or .Cells(i + 146, 21).Value > 0 _
                Or .Cells(i + 183, 21).Value > 0 Or .Cells(i + 220, 21).Value > 0 _
                Or .Cells(i + 257, 21).Value > 0 Or .Cells(i + 294, 21).Value > 0 _
                Or .Cells(i + 331, 21).Value > 0 Or .Cells(i + 368, 21).Value > 0 _
                Or .Cells(i + 405, 21).Value > 0 Or .Cells(i + 442, 21).Value > 0 Then
                    MsgBox "!!!", 16, "!!!"
                        If MsgBox("ВНИМАНИЕ" & vbCrLf & vbCrLf & "", vbYesNo + vbExclamation, " Информационное сообщение") = vbYes Then
                            .Cells(i + 35, 21).Value = 0: .Cells(i + 72, 21).Value = 0:
                            .Cells(i + 109, 21).Value = 0: .Cells(i + 146, 21).Value = 0:
                            .Cells(i + 183, 21).Value = 0: .Cells(i + 220, 21).Value = 0:
                            .Cells(i + 257, 21).Value = 0: .Cells(i + 294, 21).Value = 0:
                            .Cells(i + 331, 21).Value = 0: .Cells(i + 368, 21).Value = 0:
                            .Cells(i + 405, 21).Value = 0: .Cells(i + 442, 21).Value = 0:
                        End If
                End If
            End If
        End With
    Next
End Sub
segail вне форума Ответить с цитированием
Старый 02.07.2010, 19:43   #6
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
вы не весь код показали,где - то должен быть цикл
Цитата:
Опять не точно?
Я угадал.
Насколько понял,вы хотите очистить ячейки.если в определенном наборе есть значения
Если там нет ничего,должно быть пусто.если есть что то.должно быть пусто.выделенное красным можно исключить.А на удаление поставить только одно сообщение.удалить Да Нет.Иначе мозоль на пальце будет.Правильно мыслю?
Код конечно надо переделать

Код:
Public Sub Test()
    Dim i As Integer
    For i = 1 To 450
        With Sheets("Отчет")
            If Form_SelectDate.ComboBox_Month = CStr(.Cells(i, 27).Text) Or UserForm4.ComboBox1 = CStr(.Cells(i, 27).Text) Then
                If .Cells(i + 35, 21).Value > 0 Or .Cells(i + 72, 21).Value > 0 _
                Or .Cells(i + 109, 21).Value > 0 Or .Cells(i + 146, 21).Value > 0 _
                Or .Cells(i + 183, 21).Value > 0 Or .Cells(i + 220, 21).Value > 0 _
                Or .Cells(i + 257, 21).Value > 0 Or .Cells(i + 294, 21).Value > 0 _
                Or .Cells(i + 331, 21).Value > 0 Or .Cells(i + 368, 21).Value > 0 _
                Or .Cells(i + 405, 21).Value > 0 Or .Cells(i + 442, 21).Value > 0 Then
                    MsgBox "!!!", 16, "!!!"
                        If MsgBox("ВНИМАНИЕ" & vbCrLf & vbCrLf & "", vbYesNo + vbExclamation, " Информационное сообщение") = vbYes Then
                           .Cells(i + 35, 21).Value = 0: .Cells(i + 72, 21).Value = 0:
                          .Cells(i + 109, 21).Value = 0: .Cells(i + 146, 21).Value = 0:
                          .Cells(i + 183, 21).Value = 0: .Cells(i + 220, 21).Value = 0:
                          .Cells(i + 257, 21).Value = 0: .Cells(i + 294, 21).Value = 0:
                          .Cells(i + 331, 21).Value = 0: .Cells(i + 368, 21).Value = 0:
                          .Cells(i + 405, 21).Value = 0: .Cells(i + 442, 21).Value = 0:
                        End If
                End If
            End If
        End With
    Next
End Sub
Анализ,обработка данных Недорого

Последний раз редактировалось doober; 02.07.2010 в 19:45.
doober вне форума Ответить с цитированием
Старый 02.07.2010, 19:56   #7
segail
Форумчанин
 
Регистрация: 13.06.2009
Сообщений: 691
По умолчанию

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

Последний раз редактировалось segail; 02.07.2010 в 20:05.
segail вне форума Ответить с цитированием
Старый 02.07.2010, 20:08   #8
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Я думаю так.это все перестраховка.Ваша глобальная задача очистить ячейки.Проверку Да Нет надо ставить в первой строке процедуры.
Потом смело очищать,а если ошибочно вызвана-выход с нее.
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 02.07.2010, 20:22   #9
segail
Форумчанин
 
Регистрация: 13.06.2009
Сообщений: 691
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Я думаю так.это все перестраховка.
Вы правы

Очистить ячейки это крайний случай. Поэтому идут несколько сообщений, первое сообщение нарушение параметра, и второе сообщение с инструкцией, что будет, если будет нарушен параметр, но все таки пользователю дается шанс нарушить параметр, в последствие которого он будет долго и трудоемко исправлять ошибки. По этому, здесь акцент делается на два сообщение, одно грозное, второе с инструкцией. Будет еще дополнение, если во всех ячейках нули, то выполнится дополнительный код без сообщений, перед красным End If будет стоять Else

Последний раз редактировалось segail; 02.07.2010 в 20:26.
segail вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CppWEbBrowser. Запрет на открытие нового окна, и открытие его в том же окне Askar_g Общие вопросы C/C++ 4 25.06.2011 20:00
Повторное выполнение макроса Jaroslav Microsoft Office Excel 3 26.07.2009 10:12
Повторное открытие файла txt для редактирования в delphi Shaggrath Помощь студентам 8 20.07.2009 13:36
Проверка на повторное открытие ЯИмя Microsoft Office Excel 4 13.08.2008 18:02
Перехват сообщений от Службы сообщений (Messenger) SJMS Win Api 6 17.07.2008 10:26