powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Дополнительное условие в рабочий код
21 сообщений из 21, страница 1 из 1
Дополнительное условие в рабочий код
    #36471017
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. Не сочтите за наглость, не могу, вставит дополнительное условие.

Возникла проблема вставить дополнительное условие в данный код.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
If Условие =  1  Then 

If CDate(Form_SelectDate.TextBox_Year) <> CDate(Sheets("Отчет").Range("R1")) Or CDate(Form_SelectDate.TextBox_Data) < CDate(Form_SelectDate.TextBox_Дата) Then
    MsgBox " Год ввода данных выбран не верно, или выбранная дата опережает событие.", vbInformation, "Информационное сообщение"
    'Команда - отменить выбор даты и закрыть форму
    If IsDate(SelectedDate) Then SelectedDate = CStr(DateValue(dt_2))
    Unload Me
Exit Sub
End If
    
    Dim i As Integer
    For i =  1  To  444 
    If Sheets("Отчет").Cells(i,  1 ).Value = CStr(DateValue(dt_1)) Then 'Поиск даты по совподению для выполнения условия
    
    'Удаление данных на выбранную дату, если ТextBox1 пустой
        If UserForm1.TextBox1.Text = "" Then 'Основное условие для всего кода
            If MsgBox("ВНИМАНИЕ" & vbCrLf & vbCrLf & "При удалении данных прихода, на выбранную дату, Вы изменяете параметры движения ГСМ. Если за " & ComboBox_Month & " месяце производилась инвентаризация, списание, определение процента потерь то эти данные будут полностью удалены." & vbCrLf & "Продолжить удаление на выбранную дату?", vbYesNo + vbExclamation, " Информационное сообщение") = vbYes Then
                With Sheets("Отчет")
                .Cells(i,  2 ).Resize(,  8 ).ClearContents ' очищаем сразу 8 ячеек
                .Cells(i,  21 ) = "=sum(R[-1]C)" ' Значения берутся из строки выше
                .Cells(i,  22 ) = "=sum(R[-1]C)" ' Значения берутся из строки выше
                .Cells(i,  28 ) = ""
                .Cells(i,  31 ) = ""
                 End With
                UserForm1.Label6.Caption = "Полная очистка данных на " & TextBox_Дата & " произведена"
                UserForm1.Label6.ForeColor = &HFF&
                Module2.Change
            End If
            
                Else

    'Ввод данных на выбранную дату. Продолжение основного условия если ТextBox1 имеет данные
                With Sheets("Отчет")
                If Form_SelectDate.chb_Time.Value = True Then Sheets("Отчет").Cells(i,  2 ).Value = Form_SelectDate.Label_Hour.Caption + ":" + Form_SelectDate.Label_Minute 'Ввод времени если chb_Time обозначен галочкой
                If Form_SelectDate.chb_Time.Value = False Then Sheets("Отчет").Cells(i,  2 ).Value = "" 'Удаление времени если chb_Time не обозначен галочкой
                .Cells(i,  3 ).Value = UserForm1.TextBox1.Text + .Cells(i,  3 ).Value
                .Cells(i,  4 ).Value = UserForm1.TextBox2.Text + .Cells(i,  4 ).Value
                .Cells(i,  5 ).Value = VBA.Val(VBA.Replace(UserForm1.TextBox3.Text, ",", ".")) + .Cells(i,  5 ).Value
                .Cells(i,  6 ).Value = VBA.Val(VBA.Replace(UserForm1.TextBox5.Text, ",", ".")) + .Cells(i,  6 ).Value
                .Cells(i,  7 ).Value = VBA.Val(VBA.Replace(UserForm1.TextBox6.Text, ",", ".")) + .Cells(i,  7 ).Value
                .Cells(i,  8 ).Value = UserForm1.TextBox7.Text + .Cells(i,  8 ).Value
                .Cells(i,  9 ).Value = UserForm1.TextBox8.Text + .Cells(i,  9 ).Value
                .Cells(i,  21 ).Value = Range("F10").Value
                .Cells(i,  22 ).Value = Range("G10").Value
                .Cells(i,  28 ).Value = Round(([d13] + [d16] + [d19] + [d22]),  0 ) + .Cells(i,  28 ).Value
                If .Cells(i,  31 ).Value > "" Then .Cells(i,  31 ) = .Cells(i,  31 ) & Range("A9").Value & "    " & Range("G8").Value & "    " & UserForm1.TextBox1.Text & " л. " & UserForm1.TextBox2.Text & " кг.  /  " Else .Cells(i,  31 ) = "/  " & Range("A9").Value & "    " & Range("G8").Value & "    " & UserForm1.TextBox1.Text & " л. " & UserForm1.TextBox2.Text & " кг.  /  "
                End With
                UserForm1.Label6.Caption = "Ввод данных прихода на " & Form_SelectDate.TextBox_Дата & " произведен"
                UserForm1.Label6.ForeColor = &HC00000
        End If
    End If
    Next
End If 
Основа данного кода это удаление данных, если объект TextBox1 пустой, и ввод данных, если объект имеет значение (основное условие If UserForm1.TextBox1.Text = "" Then).
Необходимо после Else (это я так думаю) вставить Module2.Change, данный макрос выполняет дополнительное удаление данных, когда происходит ввод данных.
Перед этим необходимо вставить условие
Код: plaintext
If CDate(Form_SelectDate.TextBox_Data) > CDate(Form_SelectDate.TextBox_Дата) Then
с выводом сообщения
Код: plaintext
 If MsgBox("ВНИМАНИЕ" & vbCrLf & vbCrLf & "При вводе данных прихода, на прошедшую дату, Вы изменяете параметры движения ГСМ. Если за " & ComboBox_Month & " месяце производилась инвентаризация, списание, определение процента потерь то эти данные будут полностью удалены." & vbCrLf & "Продолжить ввод данных на выбранную дату?", vbYesNo + vbExclamation, " Информационное сообщение") = vbYes Then
Если пользователь нажимает кнопку “Да” данного сообщения, то выполняется макрос Module2.Change и код после Else.
Если пользователь нажимает кнопку “Нет” данного сообщения, то ни чего не происходит.
Если условие не дает результата “>” то в силу вступает основное условие, то есть выполняется код после Else без сообщения и без Module2.Change.
...
Рейтинг: 0 / 0
Дополнительное условие в рабочий код
    #36471041
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читал, читал, не смог понять, в чем вопрос.

"Необходимо после Else (это я так думаю) вставить Module2.Change"
"Перед этим необходимо вставить условие"

Ну так вставьте, кто вам мешает? Где вопрос-то?

P.S. Если вы хотите, чтобы кто-то имел желание разбираться в вашем коде, выбросьте все, не имеющее отношение к делу. Примерно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
If a= 1  Then
  If b= 2  Then
    s= 1 
  Else
    s= 3 
  End
Else
  If b= 3  And c- 4  then
    If t= 5  then s= 4 
  Else
    s= 6 
  End If
End If

и далее - хочу мол, чтобы при таких-то условиях s стало 7.
Мало того, что вы бытсрее получите ответ, вы еще и сами разберетесь раньше, чем сформулируете вопрос.
И соблюдайте строго отступы для циклов и условий. Это упрощает чтение кода.
...
Рейтинг: 0 / 0
Дополнительное условие в рабочий код
    #36471069
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Дело в том, что я его вставил, но не функционирует третий вариант.
Если условие не дает результата “>” то в силу вступает основное условие, то есть выполняется код после Else без сообщения и без Module2.Change.
...
Рейтинг: 0 / 0
Дополнительное условие в рабочий код
    #36471076
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
segailДело в том, что я его вставил

1) ну так и покажите конечный вариант
2) вы пошаговым выполнением умеете пользоваться?
...
Рейтинг: 0 / 0
Дополнительное условие в рабочий код
    #36471077
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
нет
...
Рейтинг: 0 / 0
Дополнительное условие в рабочий код
    #36471088
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Ставьте курсор на первую строчку процедуры
2) Нажмите F9 (появится точка останова на этой строке)
3) Запустите процедуру - она остановится на точке останова
4) F8 - выполнить следующую команду

жмете F8 и смотрите, как идет выполнение команды. В любой момент можете посмотреть в Immediate-окне значение любого выражения, в том числе логического в условиях, проверить значения переменных и т.п.
...
Рейтинг: 0 / 0
Дополнительное условие в рабочий код
    #36471098
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Дополнительное условие в рабочий код
    #36471398
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Где то так, если я Вас правильно понял.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
If a =  1  Then 'Условие для выполнения кода. Public Условие As Integer
	If b=  2  Then'Сообщение Ок не выполнение кода
	Exit Sub
	End If
	If с =  3  Then 'Условие для поиск даты по совпадению, для выполнения основного условия.
		If d =  3  Then 'Основное условие
			If e =  4  Then 'Сообщение Да, Нет
				s =  1 
				s =  2 	
			End If
  Else
		If g =  5  Then 'Дополнительное условие
			If z =  6  Then 'Дополнительное сообщение Да, Нет
				s =  3 
				s =  2 
			End If
		End If
	End If
End If 'Конец выполнение кода. Public Условие As Integer

При выполнение g = 5 выполняется z = 6 При выборе Да выполняются операторы s = 3, s = 2, при выборе Нет операторы s = 3, s = 2 не выполняются. Если g = 5 не выполняется, то выполняется только оператор s = 3 на основание условия d = 3
...
Рейтинг: 0 / 0
Дополнительное условие в рабочий код
    #36471432
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так.
Для начала - этот код невалидный.
Количество открытых IF-ов не соответствует количеству End If (это вы могли проверить и без меня, просто попытавшись скомпилировать этот код).

Если вы по смыслу правильно расставили отступы, то не хватает End If для строки:
If d = 3 Then 'Основное условие
Ставьте там, где вы его предполагаете - будем смотреть дальше.
...
Рейтинг: 0 / 0
Дополнительное условие в рабочий код
    #36471466
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроме того, я еще раз прошу выполнить мою рекомендацию и расставить отступы для строгого соблюдения иерархии. То есть If, Else и End If, касающиеся одного блока, должны находиться на одном уровне (с одинаковым отступом). Все, что находится внутри блока, должно быть с бОльшим отступом (глубже) и на одном уровне между собой. Это позволяет сразу выявлять логические ошибки (как в данном случае сразу очевидно, что открытия/закрытия блока условий непарные)
...
Рейтинг: 0 / 0
Дополнительное условие в рабочий код
    #36471487
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
If a =  1  Then 'Условие для выполнения кода. Public Условие As Integer
	If b=  2  Then'Сообщение Ок не выполнение кода
		Exit Sub
	End If
		If с =  3  Then 'Условие для поиск даты по совпадению, для выполнения основного условия.
			If d =  4  Then 'Основное условие
				If e =  5  Then 'Сообщение Да, Нет
					s =  1 
					s =  2 	
				End If
  		Else
				If g =  6  Then 'Дополнительное условие
					If z =  7  Then 'Дополнительное сообщение Да, Нет
						s =  3 
						s =  2 
					End If
				End If
			End If
		End If
End If 'Конец выполнение кода. Public Условие As Integer
При выполнение g = 6 выполняется z = 7 При выборе Да выполняются операторы s = 3, s = 2, при выборе Нет операторы s = 3, s = 2 не выполняются. Если g = 6 не выполняется, то выполняется только оператор s = 3 на основание условия d = 4

Вроде так. !Номера условий поменялись.
End If забыл, в рабочем коде она прописана.
...
Рейтинг: 0 / 0
Дополнительное условие в рабочий код
    #36471491
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
segail,

E=5 и g=6 на одном уровне стоят. Переделать?
...
Рейтинг: 0 / 0
Дополнительное условие в рабочий код
    #36471503
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точнее так.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
If a =  1  Then 'Условие для выполнения кода. Public Условие As Integer
	If b=  2  Then'Сообщение Ок не выполнение кода
		Exit Sub
	End If
		If с =  3  Then 'Условие для поиск даты по совпадению, для выполнения основного условия.
			If d =  4  Then 'Основное условие
				If e =  5  Then 'Сообщение Да, Нет
					s =  1 
					s =  2 	
				End If
  			Else
					If g =  6  Then 'Дополнительное условие
						If z =  7  Then 'Дополнительное сообщение Да, Нет
							s =  3 
							s =  2 
						End If
					End If
			End If
		End If
End If 'Конец выполнение кода. Public Условие As Integer


При выполнение g = 6 выполняется z = 7 При выборе Да выполняются операторы s = 3, s = 2, при выборе Нет операторы s = 3, s = 2 не выполняются. Если g = 6 не выполняется, то выполняется только оператор s = 3 на основание условия d = 4
...
Рейтинг: 0 / 0
Дополнительное условие в рабочий код
    #36471686
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
немножко подправлю отступы (не внося изменений)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
If a =  1  Then 'Условие для выполнения кода. Public Условие As Integer
	If b=  2  Then'Сообщение Ок не выполнение кода
		Exit Sub
	End If
	If с =  3  Then 'Условие для поиск даты по совпадению, для выполнения основного условия.
		If d =  4  Then 'Основное условие
			If e =  5  Then 'Сообщение Да, Нет
				s =  1 
				s =  2 	
			End If
  		Else
			If g =  6  Then 'Дополнительное условие
				If z =  7  Then 'Дополнительное сообщение Да, Нет
					s =  3 
					s =  2 
				End If
			End If
		End If
	End If
End If 'Конец выполнение кода

а вот тут у вас противоречие:
segailЕсли g = 6 не выполняется, то выполняется только оператор s = 3 на основание условия d = 4

если d=4, то говорить о проверке условия g=6 нет смысла, так как этот фрагмент вообще не будет выполняться (будет выполняться ветка проверки е=5)
...
Рейтинг: 0 / 0
Дополнительное условие в рабочий код
    #36471698
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если вы хотите, чтобы проверка условия g=6 делалась всегда, независимо от d=4, то тогда и проверять g=6 нужно раньше, чем d=4 (уровнем выше)
...
Рейтинг: 0 / 0
Дополнительное условие в рабочий код
    #36472837
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proа если вы хотите, чтобы проверка условия g=6 делалась всегда, независимо от d=4, то тогда и проверять g=6 нужно раньше, чем d=4 (уровнем выше)
Здравствуйте.

Объясню по-другому, если убрать е=5, g=6, z=7 и s=2, то код становится таким, каким он был до этого.
То есть изначально при выполнении d = 4, выполнялся оператор s=1 или s=3 в зависимости от условия.
Но возникла ситуация добавление дополнительных условий и оператора (о которых было сказано выше), не нарушая основу изначального кода.
Появляется дополнительный оператор s=2 который выполняется перед Else но теперь перед выполнением выходит сообщение e = 5 которое дает пользователю право выбора, выполнить s = 1 и s = 2 до Еlse или не выполнить, на этом все. Далее если d = 4 дает переход выполнения кода после Else (так и должно быть) то здесь тоже вставлен дополнительный оператор, тот же самый s=2, вот здесь и возникает проблема.
Если при прохождении условия g = 6 оно дает отрицательный результат, то выходит сообщение выбора z = 7, выполнить операторы s = 3 и s = 2? или не выполнить? Если при прохождении условия g = 6 оно дает положительный результат, то z = 7 не выполняется, а выполняется только один оператор s = 3 на основание условия d = 4 потому что уже произошел переход за Else (это я так думаю), или без него неважно.

p/s
1. Перестановка условий не дает тот результат который я описал, возможно необходимо что то поменять или добавить. Не знаю.
2. Как Вы заметили после Else два оператора s = 3 и s = 2 стоят в одном блоке, это тоже не правильно, так как они выполняются два вместе или один раздельно. Просто я не знаю, куда воткнуть s = 2 после Else.
...
Рейтинг: 0 / 0
Дополнительное условие в рабочий код
    #36472865
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл написать после предложения “вот здесь и возникает проблема.”
Как должно быть:
...
Рейтинг: 0 / 0
Дополнительное условие в рабочий код
    #36473327
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
segail Как должно быть:
Если при прохождении условия g = 6 оно дает отрицательный результат, то выходит сообщение выбора z = 7, выполнить операторы s = 3 и s = 2? или не выполнить? Если при прохождении условия g = 6 оно дает положительный результат, то z = 7 не выполняется, а выполняется только один оператор s = 3 на основание условия d = 4 потому что уже произошел переход за Else (это я так думаю), или без него неважно.

ну вот так вроде в соответствии с вашим описанием:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
If a =  1  Then 'Условие для выполнения кода. Public Условие As Integer
	If b=  2  Then'Сообщение Ок не выполнение кода
		Exit Sub
	End If
	If с =  3  Then 'Условие для поиск даты по совпадению, для выполнения основного условия.
		If d =  4  Then 'Основное условие
			If e =  5  Then 'Сообщение Да, Нет
				s =  1 
				s =  2 	
			End If
  		Else
			If g =  6  Then 'Дополнительное условие
				s =  3 
			Else
				If z =  7  Then 'Дополнительное сообщение Да, Нет
					s =  3 
					s =  2 
				End If
			End If
		End If
	End If
End If 'Конец выполнение кода
...
Рейтинг: 0 / 0
Дополнительное условие в рабочий код
    #36473365
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Я об этом думал, И даже ответ приготовил
Но вставлять дополнительно s = 3 после Else не желательно, оператор большой...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 ‘.....................................................
If g =  6  Then 'Дополнительное условие
	If z =  7  Then 'Дополнительное сообщение Да, Нет
		s =  3 
		s =  2 
	Else
		s =  3 
	End If
End If
‘.....................................................
Может изначально, как то задать переменную для s=3, через публик пробовал, выдает ошибку.
...
Рейтинг: 0 / 0
Дополнительное условие в рабочий код
    #36473602
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
segailНо вставлять дополнительно s = 3 после Else не желательно, оператор большой...

Оформите s=3 в виде подпрограммы (GoSub) или процедуры (Sub, Function).

И только не спрашивайте, как это сделать.
Мы все-таки не для того здесь сидим, чтобы объяснять, как пользоваться кнопочкой F1 или синтаксис оператора IF . Для этого существуют учебники
...
Рейтинг: 0 / 0
Дополнительное условие в рабочий код
    #36473611
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, это:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
If g =  6  Then 'Дополнительное условие
	If Msgbox(....) = vbYes Then 'Дополнительное сообщение Да, Нет
		s =  3 
		s =  2 
	Else
		s =  3 
	End If
End If

Легко переделать в:
Код: plaintext
1.
2.
3.
4.
5.
If g =  6  Then 'Дополнительное условие
	z = Msgbox(....)
	s =  3 
	If z = vbYes Then s =  2 
End If

что мешает?
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Дополнительное условие в рабочий код
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]