powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Вставка данных в шаблон Excel из рекордсета
8 сообщений из 8, страница 1 из 1
Вставка данных в шаблон Excel из рекордсета
    #34142195
AlexanderKR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите разрешить такую проблему.
Необходимо в определенное место в шаблоне Excel (xlt)
вставить данные из рекордсета.
Можно ли вставить данные из двух разных запросов (рекордсетов),
а не только из одного?

Код примерно такой:

''''''''''''''''

Private Sub Кнопка24_Click()

Dim cnnCur As ADODB.Connection
Dim rstDetails As ADODB.Recordset

Set xlApp = New Excel.Application
xlApp.Visible = True
strTemplPath = Trim([Forms]![Form1]![edit1]) & "obyem.xlt"

Set xlSheet1 = xlBook.Sheets("1(7)")
Set rstDetails = New ADODB.Recordset

strSQL = "SELECT ВН,СН1,СН2,НН FROM Величины_по_договору"

rstDetails.Open strSQL, cnnCur, adOpenStatic, adLockReadOnly


With xlSheet1
.Range("the_start7").CopyFromRecordset rstDetails
End With


rstDetails.Close
Set rstDetails = Nothing


cnnCur.Close
Set cnnCur = Nothing

Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing

End Sub

'''''''''''''''''''''''''''''''''''
Как в этот же самый шаблон вставить данные из
другого запроса
(напр. такого: strSQL1 = "SELECT spr_sch.TYPE, spr_sch.F_NUM FROM spr_sch")

Спасибо.
...
Рейтинг: 0 / 0
Вставка данных в шаблон Excel из рекордсета
    #34142267
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexanderKR
Set xlApp = New Excel.Application
xlApp.Visible = True
strTemplPath = Trim([Forms]![Form1]![edit1]) & "obyem.xlt"

Set xlSheet1 = xlBook.Sheets("1(7)")
Очень странный и вряд-ли работающий кусок кода. Уверен что ничего оттуда не вырезал?

AlexanderKR
With xlSheet1
.Range("the_start7").CopyFromRecordset rstDetails
End WithКакой смысл использовать with для одной строки?


AlexanderKR
Как в этот же самый шаблон вставить данные из
другого запроса
(напр. такого: strSQL1 = "SELECT spr_sch.TYPE, spr_sch.F_NUM FROM spr_sch")Абсолютно точно так же как из первого:
Код: plaintext
1.
2.
3.
rstDetails.Open strSQL, cnnCur, adOpenStatic, adLockReadOnly
xlSheet1.Range("the_start_FOR_SECOND_RECORDSET").CopyFromRecordset rstDetails
rstDetails.Close
Set rstDetails = Nothing
...
Рейтинг: 0 / 0
Вставка данных в шаблон Excel из рекордсета
    #34148359
AlexanderKR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все-же, я где-то допускаю ошибку.
Привожу код целиком.
Из двух разных запросов информация должна попадать
на разные листы шаблона в Excel`е.
Объект Connection создавать для каждого рекордсета, или можно использовать один?
В чем моя ошибка?

'''''''''''''''''''''''''''''''''''''''''''''''''''

Dim cnnCur As ADODB.Connection
Dim rstDetails As ADODB.Recordset
Dim rstShip As ADODB.Recordset
Dim strSQL As String
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim strTemplPath As String

Set xlApp = New Excel.Application
xlApp.Visible = True
strTemplPath = Trim([Forms]![Form1]![edit1]) & "obyem.xlt"
Set xlBook = xlApp.Workbooks.Add(strTemplPath)
Set xlSheet = xlBook.Sheets("1(6)")
Set xlSheet1 = xlBook.Sheets("1(7)")
Set xlSheet2 = xlBook.Sheets("2")
Set xlSheet3 = xlBook.Sheets("3")
Set xlSheet4 = xlBook.Sheets("4")
Set xlSheet5 = xlBook.Sheets("5")
Set cnnCur = CurrentProject.Connection
Set rstDetails = New ADODB.Recordset

strSQL = "SELECT ВН,СН1,СН2,НН FROM Величины_по_договору"

dog = DLookup("[договор]", "Величины_по_договору", "[договор]" <> "")
the_date_d = DLookup("[date_d]", "Величины_по_договору", "[date_d]" <> "")
the_pokupatel = DLookup("[фио]", "predp", "[договор] = Forms![form1]!dogovor ")
the_predp = DLookup("[потребитель]", "predp", "[договор] = Forms![form1]!dogovor ")

rstDetails.Open strSQL, cnnCur, adOpenStatic, adLockReadOnly

On Error Resume Next
With xlSheet
.Range("the_dogovor").Value = dog
.Range("the_date").Value = the_date_d
.Range("pokupatel").Value = the_pokupatel
End With

With xlSheet1
.Range("the_dogovor7").Value = dog
.Range("the_date_7").Value = the_date_d
.Range("the_man7").Value = the_pokupatel
.Range("the_start7").CopyFromRecordset rstDetails
End With

With xlSheet2
.Range("the_dogovor2").Value = dog
.Range("the_date21").Value = the_date_d
End With

With xlSheet3
.Range("the_dogovor3").Value = dog
.Range("the_date3").Value = the_date_d
End With

With xlSheet4
.Range("the_dogovor4").Value = dog
.Range("the_date4").Value = the_date_d
.Range("the_man4").Value = the_pokupatel

End With

rstDetails.Close
Set rstDetails = Nothing

' Второй запрос - рекордсет:

Set rstDetails1 = New ADODB.Recordset
rstDetails1.Open strSQL1, cnnCur1, adOpenStatic, adLockReadOnly
strSQL1 = "SELECT spr_sch.MESTO_UST, spr_sch.TYPE, spr_sch.F_NUM FROM spr_sch WHERE spr_sch.KOD = Forms![form1]!dogovor"

rstDetails1.Open strSQL1, cnnCur, adOpenStatic, adLockReadOnly

On Error Resume Next
With xlSheet4
.Range("naim_sch").CopyFromRecordset rstDetails1
End With

rstDetails1.Close
Set rstDetails1 = Nothing

cnnCur.Close
Set cnnCur = Nothing

Set xlBook = Nothing
Set xlApp = Nothing

End Sub
...
Рейтинг: 0 / 0
Вставка данных в шаблон Excel из рекордсета
    #34151953
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
rstDetails.Close
   'Set rstDetails = Nothing - зачем изничтожать, использовать повторно

' Второй запрос - рекордсет:
    
 'Set rstDetails1 = New ADODB.Recordset - не нужно
 'rstDetails1.Open strSQL1, cnnCur1, adOpenStatic, adLockReadOnly - это зачем?
strSQL = "SELECT spr_sch.MESTO_UST, spr_sch.TYPE, spr_sch.F_NUM FROM spr_sch WHERE spr_sch.KOD =" &  Forms![form1]!dogovor 
' исправлено -неверное формирование строки SQL и зачем делать еще переменную strSQL1

rstDetails.Open strSQL, cnnCur, adOpenStatic, adLockReadOnly
On Error Resume Next
With xlSheet4
.Range("naim_sch").CopyFromRecordset rstDetails1
End With

А поконкретнее, что не пашет?

Option Explicit в начале модуля лучше писать...
...
Рейтинг: 0 / 0
Вставка данных в шаблон Excel из рекордсета
    #34151954
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тьфу, предпоследняя строка, единичку не убрал
With xlSheet4
.Range("naim_sch").CopyFromRecordset rstDetails
End With
...
Рейтинг: 0 / 0
Вставка данных в шаблон Excel из рекордсета
    #34155364
AlexanderKR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Заменил запрос, использую один рекордсет,
но вставка в шаблон из второго запроса
не происходит, т.е.
открывается шаблон, вставляются по порядку все данные,
копируется и вставляется в шаблон результат первого запроса,
курсор останавливается на именованном диапазоне Range("naim_sch")
и - все. Т.е. не выполняется команда:

.Range("naim_sch").CopyFromRecordset rstDetails
...
Рейтинг: 0 / 0
Вставка данных в шаблон Excel из рекордсета
    #34155889
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как это - останавливается? Отключите On Error Resume Next
и скажите, что за ошибку пишет.
...
Рейтинг: 0 / 0
Вставка данных в шаблон Excel из рекордсета
    #34156015
AlexanderKR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за подсказку.
Оказалось, несоответствие типов данных.
Поле spr_sch.KOD в оригинале - текстовое,
преобразую его в числовое, и все работает:


strSQL1 = "SELECT spr_sch.MESTO_UST, spr_sch.TYPE, spr_sch.F_NUM FROM spr_sch WHERE Cint(spr_sch.KOD) = " & Forms![form1]!dogovor


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


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