powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Проблема в цикле.
7 сообщений из 7, страница 1 из 1
Проблема в цикле.
    #36852053
hum_i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день! Помогите пожалуйста разобраться с циклом. У меня в цикле одна переменная. Вроде все нормально, но дает ошибку Next Without for. Помогите разобраться

Код: 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.
Dim j As Integer
For j =  23  To  26 

Dim rs1 As ADODB.Recordset:         Set rs1 = New ADODB.Recordset
Set rs1.ActiveConnection = con

If Cells(j,  2 ).Value = "1" Then

Sql = " select"
Sql = Sql & " d.count_peredano_do_19"
Sql = Sql & " from dealer_do_posle_19may d"
Sql = Sql & " where d.delr_id = " + d + ""
Sql = Sql & " and d.rtpl_rtpl_id = " + Cells(j,  3 ).Text + ""

rs1.Open Sql, con
Sheets("Лист1").Select

Cells(j,  4 ).Value = ""
Cells(j,  4 ).CopyFromRecordset rs1

If Cells(j,  4 ).Value = "" Then
Cells(j,  4 ).Value = "0"
End If

If Cells(j,  2 ).Value = "2" Then

Sql = " select"
Sql = Sql & " d.count_peredano_posle_19"
Sql = Sql & " from dealer_do_posle_19may d"
Sql = Sql & " where d.delr_id = " + d + ""
Sql = Sql & " and d.rtpl_rtpl_id = " + Cells(j,  3 ).Text + ""

rs1.Open Sql, con
Sheets("Лист1").Select

Cells(j,  5 ).Value = ""
Cells(j,  5 ).CopyFromRecordset rs1

If Cells(j,  5 ).Value = "" Then
Cells(j,  5 ).Value = "0"
End If


Exit For
End If
Next j
...
Рейтинг: 0 / 0
Проблема в цикле.
    #36852064
sergeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
end if'а не хватает
...
Рейтинг: 0 / 0
Проблема в цикле.
    #36852338
hum_i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое. Все заработало.
Но вот еще одна проблем ка возникла. Макрос должен вставлять данные в 5 столбец в зависимости от значения 2 столбца (тип) и 3 столбца (id тарифного плана). 4 столбец это названия тарифных планов
В общем выглядит это так

Тип ТП_ID Название_ТП Значение
1 92 Тар план1 до 35
2 92 Тар план1 после

Так вот когда тип = 1 он ставит значение, а когда = 2 не хочет ставить. Не пойму в чем дело. Подскажите пожалуйста.
...
Рейтинг: 0 / 0
Проблема в цикле.
    #36852353
hum_i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так наверное не понятно. Прилагаю Excel файл
а вот сам код
Код: 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.
Dim j As Integer
For j =  23  To  26 

Dim rs1 As ADODB.Recordset:         Set rs1 = New ADODB.Recordset
Set rs1.ActiveConnection = con

'-----ïåðåäàííûå äî 19 ìàÿ-----
If Cells(j,  2 ).Value = "1" Then

Sql = " select"
Sql = Sql & " d.count_peredano_do_19"
Sql = Sql & " from irina.dealer_do_posle_19may d"
Sql = Sql & " where d.month_period like '" + Cells( 3 ,  1 ).Text + "'"
Sql = Sql & " and d.delr_id = " + d + ""
Sql = Sql & " and d.rtpl_rtpl_id = " + Cells(j,  3 ).Text + ""

rs1.Open Sql, con
'Sheets("Ëèñò1").Select

Cells(j,  5 ).Value = ""
Cells(j,  5 ).CopyFromRecordset rs1

If Cells(j,  5 ).Value = "" Then
Cells(j,  5 ).Value = "0"
End If

'-----ïåðåäàííûå ïîñëå 19 ìàÿ-----
If Cells(j,  2 ).Value = "2" Then

Sql = " select"
Sql = Sql & " d.count_peredano_posle_19"
Sql = Sql & " from irina.dealer_do_posle_19may d"
Sql = Sql & " where d.month_period like '" + Cells( 3 ,  1 ).Text + "'"
Sql = Sql & " and d.delr_id = " + d + ""
Sql = Sql & " and d.rtpl_rtpl_id = " + Cells(j,  3 ).Text + ""

rs1.Open Sql, con
'Sheets("Ëèñò1").Select

Cells(j,  5 ).Value = ""
Cells(j,  5 ).CopyFromRecordset rs1

If Cells(j,  5 ).Value = "" Then
Cells(j,  5 ).Value = "0"
End If


Exit For
End If
End If
Next j
...
Рейтинг: 0 / 0
Проблема в цикле.
    #36852552
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) End If вы забыли поставить перед вторым условием, а не в конце. У вас же при опИсанной структуре дело до .Value="2" не дойдёт никогда:
Код: plaintext
1.
2.
3.
4.
5.
6.
if Cells(j,  2 ).Value = "1" then
   ...
   if Cells(j,  2 ).Value = "2" then
      ...
      exit for
   endif
endif
Если уж занимаетесь структурным программированием, то и структуру неплохо бы изображать :)

2) При таком подходе удобнее, ИМХО, использовать оператор выбора (case), а не условие. Или всё дело в том, что вам при .Value="2" надо сразу выходить из цикла? Хотя, в любом случае, ваше количество кода можно сократить раза в два
Код: 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.
Dim j As Integer

Dim rs1 As ADODB.Recordset
Set rs1 = New ADODB.Recordset
Set rs1.ActiveConnection = con

Dim Sql, Sql_2 As String
Sql_2 = " from irina.dealer_do_posle_19may d"
Sql_2 = Sql_2 & " where d.month_period like '" + Cells( 3 ,  1 ).Text + "'"
Sql_2 = Sql_2 & " and d.delr_id = " + d + ""
Sql_2 = Sql_2 & " and d.rtpl_rtpl_id = "

Dim DoExit
DoExit = False

For j =  23  To  26 

	Select Case Cells(j,  2 ).Value
	Case "1"
		Sql = " select d.count_peredano_do_19" + Sql_2 + Cells(j,  3 ).Text + ""
	Case "2"
		Sql = " select d.count_peredano_posle_19"+ Sql_2 + Cells(j,  3 ).Text + ""
		DoExit = True
	End Select

	rs1.Open Sql, con
	Cells(j,  5 ).Value = ""
	Cells(j,  5 ).CopyFromRecordset rs1
	If Cells(j,  5 ).Value = "" Then
		Cells(j,  5 ).Value = "0"
	End If
	
	If DoExit then Exit For

Next j
...
Рейтинг: 0 / 0
Проблема в цикле.
    #36852587
Cursky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hum_i,

Вы не отформатировали текст программы отступами, поэтому, наверное и не заметили ошибку. И к тому же у вас там есть Exit For. Это для чего?
Вот так будет покрасивей.

Код: 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.
Sub Import()
    Dim j As Integer
    For j =  23  To  26 
        Dim rs1 As ADODB.Recordset
        Set rs1 = New ADODB.Recordset
        Set rs1.ActiveConnection = con
        If Cells(j,  2 ).Value = "1" Then
            Sql = " select"
            Sql = Sql & " d.count_peredano_do_19"
            Sql = Sql & " from dealer_do_posle_19may d"
            Sql = Sql & " where d.delr_id = " + d + ""
            Sql = Sql & " and d.rtpl_rtpl_id = " + Cells(j,  3 ).Text + ""
        End If
        If Cells(j,  2 ).Value = "2" Then
            Sql = " select"
            Sql = Sql & " d.count_peredano_posle_19"
            Sql = Sql & " from dealer_do_posle_19may d"
            Sql = Sql & " where d.delr_id = " + d + ""
            Sql = Sql & " and d.rtpl_rtpl_id = " + Cells(j,  3 ).Text + ""
        End If
        rs1.Open Sql, con
        Sheets("Лист1").Select
        Cells(j,  5 ).Value = ""
        Cells(j,  5 ).CopyFromRecordset rs1
        If Cells(j,  5 ).Value = "" Then
            Cells(j,  5 ).Value = "0"
        End If
    Next j
End Sub
...
Рейтинг: 0 / 0
Проблема в цикле.
    #36852597
Cursky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немного замешкался с предварительным просмотром :)
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Проблема в цикле.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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