Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 475

Раздел: Basic
/ вопрос открыт /

Здравствуйте, эксперты!
Подскажите пожалуйста.
У меня код, который вроде работает нормально, выполняются все условия, но после выполнения четвертого условия выходит сообщение первого условия.
Ни как не могу расставить эти условия.

Приложение:
  1. Private Sub CommandButton1_Click()
  2.  
  3. Dim i, j As Integer
  4.  
  5. For i = 1 To 1000
  6. For j = 1 To 31
  7.  
  8.  
  9.  
  10.  
  11.  
  12. Exit Sub
  13. End If
  14.  
  15.  
  16.  
  17. TextBox1 = ""
  18. Exit Sub
  19.  
  20. Else
  21.  
  22.  
  23.  
  24. TextBox1 = ""
  25. Exit Sub
  26. End If
  27. End If
  28.  
  29.  
  30.  
  31.  
  32. Exit Sub
  33. wyhod:
  34. Cells(i + 35, 21).Value = CDbl(TextBox1.Text)
  35.  
  36. End If
  37. Next
  38. Next
  39. End Sub


resseg Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

resseg (статус: Посетитель), 2 декабря 2009, 21:52 [#2]:

Момент
resseg

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

resseg (статус: Посетитель), 2 декабря 2009, 22:08 [#5]:

Попробую
resseg

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

resseg (статус: Посетитель), 2 декабря 2009, 23:57 [#8]:

Cells(i + j, 26) это проверка другой ячейки (а правильней сказать ячеек), пока не будет выполнено условие 1 (а также 2 и 3) основное условие 4 не должно выполнятся.
resseg

resseg (статус: Посетитель), 3 декабря 2009, 00:02 [#9]:

От найденной i плюс j от 1 до 31
resseg

resseg (статус: Посетитель), 3 декабря 2009, 00:16 [#10]:

Может GoTo и не надо...? Но в данном сообщение, необходимо чтобы пользователь мог отменить ввод данных.
resseg

resseg (статус: Посетитель), 3 декабря 2009, 00:40 [#11]:

Доброй ночи. До завтра.
resseg

resseg (статус: Посетитель), 3 декабря 2009, 22:09 [#12]:

Добрый вечер.
Как отправить файл? Что-то не вижу функции…
resseg

resseg (статус: Посетитель), 5 декабря 2009, 12:31 [#13]:

Мне кажется я условие If Cells(i + j, 26).Value = "" Then 'Условие 1 не правильно составил

j это как бы проверка тридцать одной строки ячеек столбца 26 на пустоту, от найденной ячейки первого условия Cells(i, 27).Text = ComboBox1.Text
Что то в этом роде.
Не могу все это сгруппировать в одно условие

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:01
Выполнено за 0.03 сек.