#windows #ms-access #vba #ms-access-2013
#Windows #ms-access #vba #ms-access-2013
Вопрос:
Что я хочу:
Я работаю с базой данных MS Access для подготовки отчета для совета по аккредитации профессионального инженерного университета Онтарио. У PEO есть свои шаблоны в MS Excel, и я ДОЛЖЕН использовать их точный формат.
Я хочу вывести данные из базы данных Access на лист Excel (достаточно просто), но я хочу скопировать их форматирование при создании нового файла. (Я НЕ хочу сохранять пустой файл шаблона и копировать его каждый раз).
Итак, по сути, я хочу каким-то образом сохранить шаблон в коде. (Другие предложения приветствуются!)
Что я пробовал:
Некоторые из вас прочитают это и подумают, что я идиот. Но я пытался получить данные из Excel в буфер обмена MS с помощью кода API и сохранить DataObject как (я надеялся) какую-то строку.
Но я не смог сохранить форматирование или затенение ячеек из исходного шаблона MS Excel.
Есть предложения?…
Комментарии:
1. Какую версию Access вы используете?
Ответ №1:
Вы могли бы сохранить шаблоны Excel в базе данных, создав таблицу, содержащую Attachment
поле
создание записи и сохранение шаблона Excel в качестве вложения к этой записи
а затем с помощью кода VBA, подобного этому, сохраняйте новую копию документа Excel на диск всякий раз, когда она вам понадобится:
Option Compare Database
Option Explicit
Public Sub SaveReportTemplateToFile()
Dim cdb As DAO.Database, rowRst As DAO.Recordset, attachRst As DAO.Recordset2, attachField As DAO.Field2
Set cdb = CurrentDb
Set rowRst = cdb.OpenRecordset("SELECT TemplateFile FROM ReportTemplates WHERE ID=1")
Set attachRst = rowRst.Fields("TemplateFile").Value
Set attachField = attachRst.Fields("FileData")
attachField.SaveToFile "C:UsersGordDesktop" amp; attachRst.Fields("FileName").Value
Set attachField = Nothing
attachRst.Close
Set attachRst = Nothing
rowRst.Close
Set rowRst = Nothing
Set cdb = Nothing
End Sub
Комментарии:
1. Это выглядит ФАНТАСТИЧЕСКИ! Итак, сохранение вложения в таблице означает, что в базе данных есть печатная копия? Значит, мне не нужно хранить файл .xls в базе данных Access?
2. @user3163380 Да, файл вложения сохраняется как объект в базе данных.
3. Спасибо, это отличный ответ на мою проблему! И спасибо за скриншоты, они были ЧРЕЗВЫЧАЙНО полезны
4. Горд, ты только что чертовски упростил мою жизнь! Спасибо
Ответ №2:
Что вам нужно будет сделать, это сначала экспортировать все данные на новый лист пустого шаблона, затем связать все данные с правильным местом в шаблоне, а затем удалить лист со всеми данными, сохранив данные в шаблоне.
Насколько я знаю, более быстрого способа сделать это нет, но вот пример:http://www.rogersaccesslibrary.com/forum/topic350.html
Это будет непростая работа, но выполнимая, если шаблон хорошо настроен.
Комментарии:
1. Спасибо за ваш ответ, но, как я уже упоминал; Я хочу как-то избежать хранения шаблона Excel все вместе. Я хотел бы программно воспроизвести формат шаблонов, чтобы при перемещении базы данных Access мне не нужно было привязывать ее к внешнему файлу Excel. (Также это позволит избежать копирования песни и танца на новый лист пустого шаблона, а затем ссылки на другой лист)
2. Почему бы не сохранить шаблон в базе данных Access ? Полное копирование шаблона с помощью кода кажется большой работой без очевидной выгоды.
3. @TimWilliams Да, я не знал, что вы можете это сделать. Я принял это как лучший ответ (от Gord T). Спасибо за предложение!