Не работает цикл для вывода записей из Access в Excel - VBA
Формулировка задачи:
Здравствуйте! Создаю отчет в Excel на основе данных из Access.
Имеется форма, надо на её основе построить отчет в Excel.
Проблема с выводом подчиненной формы (снизу формы).
Сделал такой цикл, но он выводит только первую строку таблицы зданий (строка 301):В чем может быть ошибка? И, есть советы как сделать форматирование этой таблицы (границы)?
БД Access 2010:47 Маслов 5.rar
Public Sub AccountExcel() Dim RSset As ADODB.Recordset ' Набор данных Set RSset = New ADODB.Recordset ' Рабочие переменные. Их тип - Variant Dim I, RightAddress Dim SQLText, SQLText1 As String Dim oExcel As Object ' Создание объекта Set oExcel = CreateObject("Excel.Application") ' Локальные переменные Dim ClientAddress, ObjectAddress, nRow, ClientFIO ' Сделать окно Microsoft Excel видимым oExcel.Application.Visible = True oExcel.Application.CommandBars("Standard").Visible = False oExcel.Application.CommandBars("Formatting").Visible = False ' Размеры окна и его место на экране дисплея oExcel.Application.WindowState = xlMaximized ' Добавляем рабочую книгу oExcel.WorkBooks.Add ' При закрытии рабочей книги без сохранения ' ошибка формироваться не будет oExcel.DisplayAlerts = False ' Масштаб изображения 75% oExcel.ActiveWindow.Zoom = 75 ' Заголовок окна Excel oExcel.Caption = "Договор" ' Ориентация альбомная поля по 1.5 см Бумага A4 oExcel.ActiveSheet.PageSetup.LeftMargin = 42 oExcel.ActiveSheet.PageSetup.RightMargin = 42 oExcel.ActiveSheet.PageSetup.TopMargin = 42 oExcel.ActiveSheet.PageSetup.BottomMargin = 42 oExcel.ActiveSheet.PageSetup.Orientation = xlLandscape oExcel.ActiveSheet.PageSetup.PaperSize = xlPaperA4 ' Для всей Excel-таблицы oExcel.Cells.Font.Name = "Arial" oExcel.Cells.Font.Size = 8 ' Устанавливаем ширину колонок oExcel.Columns("A:A").ColumnWidth = 16 oExcel.Columns("B:B").ColumnWidth = 11 oExcel.Columns("C:C").ColumnWidth = 7 oExcel.Columns("D:D").ColumnWidth = 7 oExcel.Columns("E:E").ColumnWidth = 14 oExcel.Columns("F:F").ColumnWidth = 11 oExcel.Range("B1:D1").Select With oExcel.Selection .HorizontalAlignment = xlRight .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With oExcel.Selection.Merge oExcel.Range("B1:D1").Select oExcel.ActiveCell.FormulaR1C1 = "Договор охраны объекта №" oExcel.Range("E1").Select With oExcel.Selection .HorizontalAlignment = xlLeft .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With oExcel.ActiveCell.FormulaR1C1 = SelectTreatyID oExcel.Range("A3").Select oExcel.ActiveCell.FormulaR1C1 = "ФИО клиента:" ClientFIO = SelectClientSurname & " " & _ SelectClientName & " " & _ SelectClientPatronymic oExcel.Range("B3:E3").Select With oExcel.Selection .HorizontalAlignment = xlLeft .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With oExcel.Selection.Merge oExcel.ActiveCell.FormulaR1C1 = ClientFIO oExcel.Range("A4").Select With oExcel.Selection .HorizontalAlignment = xlLeft .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With oExcel.ActiveCell.FormulaR1C1 = "Телефон:" oExcel.Range("B4:E4").Select With oExcel.Selection .HorizontalAlignment = xlLeft .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With oExcel.Selection.Merge oExcel.ActiveCell.FormulaR1C1 = SelectClientPhone With RSset ' Задание свойств объекта RSset (Recordset) ' Источник: SQL-конструкция SQLText = "SELECT * FROM tblAddress " & _ " WHERE Address = " & SelectClientAddress .Source = SQLText ' Указатель на открытое соединение .ActiveConnection = CurrentProject.Connection .CursorType = adOpenKeyset ' Тип курсора .Open End With If RSset(3) = False Then ' Признак адреса стоит первым RightAddress = Trim(RSset(2)) & " " & _ Trim(RSset(1)) Else ' Признак адреса стоит вторым RightAddress = Trim(RSset(1)) & " " & _ Trim(RSset(2)) End If RSset.Close ' Закрытие набора данных oExcel.Range("A5").Select oExcel.ActiveCell.FormulaR1C1 = "Адрес клиента:" ClientAddress = "г. Хабаровск, " & _ RightAddress & ", дом " & _ str(SelectClientHouse) & ", кв. " & _ str(SelectClientFlat) & "." oExcel.Range("A3:A5").Select oExcel.Selection.Font.Bold = True With oExcel.Selection .HorizontalAlignment = xlLeft .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With oExcel.Range("B5:E5").Select With oExcel.Selection .HorizontalAlignment = xlLeft .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With oExcel.Selection.Merge oExcel.ActiveCell.FormulaR1C1 = ClientAddress oExcel.Range("A7").Select oExcel.Selection.Font.Bold = True oExcel.ActiveCell.FormulaR1C1 = "Дата начала договора:" oExcel.Range("B7").Select oExcel.ActiveCell.FormulaR1C1 = SelectDateStart oExcel.Range("C7:E7").Select With oExcel.Selection .HorizontalAlignment = xlLeft .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With oExcel.ActiveCell.FormulaR1C1 = "Дата окончания договора:" oExcel.Range("C7:E7").Select oExcel.Selection.Font.Bold = True oExcel.Range("F7").Select oExcel.ActiveCell.FormulaR1C1 = SelectStopDate oExcel.Range("B9:F9").Select With oExcel.Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With oExcel.Selection.Merge oExcel.ActiveCell.FormulaR1C1 = "Объекты охраны, прописанные в договоре:" oExcel.Range("A10").Select With oExcel.Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With oExcel.ActiveCell.FormulaR1C1 = "Объект №" oExcel.Range("B10:E10").Select With oExcel.Selection .HorizontalAlignment = xlLeft .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With oExcel.Selection.Merge oExcel.ActiveCell.FormulaR1C1 = "Адрес:" oExcel.Range("F10").Select oExcel.ActiveCell.FormulaR1C1 = "Дом" oExcel.Range("G10").Select oExcel.ActiveCell.FormulaR1C1 = "Кв." oExcel.Range("A10:G10").Select oExcel.Selection.Font.Bold = True With RSset ' Задание свойств объекта RSset (Recordset) ' Источник: SQL-конструкция SQLText = "SELECT tblTreatyDetail.TreatyID, tblTreatyDetail.ObjectID, " & _ " tblAddress.AddressName, tblAddress.AddressSign, tblAddress.AddressFirst, " & _ " tblObject.House, tblObject.Flat " & _ " FROM tblTreaty INNER JOIN ((tblAddress INNER JOIN tblObject " & _ " ON tblAddress.Address = tblObject.Address) INNER JOIN tblTreatyDetail " & _ " ON tblObject.ObjectID = tblTreatyDetail.ObjectID)" & _ " ON tblTreaty.TreatyID = tblTreatyDetail.TreatyID " & _ " WHERE tblTreatyDetail.TreatyID = " & SelectTreatyID & _ " AND tblTreatyDetail.ObjectID = " & SelectObjectID .Source = SQLText ' Указатель на открытое соединение .ActiveConnection = CurrentProject.Connection .CursorType = adOpenKeyset ' Тип курсора .Open End With If RSset(4) = False Then ' Признак адреса стоит первым RightAddress = Trim(RSset(3)) & " " & _ Trim(RSset(2)) Else ' Признак адреса стоит вторым RightAddress = Trim(RSset(2)) & " " & _ Trim(RSset(3)) End If For I = 0 To RSset.RecordCount - 1 RSset.Move I, adBookmarkFirst oExcel.Range("B" & I + 11 & ":E" & I + 11).Select With oExcel.Selection .HorizontalAlignment = xlLeft .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With oExcel.Selection.Merge With oExcel .Range("A" & I + 11).Select .ActiveCell.FormulaR1C1 = RSset.Fields(1).Value .Range("B" & I + 11 & ":E" & I + 11).Select .ActiveCell.FormulaR1C1 = RightAddress .Range("F" & I + 11).Select .ActiveCell.FormulaR1C1 = RSset.Fields(5).Value .Range("G" & I + 11).Select .ActiveCell.FormulaR1C1 = RSset.Fields(6).Value End With Next I ' Переход в начало отчета oExcel.Range("A1").Select ' Устанавливаем защиту рабочего листа и книги ' Пароль - текущее время oExcel.ActiveSheet.Protect ("' + Time() + '") oExcel.ActiveWorkbook.Protect ("' + Time() + '") RSset.Close Set RSset = Nothing End Sub
Решение задачи: «Не работает цикл для вывода записей из Access в Excel»
textual
Листинг программы
RSset.novelast RSset.movefirst For I = 0 To RSset.RecordCount - 1 ''''' действия RSset.movenext next i
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д