Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2012, 03:42   #1
vlkr
Пользователь
 
Регистрация: 07.06.2012
Сообщений: 41
По умолчанию с ACCESS в EXCEL

Доброго дня всем!

Я с Access формирую отчет в Excel

Логика моя такая: при первом входе в функцию создаю книгу в Excel с листом "Test". Имя книги будет по умолчанию как правило "Книга __". В последствии в эту книгу будут добавляться данные и листы.

В этом коде моя идея:

Код:
Private Sub Test()
…………………………
Do While Not rst.EOF

с = rst.AbsolutePosition
Function_xl(c)

Loop

End Sub

Function_xl(c)

If c  = 0 then 

Set xl = CreateObject("Excel.Application")

   	xl.SheetsInNewWorkbook = 1
   	xl.Application.Workbooks.Add
   	xl.ActiveSheet.Name = "Test"

'	здесь я делаю то что мне нужно
else
'	Вот здесь я не знаю как указать что книга уже созданная и открытая,  и я буду вносить данные в эту книгу. 

End if

End Function

Всем спасибо.
vlkr вне форума Ответить с цитированием
Старый 01.08.2012, 06:06   #2
Андрэич
Форумчанин
 
Аватар для Андрэич
 
Регистрация: 20.05.2012
Сообщений: 311
По умолчанию

Цитата:
Сообщение от vlkr Посмотреть сообщение
Доброго дня всем!

Я с Access формирую отчет в Excel

Логика моя такая: при первом входе в функцию создаю книгу в Excel с листом "Test". Имя книги будет по умолчанию как правило "Книга __". В последствии в эту книгу будут добавляться данные и листы.

В этом коде моя идея:

Код:
Private Sub Test()
…………………………
Do While Not rst.EOF

с = rst.AbsolutePosition
Function_xl(c)

Loop

End Sub

Function_xl(c)

If c  = 0 then 

Set xl = CreateObject("Excel.Application")

   	xl.SheetsInNewWorkbook = 1
   	xl.Application.Workbooks.Add
   	xl.ActiveSheet.Name = "Test"

'	здесь я делаю то что мне нужно
else
'	Вот здесь я не знаю как указать что книга уже созданная и открытая,  и я буду вносить данные в эту книгу. 

End if

End Function

Всем спасибо.
Например, обрабатывать ошибку...

У вас будет создаваться отдельный лист для каждой записи рекордсета?
Андрэич вне форума Ответить с цитированием
Старый 01.08.2012, 06:12   #3
Андрэич
Форумчанин
 
Аватар для Андрэич
 
Регистрация: 20.05.2012
Сообщений: 311
По умолчанию

Разобрался.
Зачем эти сложности с рекордсетом? Формируйте в Аксессе запрос и просто экспортируйте его каждый раз в Эксель.
Данные должны храниться в базе данных, а не вне её
Андрэич вне форума Ответить с цитированием
Старый 01.08.2012, 14:42   #4
vlkr
Пользователь
 
Регистрация: 07.06.2012
Сообщений: 41
По умолчанию

Спасибо за ответ.

Я плохо объяснил свою проблему.
Попробую уточнить задачу.

Я создаю таблицу1 в которой находятся параметры для выборки которые будут применятся к таблице2 и последующего формирование отчета.
С Таблицы1 я беру переменные и создаю SQL запрос. На основании этой строки я формирую отчет потом я его вывожу в EXCEL и так я делаю для каждой строки (в цикле)

Пример
Таблицы1.
---------------------------------------------------------------------
Фамилия \ Дата \ Отдел \ Предприятие
Иванов \ 3.12.1980\ Отдел1\ Предприятие1
Петров \5.07.1985\ Отдел2\ Предприятие1
Сидоров \10.10.1979\ Отдел2\ Предприятие2

С этой таблицы я беру данные и формирую таблицу отчет.

1. В цикле рекордсетом я получаю значение поля и формирую строку запроса

по первой строке я формирую SQL запрос

Код:
stQuery1 = " SELECT * FROM T_General WHERE Фамилия = "Иванов" and   Дата = 3.12.1980 and Отдел = Отдел1 and  Предприятие = Предприятие1"
Полученную строку "stQuery1" я помещаю в запрос "Q_Union"

Код:
Set qryTest = dbsCurrent.QueryDefs("Q_Union")
qryTest.SQL = stQuery1
Теперь полученный результат который находится в запросе "Q_Union"я должен вывести в EXCEL.

Для первой строки "Иванов\ 3.12.1980\ Отдел1\ Предприятие1" я все могу сделать Открываю книгу и вношу туда данные с запроса ("Q_Union")
Теперь цикл переходит на вторую строку "Петров \5.07.1985\ Отдел2\ Предприятие1" формирует отчет данные запроса поменяются и соответственно "Q_Union" будет иметь другие значения и вот здесь я не знаю как показать мне что поместить результат в эту же книгу EXCEL а не создавать новую.
vlkr вне форума Ответить с цитированием
Старый 01.08.2012, 18:15   #5
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте vlkr.
если Вам необходимо передавать значения полей рекордсета разным ячейкам разных листов, конструкция может быть такой:
Код:
Private Sub Test()
Dim xt As Object, xs As Object, i&
'…………………………
On Error Resume Next

Set xl = CreateObject("Excel.Application")
If xl Is Nothing Then Exit Sub 'не создана сессия Excel
Set xt = xl.Workbooks.Add
If xt Is Nothing Then 'рабочая книга не создана
    xl.Quit 'закрыть Excel
    'здесь при необходимости закрываются объекты, освобождается память
    Exit Sub 'покинуть процедуру
End If
'xl.Visible = True 'отображение Excel разумнее включать после выполнения кода
Do Until rst.EOF
    i = i + 1
    If xt.Sheets.Count < i Then 'если кол-во листов меньше значения счётчика
        'добавить новый лист
        Set xs = xt.Sheets.Add(After:=xt.Sheets(i - 1))
    Else
        Set xs = xt.Sheets(i)
    End If
    xs.Name = "Test " + CStr(i)
    'способы передачи дагнных могут быть разными, например:
    xs.Range("b2") = rst(0)
    xs.[d4] = rst(1)
    xs.Cells(5, 6) = rst(2)
    '.....
    rst.MoveNext
Loop
xl.Visible = True
rst.Close
Set rst = Nothing

End Sub
при этом совершенно не требуется формировать SQL конструкцию и сохранять её в запросе
для дальнейшего использования в качестве источника рекордсета.

Успехов Вам.

Здравствуйте Андрэич.
не стоит заниматься бесполезным цитированием, это не помогает автору вопроса скорее наоборот.

Евгений.

Последний раз редактировалось Teslenko_EA; 01.08.2012 в 18:34.
Teslenko_EA вне форума Ответить с цитированием
Старый 04.08.2012, 18:17   #6
vlkr
Пользователь
 
Регистрация: 07.06.2012
Сообщений: 41
По умолчанию

Спасибо большое за советы.
vlkr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Импорт-экспорт данных Excel-Access, и из Access-Excel Людвиг Microsoft Office Access 3 27.10.2011 14:38
Из Excel в Access ARDL Microsoft Office Access 2 13.02.2011 21:29
access -> excel Chubbakka Microsoft Office Excel 2 28.12.2010 22:41
Excel To Access sputnick Фриланс 3 23.08.2010 23:04
Экспорт из Access в Excel, Экспорт из отчётов в таблицу Excel Kissedbythegod Microsoft Office Access 1 31.05.2008 22:15