Private Sub Testexcel_Click()
' Проба нового экспорта
Dim XL As Object
Dim XLT As Object
Dim newrow As Object
Dim rsd As ADODB.Recordset
Dim strSQL As String
Set rsd = New ADODB.Recordset
Dim app As Excel.Application
Dim strDOT As String
'Dim MyTable As DAO.Recordset
'Dim i As Integer
'запрос к базе данных
'strSQL = "SELECT тРеестр.№_дог, тРеестр.Абонент, тРеестр.Street, тРеестр.N_dom," & _
' "тРеестр.Tk, тРеестр.Оплата, тРеестр.Долг, тРеестр.Дата_откл_план, тРеестр.Naimen, " & _
' "тРеестр.Otchet, тРеестр.№_графика, тРеестр.Тип_графика FROM тРеестр" & _
' "INNER JOIN tDataExport ON (tDataExport.TipGraf = тРеестр.Тип_графика)" & _
' "AND (тРеестр.Дата_добавления = tDataExport.DataExport)" & _
' "WHERE (((тРеестр.№_графика) Is Not Null) And ((тРеестр.Тип_графика) Is Not Null))" & _
' "ORDER BY тРеестр.№_дог, тРеестр.Street, тРеестр.N_dom, тРеестр.№_графика, тРеестр.Тип_графика;"
' Такая запись запроса выдаёт ошибку, поэтому ниже то же, но в одну строку
strSQL = "SELECT тРеестр.№_дог, тРеестр.Абонент, тРеестр.Street, тРеестр.N_dom, тРеестр.Tk, тРеестр.Оплата, тРеестр.Долг, тРеестр.Дата_откл_план, тРеестр.Naimen, тРеестр.Otchet, тРеестр.№_графика, тРеестр.Тип_графика FROM тРеестр INNER JOIN tDataExport ON (tDataExport.TipGraf = тРеестр.Тип_графика) AND (тРеестр.Дата_добавления = tDataExport.DataExport)WHERE (((тРеестр.№_графика) Is Not Null) And ((тРеестр.Тип_графика) Is Not Null))ORDER BY тРеестр.№_дог, тРеестр.Street, тРеестр.N_dom, тРеестр.№_графика, тРеестр.Тип_графика;"
rsd.Open strSQL, CurrentProject.Connection
'Set app = New Excel.Application
'app.Visible = True
strDOT = CurrentProject.Path & "\" & "Отчет по графику ограничения теплоснабжения.xlt"
'app.Workbooks.Add strDOT
'для примера показываю, как можно сразу загружать шаблон без выбора
'Set XLT = XL.Workbooks.open("C:\testfile.xls")
Set XLT = XLT.Workbooks.Open(strDOT)
Rowss = 16
numrow = 1
While Not (rsd.EOF)
'смотрим, если строк больше чем мы задали в шаблоне
If Rowss >= 16 Then
'то добавляем строку
XLT.Worksheets("Лист1").Rows(Rowss).Insert
'Запомним нашу строку
Set newrow = XLT.Worksheets("Лист1").Rows(Rowss)
'и вставим туда копию предыдущей строки
'для того если вдруг у вас там есть объединенные ячейки или какие-то нужные данные
'так как новая строка создастся без всяких объединений и значений
XLT.Worksheets("Лист1").Rows(Rowss - 1).Copy newrow
'динамически формируем адрес нужной ячейки
cell = "a" & Rowss
'и задаем ей значение
XLT.Worksheets("Лист1").Range(cell) = numrow
cell = "b" & Rowss
XLT.Worksheets("Лист1").Range(cell) = rsd.Fields("Otchet").Value
'переходим на следующую строку
Rowss = Rowss + 1
'переходим на следующую строку в источнике данных
rsd.MoveNext
Else
'а это выполняется до тех пор, пока не закончатся заданные строки в шаблоне
'т.е. если строк в источнике всего 1 то в код, который выше мы даже не попадем
cell = "a" & Rowss
XLT.Worksheets("Лист1").Range(cell) = numrow
cell = "b" & Rowss
XLT.Worksheets("Лист1").Range(cell) = rsd.Fields("Otchet").Value
Rowss = Rowss + 1
rsd.MoveNext
End If
'для нумерации
numrow = numrow + 1
'конец цикла
Wend
'делаем Excel видимым
XL.Visible = True
'Очищаем переменные
Set XL = Nothing
Set XLT = Nothing
Set newrow = Nothing
End Sub
|