Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] MS Access 2010-Выгрузка данных Excel (http://forum.oszone.net/showthread.php?t=288700)

AlexeyMakarov 30-09-2014 14:20 2408832

MS Access 2010-Выгрузка данных Excel
 
Вложений: 1
Добрый день.
Пытаюсь разобраться с вопросом выгрузки данных в Excel при помощи VBA. Используя метод - Метод ADODB recordset.
Примеры брал тут:
-http://zmey.1977.ru/Access_To_Excel_Ru.htm#a1
-http://info-comp.ru/obucheniest/299--access-export-v-word-excel.html
В референсах подключено: Снимок.PNG
Плучаю ошибку: Variable not defined
Ругается на значении: Rowss
Нашел советы типа:
- Уберите в самом верху кода обязательную декларацию переменных
-Укажите переменную
Я использую образцы и они без указания переменных гамают, подскажите пожалуйста в чем я не догоняю.
Выкладываю на файлообменник пример БД:
читать дальше »
http://rghost.ru/58278886

*Листинг
читать дальше »
'Объявляем переменные
Dim XL As Object
Dim XLT As Object
Dim newrow As Object
Dim rsd As ADODB.Recordset
Dim ZMN As String

Set rsd = New ADODB.Recordset
'Запрос к базе данных
ZMN = "select * from tbl_1"
rsd.Open ZMN, CurrentProject.Connection
'Создаем необходимые объекты
Set XL = CreateObject("Excel.Application")
'для примера показываю, как можно сразу загружать шаблон без выбора
Set XLT = XL.Workbooks.Open("D:\ЗБК\Книга999.xlsx")
'2 способ если строк в источнике несколько
'причем мы учтем то, что у нас есть шапка и примечание в Excel
'и мы не знаем, сколько строк у нас вставиться
'и поэтому строки будем добавлять в случае необходимости
'зададим, с какой строки будем начинать вставлять данные
Rowss = 10
'для нумерации
numrow = 1
'запускаем цикл до тех пор, пока не закончатся строки в нашем источнике
While Not (rsd.EOF)
'смотрим, если строк больше чем мы задали в шаблоне
If Rowss >= 12 Then
'то добавляем строку
XLT.Worksheets("Лист1").Rows(Rowss).Insert
'Запомним нашу строку
Set newrow = XLT.Worksheets("Лист1").Rows(Rowss)
'и вставим туда копию предыдущей строки
'для того если вдруг у вас там есть объединенные ячейки или какие-то нужные данные
'так как новая строка создастся без всяких объединений и значений
XLT.Worksheets("Лист1").Rows(Rowss - 1).Copy newrow
'это просто для примера как можно очистить некий диапазон внутри документа
'XLT.Worksheets("Лист1").Range("A10:F10").ClearContents
'динамически формируем адрес нужной ячейки
с = "a" & Rowss
'и задаем ей значение
XLT.Worksheets("Лист1").Range(cell) = numrow
cell = "b" & Rowss
XLT.Worksheets("Лист1").Range(cell) = rsd.Fields("field5").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("field5").Value
Rowss = Rowss + 1
rsd.MoveNext
End If
'для нумерации
numrow = numrow + 1
'конец цикла
Wend

End Sub

*Примеры брал тут:
читать дальше »
-http://zmey.1977.ru/Access_To_Excel_Ru.htm#a1
-http://info-comp.ru/obucheniest/299--access-export-v-word-excel.html

AlexeyMakarov 20-02-2015 06:49 2473701

Вложений: 1
Давно разобрался с задачкой, чтобы закрыть тему выложу решение в архиве. Вот ряд требований, для решений:
1- Установите себе уже Notepad++, код в данном редакторе отображается намного лучше, там ещё синтаксис VBA есть, включил и все видно, качайте с офф. сайта, там и русская версия есть (кому надо).

2-Подключите нужные библиотеки, выше я писал какие (Снимок.PNG)

*-Чтобы вы не мучились с кодом, я прилагаю экспорт кода VBA со своей формы+саму базу данных+шаблонФайл 122480

3-Либо вы импортируете в свою форму мой код и смотрите как работает, лучше правьте мой код, там по сути останется указать ссылку на шаблон, исправить с какой строки начинать вносить данные в шаблон, указать какие столбцы необходимо экспортировать в Эксель. Для облегчения задачи, я вставлял экспорт в столбцы не последовательно, в комментариях я тоже это отразил.

4 Следующим этапом я бы предложил оформить свой код в виде функции и вызывать его из формы. Пример приложен только когда исполняющий код находится в форме.


Время: 10:05.

Время: 10:05.
© OSzone.net 2001-