Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ограничения циклов / 23 сообщений из 23, страница 1 из 1
13.08.2008, 07:35
    #35484304
Nomad87
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ограничения циклов
народ, вот столкнулся с такой проблеммой:
у меня довольно большая вложенность циклов получилась (6)
for
for
do while
loop
do while
loop
for
for
next
next
+там ещё несколько if then
и если я добавлю ещё один цикл while то у меня начинают выскакивать ошибки типа
он видит концы циклов но не видит их начала (next withhout block for ) или (end if withhout block if) /// вот что делать, подскажите?
если нужно - могу весь пример скинуть .. 0:-)
...
Рейтинг: 0 / 0
13.08.2008, 07:42
    #35484306
Restavraciya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ограничения циклов
Указывать чей next, тогда ему будет проще
Если конечно ошибок нет
...
Рейтинг: 0 / 0
13.08.2008, 07:51
    #35484311
Nomad87
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ограничения циклов
ошибок нет, если я убираю свой "новый" цикл, все опять работает ..
если делаю так как вы сказали - не помогает %(
...
Рейтинг: 0 / 0
13.08.2008, 08:00
    #35484316
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ограничения циклов
кидайте пример
а то на представленом примере уж точно не хватает операторов next


I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
13.08.2008, 08:01
    #35484317
Restavraciya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ограничения циклов
авторесли нужно - могу весь пример скинутьСкидывайте
...
Рейтинг: 0 / 0
13.08.2008, 08:26
    #35484337
Nomad87
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ограничения циклов
вот собственно, проблемное место выделю жирным шрифтом

Dim fnd, n1, s As Byte
Dim q As Byte
Dim bol As Boolean
bol = False
Dim text As String
Dim d As Date
Dim tx As String
Dim fin, u, fox As Byte
Dim Sum, Sum1 As Long
Sum = 0
Sum1 = 0
For h = 1 To Workbooks(nameIn).Sheets.count
If Workbooks(nameIn).Sheets(h).name <> "Шаблон" Then
n1 = Workbooks(nameIn).Sheets(h).Range("B500").End(xlUp).Row
For s = 1 To n1
text = Workbooks(nameIn).Sheets(h).Range("A" & s)
fnd = InStr(1, text, "-й этап")
If fnd >= 2 Then
bol = True
End If
If bol = True Then
Dim obj As String
Dim std As String
obj = Workbooks(nameIn).Sheets(h).Range("B1").Value
std = Workbooks(nameIn).Sheets(h).Range("B3").Value
If Workbooks(nameIn).Sheets(h).Range("D" & s).Value <> "" Then
d = CDate(Workbooks(nameIn).Sheets(h).Range("D" & s).Value)
Do While Workbooks(nameIn).Sheets(h).Range("A" & s + 1).Value = ""
tx = Workbooks(nameIn).Sheets(h).Range("B" & s + 1)
fin = InStr(1, tx, "БТП")
fox = InStr(1, tx, "****")
If (fin > 0) Or (fox > 0) Then
u = s + 2
Do While Workbooks(nameIn).Sheets(h).Range("E" & u).Value <> ""
Sum = Sum + Val(Workbooks(nameIn).Sheets(h).Range("E" & u).Value)
u = u + 1
Loop
u = 0
End If
If fin = 0 Then
u = s + 2
Do While Workbooks(nameIn).Sheets(h).Range("E" & u).Value <> ""
Sum1 = Sum1 + Val(Workbooks(nameIn).Sheets(h).Range("E" & u).Value)
u = u + 1
Loop
u = 0
End If
With ActiveWorkbook
For i = LBound(arMonth, 1) To UBound(arMonth, 1)
For j = 0 To count - 1
If (Month(d) = i) And (ObjectName(j + 1) = obj) Then
For q = 1 To countr + 1
If (ListObject(q) = obj) And (DopStatys(q) = std) Then
If (ListObject(q) = ObjectName(j + 1)) And (Workbooks(nameIn).Sheets(h).Range("A" & s).Value <> "") Then
If (StatysObject(q) = "Îñíîâíîé") And (DopStatys(q) = "äîï ñîãëàøåíèå") And (Workbooks(nameIn).Sheets(h).Range("A" & s).Value <> "") Then
Sheets(ActiveWorkbook.Sheets.count - i).Range("B" + CStr(j * 11 + 4)).Value = Workbooks(nameIn).Sheets(h).Range("A" & s)
Sheets(ActiveWorkbook.Sheets.count - i).Range("E" + CStr(j * 11 + 4)).Value = Workbooks(nameIn).Sheets(h).Range("E" & s)
Sheets(ActiveWorkbook.Sheets.count - i).Range("F" + CStr(j * 11 + 4)).Value = Sum
Sheets(ActiveWorkbook.Sheets.count - i).Range("G" + CStr(j * 11 + 4)).Value = Sum1
Exit For
End If
If ((StatysObject(q) = "Îñíîâíîé") Or (StatysObject(q) = "îñíîâíîé")) And (DopStatys(q) = "") And (Workbooks(nameIn).Sheets(h).Range("A" & s).Value <> "") Then
Sheets(ActiveWorkbook.Sheets.count - i).Range("B" + CStr(j * 11 + 3)).Value = Workbooks(nameIn).Sheets(h).Range("A" & s)
Sheets(ActiveWorkbook.Sheets.count - i).Range("E" + CStr(j * 11 + 3)).Value = Workbooks(nameIn).Sheets(h).Range("E" & s)
Sheets(ActiveWorkbook.Sheets.count - i).Range("F" + CStr(j * 11 + 3)).Value = Sum
Sheets(ActiveWorkbook.Sheets.count - i).Range("G" + CStr(j * 11 + 3)).Value = Sum1
Exit For
End If
If (StatysObject(q) = "Àâòîðñêèé") And (DopStatys(q) = "äîï ñîãëàøåíèå") And (Workbooks(nameIn).Sheets(h).Range("A" & s).Value <> "") Then
Sheets(ActiveWorkbook.Sheets.count - i).Range("B" + CStr(j * 11 + 6)).Value = Workbooks(nameIn).Sheets(h).Range("A" & s)
Sheets(ActiveWorkbook.Sheets.count - i).Range("E" + CStr(j * 11 + 6)).Value = Workbooks(nameIn).Sheets(h).Range("E" & s)
Sheets(ActiveWorkbook.Sheets.count - i).Range("F" + CStr(j * 11 + 6)).Value = Sum
Sheets(ActiveWorkbook.Sheets.count - i).Range("G" + CStr(j * 11 + 6)).Value = Sum1
Exit For
End If
If ((StatysObject(q) = "Àâòîðñêèé") Or (StatysObject(q) = "àâòîðñêèé")) And (DopStatys(q) = "") And (Workbooks(nameIn).Sheets(h).Range("A" & s).Value <> "") Then
Sheets(ActiveWorkbook.Sheets.count - i).Range("B" + CStr(j * 11 + 5)).Value = Workbooks(nameIn).Sheets(h).Range("A" & s)
Sheets(ActiveWorkbook.Sheets.count - i).Range("E" + CStr(j * 11 + 5)).Value = Workbooks(nameIn).Sheets(h).Range("E" & s)
Sheets(ActiveWorkbook.Sheets.count - i).Range("F" + CStr(j * 11 + 5)).Value = Sum
Sheets(ActiveWorkbook.Sheets.count - i).Range("G" + CStr(j * 11 + 5)).Value = Sum1
Exit For
End If
If (StatysObject(q) = "ÃÝÌ") And (DopStatys(q) = "äîï ñîãëàøåíèå") And (Workbooks(nameIn).Sheets(h).Range("A" & s).Value <> "") Then
Sheets(ActiveWorkbook.Sheets.count - i).Range("B" + CStr(j * 11 + 8)).Value = Workbooks(nameIn).Sheets(h).Range("A" & s)
Sheets(ActiveWorkbook.Sheets.count - i).Range("E" + CStr(j * 11 + 8)).Value = Workbooks(nameIn).Sheets(h).Range("E" & s)
Sheets(ActiveWorkbook.Sheets.count - i).Range("F" + CStr(j * 11 + 8)).Value = Sum
Sheets(ActiveWorkbook.Sheets.count - i).Range("G" + CStr(j * 11 + 8)).Value = Sum1
Exit For
End If
If ((StatysObject(q) = "ÃÝÌ") Or (StatysObject(q) = "ãýì")) And (DopStatys(q) = "") And (Workbooks(nameIn).Sheets(h).Range("A" & s).Value <> "") Then
Sheets(ActiveWorkbook.Sheets.count - i).Range("B" + CStr(j * 11 + 7)).Value = Workbooks(nameIn).Sheets(h).Range("A" & s)
Sheets(ActiveWorkbook.Sheets.count - i).Range("E" + CStr(j * 11 + 7)).Value = Workbooks(nameIn).Sheets(h).Range("E" & s)
Sheets(ActiveWorkbook.Sheets.count - i).Range("F" + CStr(j * 11 + 7)).Value = Sum
Sheets(ActiveWorkbook.Sheets.count - i).Range("G" + CStr(j * 11 + 7)).Value = Sum1
Exit For
End If
End If
End If
Next q
End If
Next j
Next i
End With
bol = False
Sum = 0
Sum1 = 0
End If ' ругается на эту строчку говорит - не может найти блок ИФ
End If ' ругается на эту строчку говорит - не может найти блок ИФ
Next s
Loop
End If
Next h

вот если убрать do while и loop - все работает ... а так - нет :(
...
Рейтинг: 0 / 0
13.08.2008, 09:51
    #35484459
FAndrew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ограничения циклов
А как насчет того что бы пользоваться отсупами?
ИМХО, тогда проблема решиться сама собой.
На первый взлгяд последний loop должен стоять до next s.
Но еще раз повторяю, что читать такой не структурированный код не охота.

Есть еще полезная практика возде каждого loop и End If в комментариях указывать условие по которому они работают, т.е. копировать информацию из операторов do и if.
...
Рейтинг: 0 / 0
13.08.2008, 10:05
    #35484491
Nomad87
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ограничения циклов
на самом деле я пользуюсь отступами, но дело в том что если скопировать и вставить то отступы удаляются, а я хотел выделить тот участок где есть проблема.
я думаю, что правильно поставил loop потому как мне нужен был цикл который будет складывать ячейки внутри цикла по ячейкам (счетчик как раз s)
могу кинуть структурированный код + отметить где и что заканчивается

Код: 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.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
Dim fnd, n1, s As Byte
Dim q As Byte
Dim bol As Boolean
     bol = False
Dim text As String
Dim d As Date
Dim tx As String
Dim fin, u, fox As Byte
Dim Sum, Sum1 As Long
     Sum =  0 
     Sum1 =  0 
For h =  1  To Workbooks(nameIn).Sheets.count
    If Workbooks(nameIn).Sheets(h).name <> "Шаблон" Then
        n1 = Workbooks(nameIn).Sheets(h).Range("B500").End(xlUp).Row
           For s =  1  To n1
               text = Workbooks(nameIn).Sheets(h).Range("A" & s)
               fnd = InStr( 1 , text, "-й этап")
           If fnd >=  2  Then
                               bol = True
           End If  'fnd >= 2
          If bol = True Then
                            Dim obj As String 
                            Dim std As String 
             obj = Workbooks(nameIn).Sheets(h).Range("B1").Value
             std = Workbooks(nameIn).Sheets(h).Range("B3").Value
                   If Workbooks(nameIn).Sheets(h).Range("D" & s).Value <> "" Then
                       d = CDate(Workbooks(nameIn).Sheets(h).Range("D" & s).Value)
                           Do While Workbooks(nameIn).Sheets(h).Range("A" & s +  1 ).Value = ""
                                tx = Workbooks(nameIn).Sheets(h).Range("B" & s +  1 )
                                  fin = InStr( 1 , tx, "БТП")
                                  fox = InStr( 1 , tx, "****")
                                         If (fin >  0 ) Or (fox >  0 ) Then
                                             u = s +  2 
                                             Do While Workbooks(nameIn).Sheets(h).Range("E" & u).Value <> ""
                                                 Sum = Sum + Val(Workbooks(nameIn).Sheets(h).Range("E" & u).Value)
                                                 u = u +  1 
                                            Loop
                                                 u =  0 
                                        End If                  '(fin > 0) Or (fox > 0)
                                           If fin =  0  Then
                                             u = s +  2 
                                            Do While Workbooks(nameIn).Sheets(h).Range("E" & u).Value <> ""
                                              Sum1 = Sum1 + Val(Workbooks(nameIn).Sheets(h).Range("E" & u).Value)
                                               u = u +  1 
                                            Loop
                                               u =  0 
                                           End If    'fin = 0
With ActiveWorkbook
For i = LBound(arMonth,  1 ) To UBound(arMonth,  1 ) 
For j =  0  To count -  1  
If (Month(d) = i) And (ObjectName(j +  1 ) = obj) Then
For q =  1  To countr +  1  
If (ListObject(q) = obj) And (DopStatys(q) = std) Then
If (ListObject(q) = ObjectName(j +  1 )) And (Workbooks(nameIn).Sheets(h).Range("A" & s).Value <> "") Then
If (StatysObject(q) = "Îñíîâíîé") And (DopStatys(q) = "äîï ñîãëàøåíèå") And (Workbooks(nameIn).Sheets(h).Range("A" & s).Value <> "") Then
Sheets(ActiveWorkbook.Sheets.count - i).Range("B" + CStr(j *  11  +  4 )).Value = Workbooks(nameIn).Sheets(h).Range("A" & s)
Sheets(ActiveWorkbook.Sheets.count - i).Range("E" + CStr(j *  11  +  4 )).Value = Workbooks(nameIn).Sheets(h).Range("E" & s)
Sheets(ActiveWorkbook.Sheets.count - i).Range("F" + CStr(j *  11  +  4 )).Value = Sum
Sheets(ActiveWorkbook.Sheets.count - i).Range("G" + CStr(j *  11  +  4 )).Value = Sum1
Exit For
End If
If ((StatysObject(q) = "Îñíîâíîé") Or (StatysObject(q) = "îñíîâíîé")) And (DopStatys(q) = "") And (Workbooks(nameIn).Sheets(h).Range("A" & s).Value <> "") Then
Sheets(ActiveWorkbook.Sheets.count - i).Range("B" + CStr(j *  11  +  3 )).Value = Workbooks(nameIn).Sheets(h).Range("A" & s)
Sheets(ActiveWorkbook.Sheets.count - i).Range("E" + CStr(j *  11  +  3 )).Value = Workbooks(nameIn).Sheets(h).Range("E" & s)
Sheets(ActiveWorkbook.Sheets.count - i).Range("F" + CStr(j *  11  +  3 )).Value = Sum
Sheets(ActiveWorkbook.Sheets.count - i).Range("G" + CStr(j *  11  +  3 )).Value = Sum1
Exit For
End If
If (StatysObject(q) = "Àâòîðñêèé") And (DopStatys(q) = "äîï ñîãëàøåíèå") And (Workbooks(nameIn).Sheets(h).Range("A" & s).Value <> "") Then
Sheets(ActiveWorkbook.Sheets.count - i).Range("B" + CStr(j *  11  +  6 )).Value = Workbooks(nameIn).Sheets(h).Range("A" & s)
Sheets(ActiveWorkbook.Sheets.count - i).Range("E" + CStr(j *  11  +  6 )).Value = Workbooks(nameIn).Sheets(h).Range("E" & s)
Sheets(ActiveWorkbook.Sheets.count - i).Range("F" + CStr(j *  11  +  6 )).Value = Sum
Sheets(ActiveWorkbook.Sheets.count - i).Range("G" + CStr(j *  11  +  6 )).Value = Sum1
Exit For
End If
If ((StatysObject(q) = "Àâòîðñêèé") Or (StatysObject(q) = "àâòîðñêèé")) And (DopStatys(q) = "") And (Workbooks(nameIn).Sheets(h).Range("A" & s).Value <> "") Then
Sheets(ActiveWorkbook.Sheets.count - i).Range("B" + CStr(j *  11  +  5 )).Value = Workbooks(nameIn).Sheets(h).Range("A" & s)
Sheets(ActiveWorkbook.Sheets.count - i).Range("E" + CStr(j *  11  +  5 )).Value = Workbooks(nameIn).Sheets(h).Range("E" & s)
Sheets(ActiveWorkbook.Sheets.count - i).Range("F" + CStr(j *  11  +  5 )).Value = Sum
Sheets(ActiveWorkbook.Sheets.count - i).Range("G" + CStr(j *  11  +  5 )).Value = Sum1
Exit For
End If
If (StatysObject(q) = "ÃÝÌ") And (DopStatys(q) = "äîï ñîãëàøåíèå") And (Workbooks(nameIn).Sheets(h).Range("A" & s).Value <> "") Then
Sheets(ActiveWorkbook.Sheets.count - i).Range("B" + CStr(j *  11  +  8 )).Value = Workbooks(nameIn).Sheets(h).Range("A" & s)
Sheets(ActiveWorkbook.Sheets.count - i).Range("E" + CStr(j *  11  +  8 )).Value = Workbooks(nameIn).Sheets(h).Range("E" & s)
Sheets(ActiveWorkbook.Sheets.count - i).Range("F" + CStr(j *  11  +  8 )).Value = Sum
Sheets(ActiveWorkbook.Sheets.count - i).Range("G" + CStr(j *  11  +  8 )).Value = Sum1
Exit For
End If
If ((StatysObject(q) = "ÃÝÌ") Or (StatysObject(q) = "ãýì")) And (DopStatys(q) = "") And (Workbooks(nameIn).Sheets(h).Range("A" & s).Value <> "") Then
Sheets(ActiveWorkbook.Sheets.count - i).Range("B" + CStr(j *  11  +  7 )).Value = Workbooks(nameIn).Sheets(h).Range("A" & s)
Sheets(ActiveWorkbook.Sheets.count - i).Range("E" + CStr(j *  11  +  7 )).Value = Workbooks(nameIn).Sheets(h).Range("E" & s)
Sheets(ActiveWorkbook.Sheets.count - i).Range("F" + CStr(j *  11  +  7 )).Value = Sum
Sheets(ActiveWorkbook.Sheets.count - i).Range("G" + CStr(j *  11  +  7 )).Value = Sum1
Exit For
End If   
End If  '(ListObject(q) = ObjectName(j + 1)) And (Workbooks(nameIn).Sheets(h).Range("A" & s).Value <> "") 
End If  '(ListObject(q) = obj) And (DopStatys(q) = std)
Next q
End If'(Month(d) = i) And (ObjectName(j + 1) = obj)
Next j
Next i
End With
bol = False
Sum =  0 
Sum1 =  0 
End If ' ругается на эту строчку говорит - не может найти блок ИФ
End If ' ругается на эту строчку говорит - не может найти блок ИФ
Next s
Loop 
End If
Next h

постарался более структурно :)
...
Рейтинг: 0 / 0
13.08.2008, 10:15
    #35484509
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ограничения циклов
как может быть правильно, если начинается
Код: plaintext
1.
2.
3.
For h =  1  To Workbooks(nameIn).Sheets.count
    If Workbooks(nameIn).Sheets(h).name <> "Шаблон" Then
        n1 = Workbooks(nameIn).Sheets(h).Range("B500").End(xlUp).Row
           For s =  1  To n1
а заканчивается

Код: plaintext
1.
2.
3.
Next s
Loop 
End If
Next h


I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
13.08.2008, 10:16
    #35484514
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ограничения циклов
возможно примерно так

Код: 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.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
Dim fnd, n1, s As Byte
Dim q As Byte
Dim bol As Boolean

bol = False

Dim text As String
Dim d As Date
Dim tx As String
Dim fin, u, fox As Byte
Dim Sum, Sum1 As Long

Sum =  0 
Sum1 =  0 

For h =  1  To Workbooks(nameIn).Sheets.Count
    If Workbooks(nameIn).Sheets(h).Name <> "Øàáëîí" Then
        n1 = Workbooks(nameIn).Sheets(h).Range("B500").End(xlUp).Row
        For s =  1  To n1
            text = Workbooks(nameIn).Sheets(h).Range("A" & s)
            fnd = InStr( 1 , text, "-é ýòàï")
            If fnd >=  2  Then
                bol = True
            End If
            If bol = True Then
                Dim obj As String
                Dim std As String
                obj = Workbooks(nameIn).Sheets(h).Range("B1").Value
                std = Workbooks(nameIn).Sheets(h).Range("B3").Value
                If Workbooks(nameIn).Sheets(h).Range("D" & s).Value <> "" Then
                    d = CDate(Workbooks(nameIn).Sheets(h).Range("D" & s).Value)
                    Do While Workbooks(nameIn).Sheets(h).Range("A" & s +  1 ).Value = ""
                        tx = Workbooks(nameIn).Sheets(h).Range("B" & s +  1 )
                        fin = InStr( 1 , tx, "ÁÒÏ")
                        fox = InStr( 1 , tx, "****")
                        If (fin >  0 ) Or (fox >  0 ) Then
                            u = s +  2 
                            Do While Workbooks(nameIn).Sheets(h).Range("E" & u).Value <> ""
                                Sum = Sum + Val(Workbooks(nameIn).Sheets(h).Range("E" & u).Value)
                                u = u +  1 
                            Loop
                            u =  0 
                        End If
                        If fin =  0  Then
                            u = s +  2 
                            Do While Workbooks(nameIn).Sheets(h).Range("E" & u).Value <> ""
                                Sum1 = Sum1 + Val(Workbooks(nameIn).Sheets(h).Range("E" & u).Value)
                                u = u +  1 
                            Loop
                            u =  0 
                        End If
                        With ActiveWorkbook
                            For i = LBound(arMonth,  1 ) To UBound(arMonth,  1 )
                                For j =  0  To Count -  1 
                                    If (Month(d) = i) And (ObjectName(j +  1 ) = obj) Then
                                        For q =  1  To countr +  1 
                                            If (ListObject(q) = obj) And (DopStatys(q) = std) Then
                                                If (ListObject(q) = ObjectName(j +  1 )) And (Workbooks(nameIn).Sheets(h).Range("A" & s).Value <> "") Then
                                                    If (StatysObject(q) = "Iniiaiie") And (DopStatys(q) = "aii niaeaoaiea") And (Workbooks(nameIn).Sheets(h).Range("A" & s).Value <> "") Then
                                                        Sheets(ActiveWorkbook.Sheets.Count - i).Range("B" + CStr(j *  11  +  4 )).Value = Workbooks(nameIn).Sheets(h).Range("A" & s)
                                                        Sheets(ActiveWorkbook.Sheets.Count - i).Range("E" + CStr(j *  11  +  4 )).Value = Workbooks(nameIn).Sheets(h).Range("E" & s)
                                                        Sheets(ActiveWorkbook.Sheets.Count - i).Range("F" + CStr(j *  11  +  4 )).Value = Sum
                                                        Sheets(ActiveWorkbook.Sheets.Count - i).Range("G" + CStr(j *  11  +  4 )).Value = Sum1
                                                        Exit For
                                                    End If
                                                    If ((StatysObject(q) = "Iniiaiie") Or (StatysObject(q) = "iniiaiie")) And (DopStatys(q) = "") And (Workbooks(nameIn).Sheets(h).Range("A" & s).Value <> "") Then
                                                        Sheets(ActiveWorkbook.Sheets.Count - i).Range("B" + CStr(j *  11  +  3 )).Value = Workbooks(nameIn).Sheets(h).Range("A" & s)
                                                        Sheets(ActiveWorkbook.Sheets.Count - i).Range("E" + CStr(j *  11  +  3 )).Value = Workbooks(nameIn).Sheets(h).Range("E" & s)
                                                        Sheets(ActiveWorkbook.Sheets.Count - i).Range("F" + CStr(j *  11  +  3 )).Value = Sum
                                                        Sheets(ActiveWorkbook.Sheets.Count - i).Range("G" + CStr(j *  11  +  3 )).Value = Sum1
                                                        Exit For
                                                    End If
                                                    If (StatysObject(q) = "Aaoi?neee") And (DopStatys(q) = "aii niaeaoaiea") And (Workbooks(nameIn).Sheets(h).Range("A" & s).Value <> "") Then
                                                        Sheets(ActiveWorkbook.Sheets.Count - i).Range("B" + CStr(j *  11  +  6 )).Value = Workbooks(nameIn).Sheets(h).Range("A" & s)
                                                        Sheets(ActiveWorkbook.Sheets.Count - i).Range("E" + CStr(j *  11  +  6 )).Value = Workbooks(nameIn).Sheets(h).Range("E" & s)
                                                        Sheets(ActiveWorkbook.Sheets.Count - i).Range("F" + CStr(j *  11  +  6 )).Value = Sum
                                                        Sheets(ActiveWorkbook.Sheets.Count - i).Range("G" + CStr(j *  11  +  6 )).Value = Sum1
                                                        Exit For
                                                    End If
                                                    If ((StatysObject(q) = "Aaoi?neee") Or (StatysObject(q) = "aaoi?neee")) And (DopStatys(q) = "") And (Workbooks(nameIn).Sheets(h).Range("A" & s).Value <> "") Then
                                                        Sheets(ActiveWorkbook.Sheets.Count - i).Range("B" + CStr(j *  11  +  5 )).Value = Workbooks(nameIn).Sheets(h).Range("A" & s)
                                                        Sheets(ActiveWorkbook.Sheets.Count - i).Range("E" + CStr(j *  11  +  5 )).Value = Workbooks(nameIn).Sheets(h).Range("E" & s)
                                                        Sheets(ActiveWorkbook.Sheets.Count - i).Range("F" + CStr(j *  11  +  5 )).Value = Sum
                                                        Sheets(ActiveWorkbook.Sheets.Count - i).Range("G" + CStr(j *  11  +  5 )).Value = Sum1
                                                        Exit For
                                                    End If
                                                    If (StatysObject(q) = "AYI") And (DopStatys(q) = "aii niaeaoaiea") And (Workbooks(nameIn).Sheets(h).Range("A" & s).Value <> "") Then
                                                        Sheets(ActiveWorkbook.Sheets.Count - i).Range("B" + CStr(j *  11  +  8 )).Value = Workbooks(nameIn).Sheets(h).Range("A" & s)
                                                        Sheets(ActiveWorkbook.Sheets.Count - i).Range("E" + CStr(j *  11  +  8 )).Value = Workbooks(nameIn).Sheets(h).Range("E" & s)
                                                        Sheets(ActiveWorkbook.Sheets.Count - i).Range("F" + CStr(j *  11  +  8 )).Value = Sum
                                                        Sheets(ActiveWorkbook.Sheets.Count - i).Range("G" + CStr(j *  11  +  8 )).Value = Sum1
                                                        Exit For
                                                    End If
                                                    If ((StatysObject(q) = "AYI") Or (StatysObject(q) = "ayi")) And (DopStatys(q) = "") And (Workbooks(nameIn).Sheets(h).Range("A" & s).Value <> "") Then
                                                        Sheets(ActiveWorkbook.Sheets.Count - i).Range("B" + CStr(j *  11  +  7 )).Value = Workbooks(nameIn).Sheets(h).Range("A" & s)
                                                        Sheets(ActiveWorkbook.Sheets.Count - i).Range("E" + CStr(j *  11  +  7 )).Value = Workbooks(nameIn).Sheets(h).Range("E" & s)
                                                        Sheets(ActiveWorkbook.Sheets.Count - i).Range("F" + CStr(j *  11  +  7 )).Value = Sum
                                                        Sheets(ActiveWorkbook.Sheets.Count - i).Range("G" + CStr(j *  11  +  7 )).Value = Sum1
                                                        Exit For
                                                    End If
                                                End If
                                            End If
                                        Next q
                                    End If
                                Next j
                            Next i
                        End With
                        bol = False
                        Sum =  0 
                        Sum1 =  0 
                    Loop
                End If
            End If
        Next s
    End If
Next h

I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
13.08.2008, 10:29
    #35484550
ДмиДми
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ограничения циклов
Уважаемый Nomad87 ,
такая неотформатированность кода гарантирует возникновение ошибок.

Структурные блоки (For, If, Do etc.) необходимо выделять (при помощи табуляций) и замыкающие их директивы желательно снабжать комментариями (Next 'j, End if 'a > b etc.)

Так же гарантирует возникновение ошибок отсутствие описания переменных. Настоятельно рекомендую начинать каждый модуль директивой
Option Explicit
.
В приложении - Ваш код, отформатированный и дополненный описаниями некоторых переменных.
Некоторых, но не всех (я не телепат), так что пройти до конца трансляцию не удалось.

Успехов!
...
Рейтинг: 0 / 0
13.08.2008, 10:29
    #35484553
ДмиДми
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ограничения циклов
Скрепку забыл
...
Рейтинг: 0 / 0
13.08.2008, 10:41
    #35484586
ДмиДми
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ограничения циклов
Nomad87 ,
в окне VBE предусмотрено одно маленькое удобство (возможно, Вы о нём уже знаете, но на всякий случай):

над полосой вертикальной прокрутки есть (как и в окне Excel'я) маленький рубчик.
Потянув его мышкой вниз, можно резделить окно на две "форточки" (в Excel'е они названы "областями").

Очень помогает при форматировании структурных блоков, не помещающихся целиком на экране.
...
Рейтинг: 0 / 0
13.08.2008, 13:15
    #35485100
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ограничения циклов
Dim fnd, n1, s As Byte
......
For s = 1 To n1

У вас здесь n1 As Variant, s As Byte, а цикл все-равно их делает Integer. Осознанно работайте с типами данных. И хорошо было бы все декларации вынести наверх.

Успехов
...
Рейтинг: 0 / 0
13.08.2008, 15:20
    #35485540
ДмиДми
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ограничения циклов
VladConnFor s = 1 To n1
У вас здесь n1 As Variant, s As Byte, а цикл все-равно их делает Integer.Даже в случае
For v = 0.4 To 1.5 Step 0.1
?
Справка VB For counter = start To end [ Step step ]
...
counter Required. Numeric variable used as a loop counter. The variable can't be a Boolean or an array element.
...
Рейтинг: 0 / 0
13.08.2008, 17:12
    #35485909
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ограничения циклов
Нет, ДмиДми, не в вашем примере.

А вот если n1 будет 100, то его тип станет Integer, и куда бежать с s As Byte? Далее, в теле цикла VB переменную s неявно будет делать типом Integer, а показывать как Byte, вы этого и знать не будете, и этот Byte тогда можно будет засунуть куда подальше.

:0)
...
Рейтинг: 0 / 0
14.08.2008, 05:50
    #35486389
Nomad87
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ограничения циклов
ребят, спасибо огромное за ваши коментарии, я обязательно приму их к сведению ... просто сам изучал вба в течении пары недель с 0 ... ну и канеш осталось куча косяков, просто нужно закончиьт прогу ... думал, что если добавлю этот новый цикл - все будет ок, а она просто тупо вылетает ... вот эту ошибку просто не знаю даже как пробовать исправить ... может поглядите всю програмку, и вот как раз в 140 строчке этот косяк и есть ... (тот кусак который вы только что наблюдали)
заранее благодарен
пока что буду пробовать копать его сам
...
Рейтинг: 0 / 0
14.08.2008, 10:02
    #35486648
FAndrew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ограничения циклов
ИМХО, вам уже все разложили по полочкам. HandKot прямо указал на ошибку.
Вы исправили этот кусок? И что получилось?
Или же вы ждете когда за вас все сделают? Как тогда вы научитесь программировать?
...
Рейтинг: 0 / 0
14.08.2008, 11:51
    #35486982
Nomad87
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ограничения циклов
проблема в том что HandKot прямо указал на ошибку но не учел одной мелочи,
цикл который я добавлял -
Do While Workbooks(nameIn).Sheets(h).Range("A" & s + 1).Value = ""
loop
был добавлен для того чтобы программа считала сумму по всем предприятиям столбца
в этом цикле есть переменная s и на сколько я понимаю, если сделать так как сказал HandKot
то переменная s будет иметь одно значение и произойдет зацикливание ... вот.
если убрать этот цикл, то результатом будет только сумма только по одному предприятию в этапе, а мне соответственно нужна вся сумма по моему предприятию. как то так
извините, я не лентяй и не хочу чтоб за меня все делали, сам сутками сижу и уже голова кипит...
...
Рейтинг: 0 / 0
14.08.2008, 16:10
    #35488010
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ограничения циклов
Помните, раньше: "Я Пастернака не читал, но осуждаю". Так и я: код не смотрел, но сомневаюсь. Мне почему-то кажется, что все эти циклы не обязательны. Они выглядят какими-то слишком тяжеловесными для меня. Можно ли это же сделать через SQL запросы, через встроенные формулы, наконец, (VLookup) ?

:0)
...
Рейтинг: 0 / 0
14.08.2008, 16:17
    #35488030
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ограничения циклов
Можно было бы, наверно, отсортировать програмно. Через Find находить строки, соответствующие разным предприятиям, эпохам и идеям, а затем прописывать в коде FormulaR1C1 с SUM внутри в границах найденных строк. И нет почти циклов, только разве лишь внутри коллекции этих всяких предприятий.

:0)
...
Рейтинг: 0 / 0
14.08.2008, 16:21
    #35488048
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ограничения циклов
Может можно воспользоваться програмно опцией в меню: Data/Subtotals...
...
Рейтинг: 0 / 0
15.08.2008, 07:32
    #35488793
Nomad87
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ограничения циклов
эх, VladConn, я бы с удовольствием сделал то, что вы говорите просто есть две вещи которых у меня нет,
1 - времени
2 - знаний по тому как это делать через sql или find или ещё как нибудь...
хотя главное канеш - время в понедельник все должно работать .. вот так :(
так что буду выкручиваться с тем что есть ....хм
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ограничения циклов / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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