Может быть кто-нибудь знает решение для следующей задачи: Нужен макрос для преобразования файлов .xlsx в .pdf без открытия самого исходника. В файлах эксцель имеются ссылки (значения из других документов), значения в PDF должны быть актуальными
С помощью макрорекордера получилось только вот это, все работает, только приходится сначала открыть файл → SaveAs в ПДФ → закрыть файл
По идеи файлов для преобразования будет много и поэтому хочу упростить операции избавившись от открытия файлов.
[vba]
Код
Sub PDFSave() Dim vbname vbname = InputBox("Введите Имя файла в формате: " & Chr(10) & "месяц-(2 цифры), нижнее подчеркивание _ , " & Chr(10) & "год (4 цифры)", "Ввод", "ММ_ГГГГ")
If vbname = "" Or vbname = "ММ_ГГГГ" Then MsgBox "Введите имя!" Else
Может быть кто-нибудь знает решение для следующей задачи: Нужен макрос для преобразования файлов .xlsx в .pdf без открытия самого исходника. В файлах эксцель имеются ссылки (значения из других документов), значения в PDF должны быть актуальными
С помощью макрорекордера получилось только вот это, все работает, только приходится сначала открыть файл → SaveAs в ПДФ → закрыть файл
По идеи файлов для преобразования будет много и поэтому хочу упростить операции избавившись от открытия файлов.
[vba]
Код
Sub PDFSave() Dim vbname vbname = InputBox("Введите Имя файла в формате: " & Chr(10) & "месяц-(2 цифры), нижнее подчеркивание _ , " & Chr(10) & "год (4 цифры)", "Ввод", "ММ_ГГГГ")
If vbname = "" Or vbname = "ММ_ГГГГ" Then MsgBox "Введите имя!" Else
Чтобы что-то сохранить (конвертировать) - нужно это что-то всё равно сначала прочитать (открыть). Так что если Excel может сделать то, что вам необходимо - зачем же усложнять задачу использованием внешних компонент? Просто доработайте свой макрос: - Вместо InputBox используйте что-нибудь из диалоговых окон, позволяющих создать список файлов "для открытия", либо открывате файлы по некоему шаблону имени, либо ещё как (например, создайте листбокс с содержимым каталога и мультиотметками). Тогда вы разом получите список для обработки. - При открытии и сохранении управляйте видимостью окон и отображением изменений (всякие .Visible, .ScreenUpdating, . DisplayAlerts и т.п.), чтобы увеличить скорость обработки и подавить ненужные отображения. - Сохраняйте результат сначала локально, а затем уже копируйте его в удалённое хранилище. Возможно - все сформированные файлы разом. - При массовой обработке - продумайте реакцию на ошибки чтения, записи, копирования. Используйте .StatusBar или какой-нибудь прогрессбар для информирования пользователя - MsgBox останавливает выполнение, и должно использоваться только при критических ошибках либо окончании выполнения всего задания.
Чтобы что-то сохранить (конвертировать) - нужно это что-то всё равно сначала прочитать (открыть). Так что если Excel может сделать то, что вам необходимо - зачем же усложнять задачу использованием внешних компонент? Просто доработайте свой макрос: - Вместо InputBox используйте что-нибудь из диалоговых окон, позволяющих создать список файлов "для открытия", либо открывате файлы по некоему шаблону имени, либо ещё как (например, создайте листбокс с содержимым каталога и мультиотметками). Тогда вы разом получите список для обработки. - При открытии и сохранении управляйте видимостью окон и отображением изменений (всякие .Visible, .ScreenUpdating, . DisplayAlerts и т.п.), чтобы увеличить скорость обработки и подавить ненужные отображения. - Сохраняйте результат сначала локально, а затем уже копируйте его в удалённое хранилище. Возможно - все сформированные файлы разом. - При массовой обработке - продумайте реакцию на ошибки чтения, записи, копирования. Используйте .StatusBar или какой-нибудь прогрессбар для информирования пользователя - MsgBox останавливает выполнение, и должно использоваться только при критических ошибках либо окончании выполнения всего задания.AndreTM
AndreTM, Спасибо за идею, буду пробовать использовать всякие .Visible, .ScreenUpdating, . DisplayAlerts и т.п. может подскажете где можно найти инфу по этим опциям?
AndreTM, Спасибо за идею, буду пробовать использовать всякие .Visible, .ScreenUpdating, . DisplayAlerts и т.п. может подскажете где можно найти инфу по этим опциям?Валерьянка
Сообщение отредактировал Валерьянка - Понедельник, 10.02.2014, 10:47
Не советую использовать ActiveSheet - кто знает как там файл сохранён. Я бы делал так: Set wb = Workbooks.Open(filename, опции по требованию) или With Workbooks.Open(filename, опции по требованию) далее обращался к wb.sheets(имя или номер) или .sheets(имя или номер) сохраняел его в pdf, закрывал далее закрывал открытую ранее книгу.
Ну и screenupdating в любом случае должен помочь.
Не советую использовать ActiveSheet - кто знает как там файл сохранён. Я бы делал так: Set wb = Workbooks.Open(filename, опции по требованию) или With Workbooks.Open(filename, опции по требованию) далее обращался к wb.sheets(имя или номер) или .sheets(имя или номер) сохраняел его в pdf, закрывал далее закрывал открытую ранее книгу.
Ну и screenupdating в любом случае должен помочь.Hugo
Вообще то, если не ошибаюсь, при установленном Adobe Acrobat не Reader, в контекстном меню проводника Windows появляются пункты, что-то вроде конвертировать в PDF или преобразовать в PDF точно не помню как правильно называется, но знаю что точно есть. И также есть пакетное преобразование. И насколько я помню, файлы Excel в том числе подходят для этого преобразования(конвертирования) без их открытия и даже с возможностью выбора опций.
Вообще то, если не ошибаюсь, при установленном Adobe Acrobat не Reader, в контекстном меню проводника Windows появляются пункты, что-то вроде конвертировать в PDF или преобразовать в PDF точно не помню как правильно называется, но знаю что точно есть. И также есть пакетное преобразование. И насколько я помню, файлы Excel в том числе подходят для этого преобразования(конвертирования) без их открытия и даже с возможностью выбора опций.antal10