|
|
|
| Задача: регулярный перенос данных из Access (где происходит сбор и обработка данных) в Excel, где будет производиться окончательная обработка и работа с отобранными данными.
В итоговом файле Excel необходимо произвести форматирование по заданному шаблону (ширина колонок, условное форматирование и т.п.).
Цель всего этого цирка - упрощение работы аналитиков (они не должны тратить время на всё это форматирование - нажал на княпочку и получил файл с заданным именем, форматированием и т.п.).
Сам мой вопрос: ткните что посмотреть по этой теме. Оговорюсь - поискал на сайте, нашел кое-какие материалы, но мало что понял. Сам перенос данных (неформатированный) у меня получается. А вот как дальше... Самое главное - нужно сделать так, чтобы пользователь не был вынужден что-то дополнительно делать в Excel (например - запуск макросов, которые форматируют).
Надеюсь, что написал понятно и вы сможете мне помочь.
Заранее спасибо. | |
|
| |
|
|
|
| Если нужно совершать какие-то операции в 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 | |
|
| |
|
|
|
| > Самый простой способ записать в Excel макрос который делает, то что нужно и затем перенести его код в ACСESS.
Так и поступил с самого начала. Только библиотеки не подключил и сокрушался, что не получается ничего. )
Спасибо большое.
Буду к вам часто теперь обращаться ) | |
|
| |
|
|
|
| Дополнительный вопрос (еще один).
Я скопировал код макроса из Excel в Access.
Это получилась процедура Sub.
Вопрос: как ее запускать программно? Из формы? | |
|
| |
|
|
|
| доброго времени !
если использовать VBA, то в Вашем случае проще выводить данные в заранее подготовленный шаблон.
данные из полученного рекордсета можно выгружать в определенные строки / колонки, предварительно открыв подготовленный шаблон. | |
|
| |
|
|
|
| С шаблоном не совсем понятно (
Но я буду разбираться, может и такой вариант пригодится. | |
|
| |
|
|
|
| .Дополнительный вопрос
DoCmd.OutputTo acTable, "РеестрПоставок_Поставки", "MicrosoftExcelBiff8(*.xls)", "", True, "", 0
|
Это я так експорт делаю в Excel.
Но как обрабатывать ошибки? Вот, например, когда я в диалоговом окне сохранения файла нажимаю Отмена (ну передумал я сохранять файл), то выдает ошибку... 2501 - Прервано выполнение макрокоманды Output To...
Как это обработаь или избавиться вообще ведь это странно, что тут такого ошибочного,то оно так реагирует?). | |
|
| |
|
|
|
| Гляньте в сторону команды TransferSpreadSheet | |
|
| |
|
|
|
| Не совсем теперь подходит...
Изменились условия - пользователь должен иметь возможность самостоятельно задать путь и имя файла... в некоторых случаях. | |
|
| |
|
|
|
| написать собработчик ошибок
on error goto .... | |
|
| |
|
|
|
| Ошибка может быть не только эта.
Еще выдает ошибку если открыт файл с именем, которое пытаемся присвоить.
Ну а еще что может быть, у меня даже предугадать не получается.
Как обрабатывать набор возможных ошибок? | |
|
| |
|
|
|
| SELECT CASE Номер ошибки
CASE Номер ошибки
...............
CASE Другой Номер ошибки
...............
CASE ELSE
goto HELL ( - шутка. Не помню только чья то ли Сеппы, то ли Вьейры )
End SELECT
Ну в общем идея должна быть понятна | |
|
| |
|
|
|
| Мистика...
Я сделал все как Вы говорили...
Все работало...
Но одна ошибка не обрабатывалась. 2302, которая.
Я просто оставил обработку ошибок стандартную...
И теперь не указывается номер ошибки...
Что за ерунда? | |
|
| |
|
|
|
| В стандартной обработке к msgbox Err_Discription Добавтьте & Err_Number | |
|
| |
|
|
|
| Я что-то не так делаю...
В итоге выдает просто пустой msgbox (
Если обработку ошибки убрать совсем - відает сообщение с номером и описанием ошибки.... (
Я идиот - убейте меня кто-нибудь.... | |
|
| |
|
|
|
| вообще все перестало работать... | |
|
| |
|
|
|
| Да оберните вы эту вставку в транзакцию и на error повесьте ролбэк этой транзакции. И всех делов - то . При возникновении любой ошибки произойдет откат и ничего сделано не будет. | |
|
| |
|
|
|
| Но мне нужно, чтобы пользователь понимал, что, например, данные не были выведены. А то будет лопатиьть старый файл, думая, что у него свежие данные. Так бывает. Честно )
Но проблема у меня расширилась. Перестал работать код, который я из Excel запихнул в модуль (та часть, что отвечает за форматирование).
Я сейчас позакрывал все и не могу точно сказать что там за ошибка, но сам факт меня удручает. | |
|
| |
|
|
|
| А чо за код то? Можно глянуть? | |
|
| |
|
|
|
| Да я пока ничего уникального и сложного не делал. Просто записал макрос, который закрепляет области, применяет автофильтр по условию, выводит промежуточные результаты (сумма, например).
И потом вставил макрос в модуль в Access.
Все работало. И вдруг - перестало. ) | |
|
| |
|
|
|
| в Excel есть объекты которые подразумеваются
т.е. если в excel написать
cells(1,3) = 5
то в воответствующую ячейку запишется число "5"
т.к. Excel "подразумевает" что это относится к ячейке активного листа.
в ACCESS нужно указывать полный путь к объекту, т.к. ACcess ничего не "знает" о каких-то там листах.
Кроме того не рекомендуется использовать select, т.к. при выполнении кода этот select может измениться. | |
|
| |
|
|
|
| +1
Именно это я и имел ввиду | |
|
| |
|
|
|
| ох...
и где прочитать про весь этот синтаксис?
и еще - почему первый раз работало, а потом перестало?
я ничего не менял в библиотеках...
странно это все ) | |
|
| |
|
|
|
| почитать в тех примерах что указал выше.
покажите код который не работает. и что говорит ? | |
|
| |
|
|
|
| толко в понедельник смогу найти базы. сейчас не на той машине ( | |
|
| |
|
|
|
| Четвертый аргумент задает имя файла. Сначала задайте его в переменную, проверьте, затем используйте в выводе. | |
|
| |