|
Вопрос # 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 Sub
- wyhod:
- Cells(i + 35, 21).Value = CDbl(TextBox1.Text)
-
- End If
- Next
- Next
- End 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
Что то в этом роде.
Не могу все это сгруппировать в одно условие
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|