Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Срочный вопрос! / 6 сообщений из 6, страница 1 из 1
16.07.2010, 15:33
    #36745394
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.
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.
dt = InputBox("Введите дату в формате дд.мм.гггг", "Ввод даты", Format(Date, "dd.mm.yyyy"))

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

Sql = " select"
Sql = Sql & " c.msisdn, s.navi_date, ss.def, s.end_date"
Sql = Sql & " from subs_packs s, client_balance c, serv_histories sh, serv_statuses ss"
Sql = Sql & " where s.pack_pack_id in (789,855)"
Sql = Sql & " and s.navi_date > to_date('" & dt & "', 'dd.mm.yyyy')"
Sql = Sql & " and s.navi_user = 'SYS'"
Sql = Sql & " and sh.srst_srst_id = ss.srst_id"
Sql = Sql & " and s.subs_subs_id = c.subs_subs_id"
Sql = Sql & " and sh.subs_subs_id = c.subs_subs_id"
Sql = Sql & " and sh.srls_srls_id = " 1020 "
Sql = Sql & " and sh.end_date > sysdate"
Sql = Sql & " order by s.end_date"

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

Dim i As Long

For i = 3 To ActiveSheet.Rows.Count

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

Range(Cells( 3 ,  2 ), Cells(i,  5 )).Select
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlMedium
    End With
    With Selection
        .HorizontalAlignment = xlGeneral
        .VerticalAlignment = xlCenter
        .ReadingOrder = xlContext
    End With
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .ReadingOrder = xlContext
    End With

Cells(i,  2 ).CopyFromRecordset rsgs_gprs

rsgs_gprs.Close

Exit For
End If
Next i
Так вот он вытаскивает множество строк. Все нормально, только вот выделение Range(Cells(3, 2), Cells(i, 5)).Select выделяет только одну первую строку. Хотя там стоит до (i, 5). Почему не выделяются остальные строки? И еще не подскажите как можно делать очищение сторок перед следующим запуском?
...
Рейтинг: 0 / 0
16.07.2010, 15:46
    #36745426
fortik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочный вопрос!
если i=3 то выделяет 1 строку (проверьте значение i)
range().СlearСontents- очищает данные
...
Рейтинг: 0 / 0
16.07.2010, 15:53
    #36745453
fortik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочный вопрос!
hum_i,
Sql = Sql & " and sh.srls_srls_id = "1020"
тут мало кавычек
Sql = Sql & " and sh.srls_srls_id = ""1020"""
...
Рейтинг: 0 / 0
20.07.2010, 08:17
    #36749475
hum_i
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочный вопрос!
Да вы правы. i=3, и поэтому выделяется только первая строка. Подскажите пожалуйста как тогда организовать это в цикле, чтобы выделялись все строки?
...
Рейтинг: 0 / 0
20.07.2010, 09:29
    #36749533
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочный вопрос!
hum_i,

если отвечать на Ваш вопрос то:
все сразу это
Код: plaintext
rows("10:15").select
пошагово
Код: plaintext
rows(i & ":" & i).select
аналогичный Вашему вариант (с учетом ширины строки, иными словами диапазон), но пошагово
Код: plaintext
Range(Cells(i,  2 ), Cells(i,  5 )).Select
а вообще у Вас код верный, просто вы цикл по пустому листу организовываете "автопробег".
проблема в алгоритме. Вы сделайте так от начала рекордсета до конца проделывайте одну и ту же функцию

примерно так
Код: 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.
dt = InputBox("Введите дату в формате дд.мм.гггг", "Ввод даты", Format(Date, "dd.mm.yyyy"))

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

Sql = " select"
..... и прочие строки Вашего SQL запроса

rsgs_gprs.Open Sql, con
Sheets( 1 ).Select

k= 3   ' стартовая строка
Do While Not rsgs_gprs.EOF  'цикл по рекордсету до его завершения
    For I =  0  To rsgs_gprs.Fields.Count  'считаем количество элементов на маркере
         Cells(k, i+ 2 )= rsgs_gprs.Fields(I) ' заносим в ячейку все филды маркера (иными словами 
                                                       'значения строки рекордсета)
    Next I

Range (Cells(k,  2 ), Cells(k, rsgs_gprs.Fields.Count)).Select  '  выделяем то, что вывели
'.... а тут вставляете свое красивое выделение из кучи строк, я бы на Вашем месте создал процедуру 
'куда это все вынес, и тут бы написал что то типа call OFORMLENIYE  

k=k+ 1  ' смещаем строку вывода значение вниз
rsgs_gprs.MoveNext ' смещаем маркер вниз по рекордсету на одну строку
Loop

' тут код закрытия и т.п.
...
Рейтинг: 0 / 0
20.07.2010, 09:40
    #36749541
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Срочный вопрос!
забыл таки добавить

ваш код заработает если перенести строку
Код: plaintext
Cells(i,  2 ).CopyFromRecordset rsgs_gprs
сразу после
Код: plaintext
Dim i As Long
только исправьте её на
Код: plaintext
Cells( 3 ,  2 ).CopyFromRecordset rsgs_gprs
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Срочный вопрос! / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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