Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Срочный вопрос! / 16 сообщений из 16, страница 1 из 1
21.05.2010, 14:34
    #36641656
hum_i
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочный вопрос!
Добрый день! Подскажите пожалуйста вот есть такая функция ActiveSheet.Columns.Count т.е. до последнего столбца активной ячейки. А вот если мне нужно наоборот до последней строки, как это сделать?

Код: 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.
Dim w As Integer
Dim i As Integer
For i =  2  To ActiveSheet.Columns.Count
If Cells( 3 , i).Value = "" Then
         w = i
Range(Cells( 1 ,  2 ), Cells( 1 ,  2 )).Select
Selection.ClearContents
         
Range(Cells( 3 ,  2 ), Cells( 50 ,  10 )).Select
Selection.ClearContents

Cells( 1 , i).Value = "За период с " + dt_start + " по " + dt_end

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

Sql = " select"
Sql = Sql & " t.day,"
Sql = Sql & " t.count,"
Sql = Sql & " t.traffic_mb,"
Sql = Sql & " t.traffic_mb_packets,"
Sql = Sql & " t.traffic_mb_itogo,"
Sql = Sql & " t.vyruchka_usd,"
Sql = Sql & " t.vyruchka_usd_raz_to,"
Sql = Sql & " t.vyruchka_usd_period_to,"
Sql = Sql & " t.viruchka_usd_itogo"
Sql = Sql & " from general_statistic t"
Sql = Sql & " where t.day >= to_date('" & dt_start & "', 'dd.mm.yyyy')"
Sql = Sql & " and t.day < to_date('" & dt_end & "', 'dd.mm.yyyy')+1-1/86400"
Sql = Sql & " order by t.day"

rsgs_gprs.Open Sql, con
Sheets("Общая статистика GPRS").Select
Cells( 3 , i).CopyFromRecordset rsgs_gprs
rsgs_gprs.Close

Exit For
End If
Next i 
...
Рейтинг: 0 / 0
21.05.2010, 16:28
    #36642042
vlth
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочный вопрос!
hum_iActiveSheet.Columns.Count т.е. до последнего столбца активной ячейки
Не понимаю, как Вы это себе представляете - "до последнего столбца активной ячейки"?
ActiveSheet.Columns.Count - кол-во столбцов, содержащихся в активном листе (Application.Columns.Count вернёт то же значение).

Аналогичный подсчёт строк - ActiveSheet.Rows.Count
Только при чём здесь представленный код?
...
Рейтинг: 0 / 0
24.05.2010, 12:00
    #36644884
hum_i
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочный вопрос!
Я так и пробовала. Но при выполнении дает ошибку: Run-time error '6'; Overflow

Код: 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.
Dim w As Integer
Dim i As Integer
For i =  4  To ActiveSheet.Rows.Count
If Cells(i,  3 ).Value = "" Then
         w = i
Dim rsgs_gprs As ADODB.Recordset:         Set rsgs_gprs = New ADODB.Recordset
Set rsgs_gprs.ActiveConnection = con

Sql = " select"
Sql = Sql & " t.day,"
Sql = Sql & " t.count,"
Sql = Sql & " t.traffic_mb,"
Sql = Sql & " t.vyruchka_usd,"
Sql = Sql & " from general_statistiс t"
Sql = Sql & " where t.day >= to_date('" & dt_start & "', 'dd.mm.yyyy')"
Sql = Sql & " and t.day < to_date('" & dt_end & "', 'dd.mm.yyyy')+1-1/86400"
Sql = Sql & " order by t.day"

rsgs_gprs.Open Sql, con
Sheets("Общая статистика GPRS").Select
Cells(i,  3 ).Value = rsgs_gprs.Fields( 1 ).Value
rsgs_gprs.Close

Exit For
End If
Next i

Что означает эта ошибка?
...
Рейтинг: 0 / 0
24.05.2010, 12:26
    #36644954
nilem
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочный вопрос!
hum_i,

Dim i As Integer
For i = 4 To ActiveSheet.Rows.Count
Переменная объявлена как Integer (макс. знач-е 32 с чем-то тыс.), а строк на листе 65536, поэтому и ошибка. Объявите как Long.
...
Рейтинг: 0 / 0
24.05.2010, 13:04
    #36645071
hum_i
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочный вопрос!
Спасибо. Только вот у меня еще вопрос такой, какой бы я период не задавала, он вытаскивает только одну первую строку, почему?
...
Рейтинг: 0 / 0
24.05.2010, 13:15
    #36645102
nilem
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочный вопрос!
hum_i,

В соответствии с кодом, как мне кажется:
если Cells(i, 3) пустая, то ...
If Cells(i, 3).Value = "" Then
...........
... присваиваем ей какое-то значение ...
Cells(i, 3).Value = rsgs_gprs.Fields(1).Value
... и сразу выходим из цикла
Exit For
Т.е. получаем одну строку.
...
Рейтинг: 0 / 0
24.05.2010, 14:26
    #36645293
hum_i
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочный вопрос!
ну так сначала я одну строку вытаскиваю в цикле
Код: 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 i As Long
For i =  3  To ActiveSheet.Rows.Count
If Cells(i,  2 ).Value = "" Then
       
Range(Cells( 1 ,  2 ), Cells( 1 ,  2 )).Select
Selection.ClearContents
         
Range(Cells( 3 ,  2 ), Cells(i,  10 )).Select
Selection.ClearContents

Cells( 1 ,  2 ).Value = "За период с " + dt_start + " по " + dt_end

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

Sql = " select"
Sql = Sql & " t.day,"
Sql = Sql & " t.count_unikalnie,"
Sql = Sql & " t.traffic_mb_1,"
Sql = Sql & " t.traffic_mb_2,"
Sql = Sql & " t.traffic_mb_packets,"
Sql = Sql & " t.traffic_mb_itogo,"
Sql = Sql & " t.vyruchka_usd_1,"
Sql = Sql & " t.vyruchka_usd_2,"
Sql = Sql & " t.vyruchka_usd_raz_to,"
Sql = Sql & " t.vyruchka_usd_period_to,"
Sql = Sql & " t.viruchka_usd_itogo"
Sql = Sql & " from general_statistic t"
Sql = Sql & " where t.day >= to_date('" & dt_start & "', 'dd.mm.yyyy')"
Sql = Sql & " and t.day < to_date('" & dt_end & "', 'dd.mm.yyyy')+1-1/86400"
Sql = Sql & " order by t.day"

rsgs_gprs.Open Sql, con
Sheets("Общая статистика GPRS").Select
Cells(i,  2 ).Value = rsgs_gprs.Fields( 0 ).Value
Cells(i,  3 ).Value = rsgs_gprs.Fields( 1 ).Value
Cells(i,  4 ).Value = rsgs_gprs.Fields( 2 ).Value
Cells(i,  5 ).Value = rsgs_gprs.Fields( 3 ).Value
Cells(i,  6 ).Value = rsgs_gprs.Fields( 4 ).Value
Cells(i,  7 ).Value = rsgs_gprs.Fields( 5 ).Value
Cells(i,  8 ).Value = rsgs_gprs.Fields( 6 ).Value
Cells(i,  9 ).Value = rsgs_gprs.Fields( 7 ).Value
Cells(i,  10 ).Value = rsgs_gprs.Fields( 8 ).Value
Cells(i,  11 ).Value = rsgs_gprs.Fields( 9 ).Value
Cells(i,  12 ).Value = rsgs_gprs.Fields( 10 ).Value
rsgs_gprs.Close

Exit For
End If
Next i
End Sub

вытаскиваю сначала первую строку, потом Next i должна же следующая вытаскиваться
...
Рейтинг: 0 / 0
24.05.2010, 14:43
    #36645332
vlth
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочный вопрос!
hum_i,
Вы в цикле каждый раз создаёте новую выборку и заносите из неё на лист первую строку.

(Посмотрите выше: в этом варианте Вы убрали Cells(3, i).CopyFromRecordset rsgs_gprs)
...
Рейтинг: 0 / 0
24.05.2010, 14:50
    #36645347
vlth
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочный вопрос!
Чтобы переносить содержимое выборки на лист в цикле, по одной записи, нужно этот цикл организовать:
Код: plaintext
1.
2.
3.
Do Until rsgs_gprs.EOF
   '...
  rsgs_gprs.MoveNext
Loop
...
Рейтинг: 0 / 0
24.05.2010, 14:55
    #36645360
vlth
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочный вопрос!
vlthhum_i,
Вы в цикле каждый раз создаёте новую выборку и заносите из неё на лист первую строку.
Виноват, не заметил Exit For.
Значит, после извлечения на лист первой записи, выполнение цикла прерывается.
Но это сути не меняет: вторую запись Вы не получите, даже убрав Exit For.
...
Рейтинг: 0 / 0
27.05.2010, 14:49
    #36653070
hum_i
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочный вопрос!
Я поняла с for не получится правильно организовать цикл, чтобы он вытаскивал строку за строкой. Вот я попробовала
Код: plaintext
1.
2.
3.
Do Until rsgs_gprs.EOF
   '...
  rsgs_gprs.MoveNext
Loop

Код: 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.
Dim i As Long
i =  3 
Do Until rsgs_gprs.EOF
  
If Cells(i,  2 ).Value = "" Then
        
Cells( 1 ,  2 ).Value = "За период с " + dt_start + " по " + dt_end

Sql = " select"
Sql = Sql & " t.day,"
Sql = Sql & " t.count_unikalnie,"
Sql = Sql & " t.traffic_mb_1,"
Sql = Sql & " t.traffic_mb_2,"
Sql = Sql & " t.traffic_mb_packets,"
Sql = Sql & " t.traffic_mb_itogo,"
Sql = Sql & " t.vyruchka_usd_1,"
Sql = Sql & " t.vyruchka_usd_2,"
Sql = Sql & " t.vyruchka_usd_raz_to,"
Sql = Sql & " t.vyruchka_usd_period_to,"
Sql = Sql & " t.viruchka_usd_itogo"
Sql = Sql & " from general_statistiс"
Sql = Sql & " where t.day >= to_date('" & dt_start & "', 'dd.mm.yyyy')"
Sql = Sql & " and t.day < to_date('" & dt_end & "', 'dd.mm.yyyy')+1"
Sql = Sql & " order by t.day"

rsgs_gprs.Open Sql, con
Sheets("Общая статистика GPRS").Select
Cells(i,  2 ).Value = rsgs_gprs.Fields( 0 ).Value
Cells(i,  3 ).Value = rsgs_gprs.Fields( 1 ).Value
Cells(i,  4 ).Value = rsgs_gprs.Fields( 2 ).Value
Cells(i,  5 ).Value = rsgs_gprs.Fields( 3 ).Value
Cells(i,  6 ).Value = rsgs_gprs.Fields( 4 ).Value
Cells(i,  7 ).Value = rsgs_gprs.Fields( 5 ).Value
Cells(i,  8 ).Value = rsgs_gprs.Fields( 6 ).Value
Cells(i,  9 ).Value = rsgs_gprs.Fields( 7 ).Value
Cells(i,  10 ).Value = rsgs_gprs.Fields( 8 ).Value
Cells(i,  11 ).Value = rsgs_gprs.Fields( 9 ).Value
Cells(i,  12 ).Value = rsgs_gprs.Fields( 10 ).Value

rsgs_gprs.MoveNext
Loop

rsgs_gprs.Close

Ну что то не получается, ошибку дает: loop without Do. Подскажите как правильно, пожалуйста?
...
Рейтинг: 0 / 0
27.05.2010, 15:05
    #36653140
vlth
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочный вопрос!
hum_i,

Ошибка возникает из-за этой строки:
Код: plaintext
1.
If Cells(i,  2 ).Value = "" Then
...
Рейтинг: 0 / 0
27.05.2010, 15:06
    #36653144
vlth
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочный вопрос!
Точнее, из-за отсутствия
Код: plaintext
End If
...
Рейтинг: 0 / 0
27.05.2010, 15:09
    #36653161
hum_i
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочный вопрос!
А теперь дает ошибку Операция не допускается, если объект закрыт. И ссылается на этот объект
Код: plaintext
Do Until rsgs_gprs.EOF
...
Рейтинг: 0 / 0
27.05.2010, 15:12
    #36653170
vlth
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочный вопрос!
hum_i, строку
Код: plaintext
1.
Cells( 1 ,  2 ).Value = "За период с " + dt_start + " по " + dt_end
, наверное, нужно вынести из цикла?
...
Рейтинг: 0 / 0
27.05.2010, 15:16
    #36653184
vlth
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочный вопрос!
hum_iА теперь дает ошибку Операция не допускается, если объект закрыт. И ссылается на этот объект
Код: plaintext
Do Until rsgs_gprs.EOF

А Вы рекордсет вообще открыли? Как делали это раньше?
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Срочный вопрос! / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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