Страницы: 1
RSS
Из *.xls в *.pdf при помощи VBA
 
Здравствуйте уважаемые,  
 
Появилась необходимость создать большое количество pdf файлов (примерно 10-20) из xls файла, в который будет подставляться различная информация. Имя файла будет формироваться из содержимого трех ячеек.  
 
Провел весь день в поисках чего-нибудь дельного в интернете, все что мне удалось найти - это установить виртуальный принтер и посылать листы на печать, после чего вручную прописывать путь и имя файла и сохранять его. Этот метод, как он есть не годится, так как моих психических сил не хватит копировать и ваставлять и сохранять всю эту информацию вручную =)  
 
Уповаю на вашу помощь мастера!
 
И хотя вопрос не по экселю ...  
Ответ такой:  
Надо найти подходящий виртуальный принтер.  
Например, у меня стоит pdfFactory  
Я в нем нашел галку "Ду нот шоу диалог"  
Указал папку по умолчанию для сохранения.  
И все. Печатает, вопросов не задает. Имя файла берет как имя книги.  
Если нужно другое имя перед печатью сохраните документ с нужным именем командой SaveAs. Про то как взять имя файла из ячейки тут тыщу раз написали.
 
{quote}{login=Лузер™}{date=06.08.2008 07:38}{thema=}{post}И хотя вопрос не по экселю ...  
Ответ такой:  
Надо найти подходящий виртуальный принтер.  
Например, у меня стоит pdfFactory  
Я в нем нашел галку "Ду нот шоу диалог"  
Указал папку по умолчанию для сохранения.  
И все. Печатает, вопросов не задает. Имя файла берет как имя книги.  
Если нужно другое имя перед печатью сохраните документ с нужным именем командой SaveAs. Про то как взять имя файла из ячейки тут тыщу раз написали.{/post}{/quote}  
 
Спасибо за ответ. Проблема была именно в том, чтобы избежать этого самого диалогового окна и при этом указать верное имя и путь файла, а с остальным проблем нет. Попробую сегодня pdfFactory.
 
Все готово. Проблему решил через виртуальный принтер, только не при помощи pdfFactory, а при помощи PDFCreator'а, который бесплатный и функций в нем не меньше.
 
Попробовал PDFCreator. Обнаружил существенный недостаток. КОгда кодом пускаю на печать в пдф несколько листов из экселя то сохраняется последний только лист. Итого имею в файле пдф всегда последний лист. Не знаю как обойти данный момент... может дело в коде?    
 
If CheckBox1.Value = True Then  
Лист22.Range("D1:AN60").PrintOut Copies:=1, Collate:=True  
End If  
If CheckBox2.Value = True Then  
Лист23.Range("D1:AN60").PrintOut Copies:=1, Collate:=True  
End If  
 
Итд 18 листов.
 
для 2007 на офф сайте был дополенение чтобы сохранять файлы в PDF формате.
 
Есть. У меня 2010 офис. Все встроено. Но этот вариант не подходит, т.к. настроек недостаточно.
 
... или после распечатывания переименовывать PDF файл, например, как ИмяКниги-ИмяЛиста.PDF
 
{quote}{login=The_Prist}{date=28.07.2010 01:42}{thema=}{post} берет за основу его имя - то он распечатывает-то все, но вот с перезаписью имеющегося уже файла. Десять листов - 9 будут перезаписаны на место предыдущих. {/post}{/quote}  
 
Да, это совершенно точно из-за этого. Именно перезапись. Настраиваю на создание имени файла с привязкой к дате, получаю 9 файлов пдф с одним листом экселя. Никак не получить 1 файл с 9 листами в нем.  
 
Программу с автосохранением достойную так и не нашел.
 
{quote}{login=Казанский}{date=28.07.2010 01:47}{thema=}{post}... или после распечатывания переименовывать PDF файл, например, как ИмяКниги-ИмяЛиста.PDF{/post}{/quote}  
 
Можно, но хочется иметь 1 файл ПДФ, а не 100 штук для каждого листа экселя.
 
Как вариант, можно печатать на виртуальный принтер FinePrint ( http://fineprint.com/products/fineprint/index.html ), а уже оттуда в PDF, 1 файл.
 
Есть такая надстройка для 2007 офиса  
 
При ее использовании макрорекордер записал примерно следующее  
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _  
       "C:\Documents and Settings\xxxxx\xxxx\wbook.pdf", Quality:= _  
       xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _  
       OpenAfterPublish:=True  
 
Копайте дальше.
 
Спасибо. Сделал кодом. Смирился, что создает 18 файлов для каждого листа.
 
{quote}{login=Михаил}{date=02.08.2010 09:37}{thema=}{post}Спасибо. Сделал кодом. Смирился, что создает 18 файлов для каждого листа.{/post}{/quote}  
Михаил кажется что не все так безнадежно.  
1.создаем лист с нужным именем  
2.заполняем его нужными данными в нужном порядке  
3.форматируем как нам надо  
4.отправляем на печать (я использую duPDF v7)  
5.удаляем созданный лист
Спасибо
Страницы: 1
Читают тему
Наверх