| 
| 
 | Вопрос # 3 475/ вопрос открыт / | 
 |  Здравствуйте, эксперты!Подскажите пожалуйста.
 У меня код, который вроде работает нормально, выполняются все условия, но после выполнения четвертого условия выходит сообщение первого условия.
 Ни как не могу расставить эти условия.
 Приложение:Переключить в обычный режим Private Sub CommandButton1_Click()     Dim i, j As Integer     For i = 1 To 1000    For j = 1 To 31             Exit Sub        End If           TextBox1 = ""        Exit Sub       Else           TextBox1 = ""        Exit Sub        End If        End If            Exit Subwyhod:        Cells(i + 35, 21).Value = CDbl(TextBox1.Text)         End If        Next        NextEnd Sub
|  |   Вопрос задал: resseg (статус: Посетитель)Вопрос отправлен: 2 декабря 2009, 20:53
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: monah Здравствуйте, resseg!Вообще, обратите внимание на на это условие,
 vbYes Then GoTo wyhod
 Exit Sub
 wyhod:
 там отсутствует оператор ELSE и как следствие Exit Sub никогда не будет выполнено. Если условие не выполняется, то будет выполнен оператор следующий за EndIf.
 Данная ошибка возникает из за усложнения кода переходами. Замените
 = vbYes Then GoTo wyhod
 Exit Sub
 wyhod: на
 
 = vbNo Then Exit Sub
 И код станет намного понятнее
 
|  | Ответ отправил: monah (статус: 1-ый класс)Время отправки: 5 декабря 2009, 12:22
 Оценка за ответ: 5
 |  
 Мини-форум вопросаВсего сообщений: 13; последнее сообщение — 5 декабря 2009, 12:31; участников в обсуждении: 2. 
|   | Егор (статус: 10-ый класс), 2 декабря 2009, 21:51 [#1]:поясните, пожалуйста, как оно работает, и как должно бы работать? а то сложно разобраться с налёта
   Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.— Donald E. Knuth.
 |  
|   | resseg (статус: Посетитель), 2 декабря 2009, 21:52 [#2]:Момент |  
|   | resseg (статус: Посетитель), 2 декабря 2009, 22:00 [#3]:При выполнение основного условия 
 If Cells(i, 27).Text = ComboBox1.Text Then 'Основное условие
 
 Выполняется код
 
 'Условие 4 основное
 If MsgBox("ВНИМАНИЕ" & vbCrLf & vbCrLf & "На данный момент производится списание объема недостачи в количестве " & TextBox1.Text & " л. на " & ComboBox1.Text & " месяц.   " & vbCrLf & vbCrLf & "Продолжить ввод данных?", _
 vbYesNo Or 48, "Ввод данных разрешен") = vbYes Then GoTo wyhod
 Exit Sub
 wyhod:
 Cells(i + 35, 21).Value = CDbl(TextBox1.Text)
 
 Но он выполняется в том случае если
 Если Условия 1,2,3 не будут препятствовать, в противном случае будут выходить соответствующие сообщения.
 Что то в этом роде.
 |  
|   | Егор (статус: 10-ый класс), 2 декабря 2009, 22:03 [#4]:не, мне не программистское видение кода, а человеческое  описание - типа, ввели то-то, нажали кнопку, появилось такое сообщение и такое, а должно было быть... вот таким образом
 Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.— Donald E. Knuth.
 |  
|   | resseg (статус: Посетитель), 2 декабря 2009, 22:08 [#5]:Попробую |  
|   | resseg (статус: Посетитель), 2 декабря 2009, 22:33 [#6]:Клике по кнопке Private Sub CommandButton1_Click() 
 При совпадении двух тестов
 If Cells(i, 27).Text = ComboBox1.Text Then 'Основное условие
 Например найденная ячейка If Cells(i, 27).Text будет декабрь и ComboBox1.Text тоже будет декабрь
 Выполняется код (как я уже говорил выше)
 
 Условие 4 основное
 If MsgBox("ВНИМАНИЕ" & vbCrLf & vbCrLf & "На данный момент производится списание объема недостачи в количестве " & TextBox1.Text & " л. на " & ComboBox1.Text & " месяц. " & vbCrLf & vbCrLf & "Продолжить ввод данных?", _
 vbYesNo Or 48, "Ввод данных разрешен") = vbYes Then GoTo wyhod
 Exit Sub
 wyhod:
 Cells(i + 35, 21).Value = CDbl(TextBox1.Text)
 
 Где CDbl(TextBox1.Text) это значение которое вводится в найденную ячейку Cells(i + 35, 21).Value (в данном случае данное условие дает возможность и отменить ввод) на этом все
 Но данное условие выполняется лишь в том случае
 
 1. Если при проверке Cells(i + j, 26).Value будет найдено любое значение даже 0. Выполняется условие 4
 Если Cells(i + j, 26).Value="", то выходит сообщение MsgBox "Инвентаризация не произведена.", 16, "Запрет ввода"
 тогда Условие 4 основное не выполняется
 
 2. Если TextBox1 будет введено значение, а в ComboBox1.Text будет выбран месяц года. Выполняется условие 4
 Если в TextBox1=”” а ComboBox1.Text=”Итого” то выходит сообщение MsgBox "Не корректный ввод данных.    ", 16, "Запрет ввода"
 тогда Условие 4 основное не выполняется
 
 3. Если CDbl(TextBox1.Text) будет равен или будет меньше значения Round((Cells(i + 34, 21) * -1), 0) Выполняется условие 4
 Если CDbl(TextBox1.Text)>Round((Cells(i + 34, 21) * -1), 0) то выходит сообщение
 MsgBox "ВНИМАНИЕ!" & vbCrLf & "" & vbCrLf & "1. Объем списания не должен превышать объема недостачи." & vbCrLf & "2. Объем прибыли не покрывается объемом списания.", 16, "Запрет ввода"
 тогда Условие 4 основное не выполняется
 
 Если что уточню.
 |  
|   | Егор (статус: 10-ый класс), 2 декабря 2009, 23:48 [#7]:а вот тут: 
         'Условие 4 основное
        If MsgBox("ВНИМАНИЕ" & vbCrLf & vbCrLf & "На данный момент производится списание объема недостачи в количестве
"_
                  & TextBox1.Text & " л. на " & ComboBox1.Text & " месяц.   " & vbCrLf & vbCrLf & "Продолжить ввод
данных?", _
                  vbYesNo Or 48, "Ввод данных разрешен") = vbYes Then GoTo wyhod
        Exit Sub
wyhod:
        Cells(i + 35, 21).Value = CDbl(TextBox1.Text)
 
        End If
        Nextесли мы нажмём yes, то пойдём к проверке следующей ячейки - т.е. будет выполняться условие 1, но уже для другой ячейки
 
 
 может вам так надо было:
 
 
         'Условие 4 основное
        If MsgBox("ВНИМАНИЕ" & vbCrLf & vbCrLf & "На данный момент производится списание объема недостачи в количестве
"_
                  & TextBox1.Text & " л. на " & ComboBox1.Text & " месяц.   " & vbCrLf & vbCrLf & "Продолжить ввод
данных?", _
                  vbYesNo Or 48, "Ввод данных разрешен") = vbYes Then 
          Cells(i + 35, 21).Value = CDbl(TextBox1.Text) '<----------- никаких GoTo!
          Exit Sub
 
        End If
        NextОпасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.— Donald E. Knuth.
 |  
|   | resseg (статус: Посетитель), 2 декабря 2009, 23:57 [#8]:Cells(i + j, 26) это проверка другой ячейки (а правильней сказать ячеек), пока не будет выполнено условие 1 (а также 2 и 3) основное условие 4 не должно выполнятся. |  
|   | resseg (статус: Посетитель), 3 декабря 2009, 00:02 [#9]:От найденной  i плюс j от 1 до 31 |  
|   | resseg (статус: Посетитель), 3 декабря 2009, 00:16 [#10]:Может GoTo и не надо...? Но в данном сообщение, необходимо чтобы пользователь мог отменить ввод данных. |  
|   | resseg (статус: Посетитель), 3 декабря 2009, 00:40 [#11]:Доброй ночи. До завтра. |  
|   | resseg (статус: Посетитель), 3 декабря 2009, 22:09 [#12]:Добрый вечер. Как отправить файл? Что-то не вижу функции…
 |  
|   | resseg (статус: Посетитель), 5 декабря 2009, 12:31 [#13]:Мне кажется я условие If Cells(i + j, 26).Value = "" Then 'Условие 1 не правильно составил 
 j это как бы проверка тридцать одной строки ячеек столбца 26 на пустоту, от найденной ячейки первого условия Cells(i, 27).Text = ComboBox1.Text
 Что то в этом роде.
 Не могу все это сгруппировать в одно условие
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |