Не работает цикл для вывода записей из Access в Excel - VBA

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Создаю отчет в Excel на основе данных из Access. Имеется форма, надо на её основе построить отчет в Excel. Проблема с выводом подчиненной формы (снизу формы). Сделал такой цикл, но он выводит только первую строку таблицы зданий (строка 301):
Листинг программы
  1. Public Sub AccountExcel()
  2. Dim RSset As ADODB.Recordset ' Набор данных
  3. Set RSset = New ADODB.Recordset
  4. ' Рабочие переменные. Их тип - Variant
  5. Dim I, RightAddress
  6. Dim SQLText, SQLText1 As String
  7. Dim oExcel As Object
  8. ' Создание объекта
  9. Set oExcel = CreateObject("Excel.Application")
  10. ' Локальные переменные
  11. Dim ClientAddress, ObjectAddress, nRow, ClientFIO
  12. ' Сделать окно Microsoft Excel видимым
  13. oExcel.Application.Visible = True
  14. oExcel.Application.CommandBars("Standard").Visible = False
  15. oExcel.Application.CommandBars("Formatting").Visible = False
  16. ' Размеры окна и его место на экране дисплея
  17. oExcel.Application.WindowState = xlMaximized
  18. ' Добавляем рабочую книгу
  19. oExcel.WorkBooks.Add
  20. ' При закрытии рабочей книги без сохранения
  21. ' ошибка формироваться не будет
  22. oExcel.DisplayAlerts = False
  23. ' Масштаб изображения 75%
  24. oExcel.ActiveWindow.Zoom = 75
  25. ' Заголовок окна Excel
  26. oExcel.Caption = "Договор"
  27. ' Ориентация альбомная поля по 1.5 см Бумага A4
  28. oExcel.ActiveSheet.PageSetup.LeftMargin = 42
  29. oExcel.ActiveSheet.PageSetup.RightMargin = 42
  30. oExcel.ActiveSheet.PageSetup.TopMargin = 42
  31. oExcel.ActiveSheet.PageSetup.BottomMargin = 42
  32. oExcel.ActiveSheet.PageSetup.Orientation = xlLandscape
  33. oExcel.ActiveSheet.PageSetup.PaperSize = xlPaperA4
  34. ' Для всей Excel-таблицы
  35. oExcel.Cells.Font.Name = "Arial"
  36. oExcel.Cells.Font.Size = 8
  37. ' Устанавливаем ширину колонок
  38. oExcel.Columns("A:A").ColumnWidth = 16
  39. oExcel.Columns("B:B").ColumnWidth = 11
  40. oExcel.Columns("C:C").ColumnWidth = 7
  41. oExcel.Columns("D:D").ColumnWidth = 7
  42. oExcel.Columns("E:E").ColumnWidth = 14
  43. oExcel.Columns("F:F").ColumnWidth = 11
  44. oExcel.Range("B1:D1").Select
  45. With oExcel.Selection
  46. .HorizontalAlignment = xlRight
  47. .VerticalAlignment = xlBottom
  48. .WrapText = False
  49. .Orientation = 0
  50. .AddIndent = False
  51. .IndentLevel = 0
  52. .ShrinkToFit = False
  53. .ReadingOrder = xlContext
  54. .MergeCells = False
  55. End With
  56. oExcel.Selection.Merge
  57. oExcel.Range("B1:D1").Select
  58. oExcel.ActiveCell.FormulaR1C1 = "Договор охраны объекта №"
  59. oExcel.Range("E1").Select
  60. With oExcel.Selection
  61. .HorizontalAlignment = xlLeft
  62. .VerticalAlignment = xlBottom
  63. .WrapText = False
  64. .Orientation = 0
  65. .AddIndent = False
  66. .IndentLevel = 0
  67. .ShrinkToFit = False
  68. .ReadingOrder = xlContext
  69. .MergeCells = False
  70. End With
  71. oExcel.ActiveCell.FormulaR1C1 = SelectTreatyID
  72. oExcel.Range("A3").Select
  73. oExcel.ActiveCell.FormulaR1C1 = "ФИО клиента:"
  74. ClientFIO = SelectClientSurname & " " & _
  75. SelectClientName & " " & _
  76. SelectClientPatronymic
  77. oExcel.Range("B3:E3").Select
  78. With oExcel.Selection
  79. .HorizontalAlignment = xlLeft
  80. .VerticalAlignment = xlBottom
  81. .WrapText = False
  82. .Orientation = 0
  83. .AddIndent = False
  84. .IndentLevel = 0
  85. .ShrinkToFit = False
  86. .ReadingOrder = xlContext
  87. .MergeCells = False
  88. End With
  89. oExcel.Selection.Merge
  90. oExcel.ActiveCell.FormulaR1C1 = ClientFIO
  91. oExcel.Range("A4").Select
  92. With oExcel.Selection
  93. .HorizontalAlignment = xlLeft
  94. .VerticalAlignment = xlBottom
  95. .WrapText = False
  96. .Orientation = 0
  97. .AddIndent = False
  98. .IndentLevel = 0
  99. .ShrinkToFit = False
  100. .ReadingOrder = xlContext
  101. .MergeCells = False
  102. End With
  103. oExcel.ActiveCell.FormulaR1C1 = "Телефон:"
  104. oExcel.Range("B4:E4").Select
  105. With oExcel.Selection
  106. .HorizontalAlignment = xlLeft
  107. .VerticalAlignment = xlBottom
  108. .WrapText = False
  109. .Orientation = 0
  110. .AddIndent = False
  111. .IndentLevel = 0
  112. .ShrinkToFit = False
  113. .ReadingOrder = xlContext
  114. .MergeCells = False
  115. End With
  116. oExcel.Selection.Merge
  117. oExcel.ActiveCell.FormulaR1C1 = SelectClientPhone
  118.  
  119. With RSset
  120. ' Задание свойств объекта RSset (Recordset)
  121. ' Источник: SQL-конструкция
  122. SQLText = "SELECT * FROM tblAddress " & _
  123. " WHERE Address = " & SelectClientAddress
  124. .Source = SQLText
  125. ' Указатель на открытое соединение
  126. .ActiveConnection = CurrentProject.Connection
  127. .CursorType = adOpenKeyset ' Тип курсора
  128. .Open
  129. End With
  130. If RSset(3) = False Then
  131. ' Признак адреса стоит первым
  132. RightAddress = Trim(RSset(2)) & " " & _
  133. Trim(RSset(1))
  134. Else
  135. ' Признак адреса стоит вторым
  136. RightAddress = Trim(RSset(1)) & " " & _
  137. Trim(RSset(2))
  138. End If
  139. RSset.Close ' Закрытие набора данных
  140. oExcel.Range("A5").Select
  141. oExcel.ActiveCell.FormulaR1C1 = "Адрес клиента:"
  142. ClientAddress = "г. Хабаровск, " & _
  143. RightAddress & ", дом " & _
  144. str(SelectClientHouse) & ", кв. " & _
  145. str(SelectClientFlat) & "."
  146. oExcel.Range("A3:A5").Select
  147. oExcel.Selection.Font.Bold = True
  148. With oExcel.Selection
  149. .HorizontalAlignment = xlLeft
  150. .VerticalAlignment = xlBottom
  151. .WrapText = False
  152. .Orientation = 0
  153. .AddIndent = False
  154. .IndentLevel = 0
  155. .ShrinkToFit = False
  156. .ReadingOrder = xlContext
  157. .MergeCells = False
  158. End With
  159. oExcel.Range("B5:E5").Select
  160. With oExcel.Selection
  161. .HorizontalAlignment = xlLeft
  162. .VerticalAlignment = xlBottom
  163. .WrapText = False
  164. .Orientation = 0
  165. .AddIndent = False
  166. .IndentLevel = 0
  167. .ShrinkToFit = False
  168. .ReadingOrder = xlContext
  169. .MergeCells = False
  170. End With
  171. oExcel.Selection.Merge
  172. oExcel.ActiveCell.FormulaR1C1 = ClientAddress
  173. oExcel.Range("A7").Select
  174. oExcel.Selection.Font.Bold = True
  175. oExcel.ActiveCell.FormulaR1C1 = "Дата начала договора:"
  176. oExcel.Range("B7").Select
  177. oExcel.ActiveCell.FormulaR1C1 = SelectDateStart
  178. oExcel.Range("C7:E7").Select
  179. With oExcel.Selection
  180. .HorizontalAlignment = xlLeft
  181. .VerticalAlignment = xlBottom
  182. .WrapText = False
  183. .Orientation = 0
  184. .AddIndent = False
  185. .IndentLevel = 0
  186. .ShrinkToFit = False
  187. .ReadingOrder = xlContext
  188. .MergeCells = False
  189. End With
  190.  
  191. oExcel.ActiveCell.FormulaR1C1 = "Дата окончания договора:"
  192. oExcel.Range("C7:E7").Select
  193. oExcel.Selection.Font.Bold = True
  194. oExcel.Range("F7").Select
  195. oExcel.ActiveCell.FormulaR1C1 = SelectStopDate
  196. oExcel.Range("B9:F9").Select
  197. With oExcel.Selection
  198. .HorizontalAlignment = xlCenter
  199. .VerticalAlignment = xlBottom
  200. .WrapText = False
  201. .Orientation = 0
  202. .AddIndent = False
  203. .IndentLevel = 0
  204. .ShrinkToFit = False
  205. .ReadingOrder = xlContext
  206. .MergeCells = False
  207. End With
  208. oExcel.Selection.Merge
  209. oExcel.ActiveCell.FormulaR1C1 = "Объекты охраны, прописанные в договоре:"
  210. oExcel.Range("A10").Select
  211. With oExcel.Selection
  212. .HorizontalAlignment = xlCenter
  213. .VerticalAlignment = xlBottom
  214. .WrapText = False
  215. .Orientation = 0
  216. .AddIndent = False
  217. .IndentLevel = 0
  218. .ShrinkToFit = False
  219. .ReadingOrder = xlContext
  220. .MergeCells = False
  221. End With
  222. oExcel.ActiveCell.FormulaR1C1 = "Объект №"
  223. oExcel.Range("B10:E10").Select
  224. With oExcel.Selection
  225. .HorizontalAlignment = xlLeft
  226. .VerticalAlignment = xlBottom
  227. .WrapText = False
  228. .Orientation = 0
  229. .AddIndent = False
  230. .IndentLevel = 0
  231. .ShrinkToFit = False
  232. .ReadingOrder = xlContext
  233. .MergeCells = False
  234. End With
  235. oExcel.Selection.Merge
  236. oExcel.ActiveCell.FormulaR1C1 = "Адрес:"
  237. oExcel.Range("F10").Select
  238. oExcel.ActiveCell.FormulaR1C1 = "Дом"
  239. oExcel.Range("G10").Select
  240. oExcel.ActiveCell.FormulaR1C1 = "Кв."
  241. oExcel.Range("A10:G10").Select
  242. oExcel.Selection.Font.Bold = True
  243.  
  244. With RSset
  245. ' Задание свойств объекта RSset (Recordset)
  246. ' Источник: SQL-конструкция
  247. SQLText = "SELECT tblTreatyDetail.TreatyID, tblTreatyDetail.ObjectID, " & _
  248. " tblAddress.AddressName, tblAddress.AddressSign, tblAddress.AddressFirst, " & _
  249. " tblObject.House, tblObject.Flat " & _
  250. " FROM tblTreaty INNER JOIN ((tblAddress INNER JOIN tblObject " & _
  251. " ON tblAddress.Address = tblObject.Address) INNER JOIN tblTreatyDetail " & _
  252. " ON tblObject.ObjectID = tblTreatyDetail.ObjectID)" & _
  253. " ON tblTreaty.TreatyID = tblTreatyDetail.TreatyID " & _
  254. " WHERE tblTreatyDetail.TreatyID = " & SelectTreatyID & _
  255. " AND tblTreatyDetail.ObjectID = " & SelectObjectID
  256. .Source = SQLText
  257. ' Указатель на открытое соединение
  258. .ActiveConnection = CurrentProject.Connection
  259. .CursorType = adOpenKeyset ' Тип курсора
  260. .Open
  261. End With
  262. If RSset(4) = False Then
  263. ' Признак адреса стоит первым
  264. RightAddress = Trim(RSset(3)) & " " & _
  265. Trim(RSset(2))
  266. Else
  267. ' Признак адреса стоит вторым
  268. RightAddress = Trim(RSset(2)) & " " & _
  269. Trim(RSset(3))
  270. End If
  271. For I = 0 To RSset.RecordCount - 1
  272. RSset.Move I, adBookmarkFirst
  273. oExcel.Range("B" & I + 11 & ":E" & I + 11).Select
  274. With oExcel.Selection
  275. .HorizontalAlignment = xlLeft
  276. .VerticalAlignment = xlBottom
  277. .WrapText = False
  278. .Orientation = 0
  279. .AddIndent = False
  280. .IndentLevel = 0
  281. .ShrinkToFit = False
  282. .ReadingOrder = xlContext
  283. .MergeCells = False
  284. End With
  285. oExcel.Selection.Merge
  286. With oExcel
  287. .Range("A" & I + 11).Select
  288. .ActiveCell.FormulaR1C1 = RSset.Fields(1).Value
  289. .Range("B" & I + 11 & ":E" & I + 11).Select
  290. .ActiveCell.FormulaR1C1 = RightAddress
  291. .Range("F" & I + 11).Select
  292. .ActiveCell.FormulaR1C1 = RSset.Fields(5).Value
  293. .Range("G" & I + 11).Select
  294. .ActiveCell.FormulaR1C1 = RSset.Fields(6).Value
  295. End With
  296. Next I
  297.  
  298. ' Переход в начало отчета
  299. oExcel.Range("A1").Select
  300. ' Устанавливаем защиту рабочего листа и книги
  301. ' Пароль - текущее время
  302. oExcel.ActiveSheet.Protect ("' + Time() + '")
  303. oExcel.ActiveWorkbook.Protect ("' + Time() + '")
  304. RSset.Close
  305. Set RSset = Nothing
  306. End Sub
В чем может быть ошибка? И, есть советы как сделать форматирование этой таблицы (границы)? БД Access 2010:47 Маслов 5.rar

Решение задачи: «Не работает цикл для вывода записей из Access в Excel»

textual
Листинг программы
  1. RSset.novelast
  2. RSset.movefirst
  3. For I = 0 To RSset.RecordCount - 1
  4. ''''' действия
  5. RSset.movenext
  6. next i

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.3 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут