Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Перенос данных в Excel с последующим форматированием
 
 автор: shaucha   (15.10.2008 в 20:14)   личное сообщение
 
 

Задача: регулярный перенос данных из Access (где происходит сбор и обработка данных) в Excel, где будет производиться окончательная обработка и работа с отобранными данными.
В итоговом файле Excel необходимо произвести форматирование по заданному шаблону (ширина колонок, условное форматирование и т.п.).
Цель всего этого цирка - упрощение работы аналитиков (они не должны тратить время на всё это форматирование - нажал на княпочку и получил файл с заданным именем, форматированием и т.п.).
Сам мой вопрос: ткните что посмотреть по этой теме. Оговорюсь - поискал на сайте, нашел кое-какие материалы, но мало что понял. Сам перенос данных (неформатированный) у меня получается. А вот как дальше... Самое главное - нужно сделать так, чтобы пользователь не был вынужден что-то дополнительно делать в Excel (например - запуск макросов, которые форматируют).
Надеюсь, что написал понятно и вы сможете мне помочь.
Заранее спасибо.

  Ответить  
 
 автор: osmor   (16.10.2008 в 08:47)   личное сообщение
 
 

Если нужно совершать какие-то операции в EXCEL из ACCESSО (или из какой-то другой программы) общая схема такова.
-Получаете объект Excel (см.Help CreateObject )
- используя методы и свойства объектов Excel выполняем нужные действия в т.ч. форматированиие. (см.Help по объектам Excel это в справке по Excel. Самый простой способ записать в Excel макрос который делает, то что нужно и затем перенести его код в ACСESS)

http://hiprog.com/index.php?option=com_content&task=view&id=268
http://hiprog.com/index.php?option=com_content&task=view&id=428
http://hiprog.com/index.php?option=com_content&task=view&id=20
http://hiprog.com/index.php?option=com_content&task=view&id=711

  Ответить  
 
 автор: shaucha   (16.10.2008 в 11:13)   личное сообщение
 
 

> Самый простой способ записать в Excel макрос который делает, то что нужно и затем перенести его код в ACСESS.

Так и поступил с самого начала. Только библиотеки не подключил и сокрушался, что не получается ничего. )
Спасибо большое.
Буду к вам часто теперь обращаться )

  Ответить  
 
 автор: shaucha   (16.10.2008 в 13:40)   личное сообщение
 
 

Дополнительный вопрос (еще один).

Я скопировал код макроса из Excel в Access.
Это получилась процедура Sub.
Вопрос: как ее запускать программно? Из формы?

  Ответить  
 
 автор: ДрЮня   (16.10.2008 в 08:48)   личное сообщение
 
 

доброго времени !
если использовать VBA, то в Вашем случае проще выводить данные в заранее подготовленный шаблон.
данные из полученного рекордсета можно выгружать в определенные строки / колонки, предварительно открыв подготовленный шаблон.

  Ответить  
 
 автор: shaucha   (16.10.2008 в 11:13)   личное сообщение
 
 

С шаблоном не совсем понятно (
Но я буду разбираться, может и такой вариант пригодится.

  Ответить  
 
 автор: shaucha   (16.10.2008 в 11:21)   личное сообщение
 
 

.Дополнительный вопрос


    DoCmd.OutputTo acTable, "РеестрПоставок_Поставки", "MicrosoftExcelBiff8(*.xls)", "", True, "", 0


Это я так експорт делаю в Excel.

Но как обрабатывать ошибки? Вот, например, когда я в диалоговом окне сохранения файла нажимаю Отмена (ну передумал я сохранять файл), то выдает ошибку... 2501 - Прервано выполнение макрокоманды Output To...
Как это обработаь или избавиться вообще ведь это странно, что тут такого ошибочного,то оно так реагирует?).

  Ответить  
 
 автор: FORMAT   (16.10.2008 в 11:35)   личное сообщение
 
 

Гляньте в сторону команды TransferSpreadSheet

  Ответить  
 
 автор: shaucha   (16.10.2008 в 11:45)   личное сообщение
 
 

Не совсем теперь подходит...
Изменились условия - пользователь должен иметь возможность самостоятельно задать путь и имя файла... в некоторых случаях.

  Ответить  
 
 автор: osmor   (16.10.2008 в 11:40)   личное сообщение
 
 

написать собработчик ошибок
on error goto ....

  Ответить  
 
 автор: shaucha   (16.10.2008 в 11:47)   личное сообщение
 
 

Ошибка может быть не только эта.
Еще выдает ошибку если открыт файл с именем, которое пытаемся присвоить.
Ну а еще что может быть, у меня даже предугадать не получается.
Как обрабатывать набор возможных ошибок?

  Ответить  
 
 автор: FORMAT   (16.10.2008 в 11:54)   личное сообщение
 
 

SELECT CASE Номер ошибки

CASE Номер ошибки
...............
CASE Другой Номер ошибки
...............
CASE ELSE

goto HELL ( - шутка. Не помню только чья то ли Сеппы, то ли Вьейры )

End SELECT

Ну в общем идея должна быть понятна

  Ответить  
 
 автор: shaucha   (16.10.2008 в 13:57)   личное сообщение
 
 

Мистика...
Я сделал все как Вы говорили...
Все работало...
Но одна ошибка не обрабатывалась. 2302, которая.
Я просто оставил обработку ошибок стандартную...
И теперь не указывается номер ошибки...
Что за ерунда?

  Ответить  
 
 автор: FORMAT   (16.10.2008 в 14:02)   личное сообщение
 
 

В стандартной обработке к msgbox Err_Discription Добавтьте & Err_Number

  Ответить  
 
 автор: shaucha   (16.10.2008 в 14:55)   личное сообщение
 
 

Я что-то не так делаю...
В итоге выдает просто пустой msgbox (
Если обработку ошибки убрать совсем - відает сообщение с номером и описанием ошибки.... (
Я идиот - убейте меня кто-нибудь....

  Ответить  
 
 автор: shaucha   (16.10.2008 в 15:43)   личное сообщение
 
 

вообще все перестало работать...

  Ответить  
 
 автор: Мюллер   (16.10.2008 в 18:22)   личное сообщение
 
 

Да оберните вы эту вставку в транзакцию и на error повесьте ролбэк этой транзакции. И всех делов - то . При возникновении любой ошибки произойдет откат и ничего сделано не будет.

  Ответить  
 
 автор: shaucha   (16.10.2008 в 18:39)   личное сообщение
 
 

Но мне нужно, чтобы пользователь понимал, что, например, данные не были выведены. А то будет лопатиьть старый файл, думая, что у него свежие данные. Так бывает. Честно )

Но проблема у меня расширилась. Перестал работать код, который я из Excel запихнул в модуль (та часть, что отвечает за форматирование).
Я сейчас позакрывал все и не могу точно сказать что там за ошибка, но сам факт меня удручает.

  Ответить  
 
 автор: Мюллер   (16.10.2008 в 18:43)   личное сообщение
 
 

А чо за код то? Можно глянуть?

  Ответить  
 
 автор: shaucha   (17.10.2008 в 12:08)   личное сообщение
 
 

Да я пока ничего уникального и сложного не делал. Просто записал макрос, который закрепляет области, применяет автофильтр по условию, выводит промежуточные результаты (сумма, например).
И потом вставил макрос в модуль в Access.
Все работало. И вдруг - перестало. )

  Ответить  
 
 автор: osmor   (17.10.2008 в 12:23)   личное сообщение
 
 

в Excel есть объекты которые подразумеваются
т.е. если в excel написать
cells(1,3) = 5
то в воответствующую ячейку запишется число "5"
т.к. Excel "подразумевает" что это относится к ячейке активного листа.
в ACCESS нужно указывать полный путь к объекту, т.к. ACcess ничего не "знает" о каких-то там листах.
Кроме того не рекомендуется использовать select, т.к. при выполнении кода этот select может измениться.

  Ответить  
 
 автор: FORMAT   (17.10.2008 в 13:54)   личное сообщение
 
 

+1
Именно это я и имел ввиду

  Ответить  
 
 автор: shaucha   (17.10.2008 в 14:52)   личное сообщение
 
 

ох...
и где прочитать про весь этот синтаксис?
и еще - почему первый раз работало, а потом перестало?
я ничего не менял в библиотеках...
странно это все )

  Ответить  
 
 автор: osmor   (17.10.2008 в 16:07)   личное сообщение
 
 

почитать в тех примерах что указал выше.
покажите код который не работает. и что говорит ?

  Ответить  
 
 автор: shaucha   (17.10.2008 в 16:10)   личное сообщение
 
 

толко в понедельник смогу найти базы. сейчас не на той машине (

  Ответить  
 
 автор: Lukas   (16.10.2008 в 11:42)   личное сообщение
 
 

Четвертый аргумент задает имя файла. Сначала задайте его в переменную, проверьте, затем используйте в выводе.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList