Закрыть файл pdf из vba
Объект File позволяет выполнять различные манипуляции с файлом, например, копировать или удалить файл, а также предоставляет доступ к информации о файле, например, можно получить размер файла или дату и время создания файла. Создать объект позволяет метод GetFile() объекта FileSystemObject . В параметре указывается путь к файлу. Путь может быть абсолютным или относительным. При указании относительного пути полный путь определяется с учетом местоположения текущего рабочего каталога и текущего диска. Пример создания объекта:
Чтение и запись файлов в кодировке UTF-16
Все строки, которые мы записывали ранее, сохранялись в файле в кодировке, принятой в системе по умолчанию. В моем случае в кодировке Windows-1251. Если необходимо записать данные в кодировке UTF-16 или прочитать данные, то можно воспользоваться функцией StrConv() (см. разд. 6.8) для преобразования кодировки. В качестве примера запишем данные в фай, а затем прочитаем и выведем их (листинг 12.3).
Листинг 12.2. Чтение и запись файлов в кодировке UTF-16
Обратите внимание на инструкцию
Комбинация символов с кодами 255 и 254 является меткой порядка байтов (сокращенно BOM (Byte Order Mark)). Эта метка является обязательной для кодировки UTF-16. При чтении данных мы пропускаем их и начинаем чтение с позиции 3 .
Открытие файла
Открыть файл позволяет метод OpenAsTextStream() объекта File , который возвращает ссылку на объект TextStream . Формат метода:
Необязательный параметр задает режим открытия файла:
- ForReading — чтение (значение по умолчанию). Указатель устанавливается на начало файла;
- ForWriting — запись. Содержимое файла удаляется. Указатель устанавливается на начало файла;
- ForAppending — добавление. Содержимое файла не удаляется. Указатель устанавливается на конец файла.
В необязательном параметре указываются следующие значения:
- TristateFalse — 0 — кодировка ASCII (значение по умолчанию);
- TristateTrue — -1 — кодировка Unicode;
- TristateUseDefault — -2 — кодировка, используемая в системе по умолчанию.
Пример открытия файла на запись:
Перемещение указателя внутри файла
Каждый открытый файл поддерживает указатель на текущую позицию в файле. Для перемещения и манипулирования позицией указателя внутри файла используются следующие функции и процедуры:
Запишем строку в файл в бинарном режиме, а затем переместим указатель в начало файла и считаем содержимое файла посимвольно в строку (листинг 12.1).
Листинг 12.1. Перемещение указателя внутри файла
Способ 5. Сохранение листов как отдельных PDF-файлов
- для этого используется уже другой метод (ExportAsFixedFormat а не Copy)
- листы выводятся в PDF с параметрами печати, настроенными на вкладке Разметка страницы (Page Layout)
- книга должна быть сохранена на момент экспорта
Нужный нам код будет выглядеть следующим образом:
Способ 1. Простое разделение
Нажмите сочетание Alt+F11 или выберите в меню Сервис - Макрос - Редактор Visual Basic (Tools - Macro - Visual Basic Editor) , вставьте новый модуль через меню Insert - Module и скопируйте туда текст этого макроса:
Если теперь выйти из редактора Visual Basic и вернуться в Excel, а затем запустить наш макрос (Alt+F8), то все листы из текущей книги будут разбиты по отдельным новым созданным книгам.
Открытие и закрытие файла
Прежде чем работать с файлом, необходимо создать объект файла с помощью инструкции Open . Инструкция имеет следующий формат:
В параметре указывается путь к файлу. Путь может быть абсолютным или относительным. При указании относительного пути путь определяется с учетом местоположения текущего рабочего каталога, возвращаемого функцией CurDir() , а также текущего диска (сменить текущий диск позволяет процедура ChDrive() ). Чтобы получить путь к папке, в которой находится файл с рабочей книгой, в Excel можно воспользоваться свойством Path объекта ThisWorkbook . Пример создания файла:
Параметр может принимать следующие значения:
- Input — чтение в последовательном режиме. Если файл не существует, то генерируется ошибка;
- Output — запись в последовательном режиме. Если файл не существует, то он будет создан. Если файл существует, то он будет перезаписан;
- Append — запись в последовательном режиме. Если файл не существует, то он будет создан. Запись осуществляется в конец файла. Содержимое файла не удаляется;
- Random — чтение и запись в произвольном режиме. Если файл не существует, то он будет создан. Содержимое файла не удаляется;
- Binary — чтение и запись в бинарном режиме. Если файл не существует, то он будет создан. Содержимое файла не удаляется.
Параметр задает тип операции с открываемым файлом. Допустимые значения:
- Read — только чтение;
- Write — только запись;
- Read Write — чтение и запись.
Необязательный параметр может принимать следующие значения:
- Shared — другой процесс может читать из файла и писать в файл;
- Lock Read — другой процесс не сможет читать из файла;
- Lock Write — другой процесс не сможет писать в файл;
- Lock Read Write — другой процесс не сможет читать из файла и писать в файл.
В необязательном параметре указывается целое число до 32 767 . При использовании произвольного режима значение задает длину записи, а при использовании последовательного режима — размер буфера. Значение игнорируется в бинарном режиме.
Для закрытия файла используется инструкция Close . Формат инструкции:
Инструкция закрывает файлы, дескрипторы которых перечислены через запятую. Если дескрипторы не указаны, то закрываются все открытые файлы. При завершении программы все открытые файлы автоматически закрываются.
Файлы могут быть открыты в трех режимах: последовательном, произвольном и бинарном. Рассмотрим эти режимы подробно.
Проверка существования файла
Проверить существование файла позволяет метод FileExists() объекта FileSystemObject . В параметре указывается путь к файлу. Метод возвращает значение True , если файл существует и False — в противном случае. Пример:
Чтение и запись в бинарном режиме
Бинарный режим применяется при указании значения Binary после ключевого слова For в инструкции Open . Длина записи в бинарном режиме является фиксированной и равна одному байту. Если указано значение в параметре , то это значение игнорируется.
Чтение и запись в бинарном режиме осуществляется точно также, как и при использовании произвольного режима. Прочитать данные из файла позволяет инструкция Get , а записать данные инструкция Put . В параметре в этих инструкциях указывается порядковый номер байта.
Пример записи строки в файл:
Пример чтения строки из файла:
В этом примере мы воспользовались функцией LOF() , которая позволяет получить длину файла в байтах. Чтобы считать данные из бинарного файла в строковую переменную необходимо в переменной создать строку такого же размера. В данном случае мы с помощью функции Space() создаем строку из такого же количества символов, что и размер файла. Обратите внимание на то, что использовать функцию EOF() в бинарном режиме нельзя, так как она всегда возвращает значение False .
Для чтения бинарного файла можно также воспользоваться следующими функциями:
Запишем строку в бинарный файл, а затем считаем ее с помощью функции Input() :
Манипулирование файлами
Для манипулирования файлами предназначены следующие методы объекта File :
- Move — позволяет переместить или переименовать файл:
Вместо метода Move() можно воспользоваться методом MoveFile() объекта FileSystemObject . Формат метода:
Пример переименования файла file1.txt в file3.txt :
Параметр может содержать подстановочные знаки в последнем компоненте пути. Например, переместить все текстовые файлы из каталога folder1 в каталог folder2 можно так:
- Copy [, ] — позволяет скопировать содержимое файла в другой файл. Если во втором параметре указано значение True (значение по умолчанию), то существующий файл будет перезаписан, а если значение False — то генерируется ошибка. Пример:
Вместо метода Copy() можно воспользоваться методом CopyFile() объекта FileSystemObject . Формат метода:
Пример создания копии файла file3.txt :
Параметр может содержать подстановочные знаки в последнем компоненте пути. Например, скопировать все текстовые файлы из каталога folder2 в каталог folder1 можно так:
- Delete [] — удаляет файл. Если в параметре указано значение True , то файл удаляется даже в случае, если он доступен только для чтения. По умолчанию параметр имеет значение False . Пример:
Вместо метода Delete() можно воспользоваться методом DeleteFile() объекта FileSystemObject . Формат метода:
Пример удаления файла file3.txt :
Чтение и запись файлов в кодировке UTF-8
Работа с файлами в кодировке UTF-8 выполняется сложнее. В этом случае необходимо воспользоваться функциями MultiByteToWideChar() и WideCharToMultiByte() , входящими в состав Win32 API. Чтобы это стало возможным, нужно в самом начале модуля вставить следующий код:
Теперь мы можем пользоваться этими функциями для чтения и записи файлов в кодировке UTF-8:
Статьи по Visual Basic for Applications (VBA)
Помощь сайту
Yandex-деньги: 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов
Способ 2. Разделение с сохранением
При необходимости, можно созданные книги сразу же сохранять под именами листов. Для этого макрос придется немного изменить, добавив команду сохранения в цикл:
Этот макрос сохраняет новые книги-листы в ту же папку, где лежал исходный файл. При необходимости сохранения в другое место, замените wb.Path на свой путь в кавычках, например "D:\Отчеты\2012" и т.п.
Если нужно сохранять файлы не в стандартном формате книги Excel (xlsx), а в других (xls, xlsm, xlsb, txt и т.д.), то кроме очевидного изменения расширения на нужное, потребуется добавить еще и уточнение формата файла - параметр FileFormat:
Для основных типов файлов значения параметра FileFormat следующие:
- XLSX = 51
- XLSM = 52
- XLSB = 50
- XLS = 56
- TXT = 42
Чтение и запись в произвольном режиме
Произвольный режим применяется при указании значения Random после ключевого слова For в инструкции Open . Длина записи в произвольном режиме является фиксированной и задается с помощью параметра (целое число до 32 767 ) в инструкции Open . При чтении и записи длина должна быть указана одинаковой. Запись в файл производится с помощью инструкции Put . Формат инструкции:
В параметре указывается номер файла, который использовался при открытии файла. В параметре задается номер позиции (нумерация начинается с 1 ) в которую производится запись. Если параметр не указан, то запись производится в следующую позицию после текущей позиции. Параметр задает записываемое значение. Если длина значения больше длины, указанной в параметре , то генерируется ошибка. Если производится запись строки произвольной длины, то значение в параметре должно быть на 2 байта больше фактической длины строки. Пример записи в файл:
Чтение файла производится с помощью инструкции Get . Формат инструкции:
В параметре указывается номер файла, который использовался при открытии файла. В параметре задается номер позиции (нумерация начинается с 1 ) из которой производится чтение. Если параметр не указан, то читаются данные из следующей позиции после текущей позиции. Пример:
Чтение и запись в последовательном режиме
Последовательный режим применяется при указании значений Input , Output и Append после ключевого слова For в инструкции Open . Запись в файл производится с помощью инструкции Write . Формат инструкции:
В параметре указывается номер файла, который использовался при открытии файла. В параметре задаются записываемые значения через запятую, точку с запятой или через пробел (эквивалентно указанию точки с запятой). Если точка с запятой указывается в конце инструкции Write , то следующее выводимое значение будет вставляться на одной строке с предыдущим выводом через запятую, а не на новой строке. Если параметр не указан, то вставляется пустая строка. Значения записываются в файл в следующих форматах:
Пример записи в файл:
Чтение из файла производится с помощью инструкции Input . Формат инструкции:
В параметре указывается номер файла, который использовался при открытии файла. Во втором параметре задается список переменных, в которых сохранятся считываемые значения. Например, считать данные, записанные в предыдущем примере, можно следующим образом:
Обратите внимание на четвертую инструкцию. Ранее мы записывали строку, в состав которой входит двойная кавычка. При считывании одна строка разбивается на две подстроки. В результате переменная v2 будет иметь значение "При" , а переменная v3 — значение "мер" .
Для записи в файл можно воспользоваться также инструкцией Print . Формат инструкции:
В параметре указывается номер файла, который использовался при открытии файла. В параметре задаются записываемые значения через запятую, точку с запятой или через пробел (эквивалентно указанию точки с запятой). Если указывается запятая, то следующее значение выводится в начале следующей зоны (по умолчанию начало зоны расположено в каждом 14-ом столбце), а если точка с запятой — то следующее значение выводится сразу после предыдущего:
Если точка с запятой указывается в конце инструкции Print , то следующее выводимое значение будет вставляться на одной строке с предыдущим выводом, а не на новой строке. Если параметр не указан, то вставляется пустая строка. Значения записываются в файл в следующих форматах:
- строки без двойных кавычек;
- вещественные числа с разделителем в виде запятой;
- дата и время в коротком формате;
- логические значения True и False в виде строк True и False соответственно;
- значение Null в виде строки Null .
Пример записи в файл:
Второй параметр может содержать следующие функции:
- Spc() — позволяет вставить указанное количество пробелов. Пример:
- Tab[()] — если функция указывается без параметра, то происходит переход в начало следующей зоны (эквивалентно вставке запятой между значениями):
Параметр задает номер столбца, с которого начинается вывод:
Прочитать файл, записанный с помощью инструкции Print , позволяет инструкция Line Input . Чтение производится построчно при каждом вызове инструкции. Формат инструкции:
Прочитаем две строки из записанного ранее файла:
Чтобы прочитать все строки из файла следует воспользоваться функцией EOF() . Функция возвращает значение True , если был достигнут конец файла, и False — в противном случае. Вывести все строки из файла позволяет следующий код:
Инструкция Width позволяет указать предпочитаемую ширину строки. Формат инструкции:
Параметр может содержать значения в диапазоне от 0 до 255 . Если указано значение 0 , то ширина не ограничена. Если длина строки больше указанного значения, то значение игнорируется и строка выводится полностью. Пример указания ширины, равной трем символам:
Способ 4. Сохранение только выделенных листов в новый файл
Во всех описанных выше способах каждый лист сохранялся в свой отдельный файл. Если же вы хотите сохранить в отдельный новый файл сразу группу выделенных предварительно листов, то нам потребуется слегка видоизменить наш макрос:
Семейство Files
Семейство Files содержит несколько объектов File . Доступ к объекту в коллекции выполняется с помощью метода Item() или с помощью цикла For Each. Next . Получить количество объектов в коллекции позволяет свойство Count .
С помощью свойства Files объекта Folder можно получить ссылку на коллекцию всех файлов в каталоге. В качестве примера выведем названия всех файлов в каталоге:
Статьи по Visual Basic for Applications (VBA)
Помощь сайту
Yandex-деньги: 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов
Про сборку листов из нескольких книг в одну текущую я уже писал здесь. Теперь разберем решение обратной задачи: есть одна книга Excel, которую нужно "разобрать", т.е. сохранить каждый лист как отдельный файл для дальнейшего использования.
Примеров подобного из реальной жизни можно привести массу. Например, файл-отчет с листами-филиалами нужно разделить на отдельные книги по листам, чтобы передать затем данные в каждый филиал и т.д.
Если делать эту процедуру вручную, то придется для каждого листа выполнить немаленькую цепочку действий (выбрать лист, правой кнопкой по ярлычку листа, выбрать Копировать, указать отдельный предварительно созданный пустой файл и т.д.) Гораздо проще использовать короткий макрос, автоматизирующий эти действия.
Открытие файла
Открыть файл позволяет метод OpenAsTextStream() объекта File , который возвращает ссылку на объект TextStream . Формат метода:
Необязательный параметр задает режим открытия файла:
- ForReading — чтение (значение по умолчанию). Указатель устанавливается на начало файла;
- ForWriting — запись. Содержимое файла удаляется. Указатель устанавливается на начало файла;
- ForAppending — добавление. Содержимое файла не удаляется. Указатель устанавливается на конец файла.
В необязательном параметре указываются следующие значения:
- TristateFalse — 0 — кодировка ASCII (значение по умолчанию);
- TristateTrue — -1 — кодировка Unicode;
- TristateUseDefault — -2 — кодировка, используемая в системе по умолчанию.
Пример открытия файла на запись:
Способ 6. Готовый макрос из надстройки PLEX
Если лень или нет времени внедрять все вышеописанное, то можно воспользоваться готовым макросом из моей надстройки PLEX:
Здравствуйте
Хотел создать макрос (автоматический) для сохранения копии файла в формате PDF
Но в автоматическом макросе прописывается явно имя файла и путь сохранения
Как заменить только расширение в имени файла, а путь и имя оставить те, которые есть?
Есть макрос для Excel на этом сайте. А нужен для Word (2010, если это имеет значение)
Здравствуйте
Хотел создать макрос (автоматический) для сохранения копии файла в формате PDF
Но в автоматическом макросе прописывается явно имя файла и путь сохранения
Как заменить только расширение в имени файла, а путь и имя оставить те, которые есть?
Есть макрос для Excel на этом сайте. А нужен для Word (2010, если это имеет значение)
Есть макрос для Excel на этом сайте. А нужен для Word (2010, если это имеет значение)
спасибо Автор - карандаш
Дата добавления - 07.07.2015 в 08:10
Sub SaveDocumentAsPDF()
Dim i&, f$
f = ThisDocument.FullName
i = InStrRev(f, ".")
If i Then f = Left$(f, i - 1)
ThisDocument.SaveAs f & ".pdf", wdFormatPDF
End Sub
Sub SaveDocumentAsPDF()
Dim i&, f$
f = ThisDocument.FullName
i = InStrRev(f, ".")
If i Then f = Left$(f, i - 1)
ThisDocument.SaveAs f & ".pdf", wdFormatPDF
End Sub
Sub SaveDocumentAsPDF()
Dim i&, f$
f = ThisDocument.FullName
i = InStrRev(f, ".")
If i Then f = Left$(f, i - 1)
ThisDocument.SaveAs f & ".pdf", wdFormatPDF
End Sub
Sub tt()
p_ = ThisDocument.Path
n0_ = ThisDocument.Name
n1_ = Left(n0_, Len(n0_) - 4 + (Left(Right(n0_, 5), 1) = "."))
ss = p_ & "\" & n1_
ThisDocument.ExportAsFixedFormat OutputFileName:=ss, ExportFormat:=wdExportFormatPDF
End Sub
Sub tt()
p_ = ThisDocument.Path
n0_ = ThisDocument.Name
n1_ = Left(n0_, Len(n0_) - 4 + (Left(Right(n0_, 5), 1) = "."))
ss = p_ & "\" & n1_
ThisDocument.ExportAsFixedFormat OutputFileName:=ss, ExportFormat:=wdExportFormatPDF
End Sub
Sub tt()
p_ = ThisDocument.Path
n0_ = ThisDocument.Name
n1_ = Left(n0_, Len(n0_) - 4 + (Left(Right(n0_, 5), 1) = "."))
ss = p_ & "\" & n1_
ThisDocument.ExportAsFixedFormat OutputFileName:=ss, ExportFormat:=wdExportFormatPDF
End Sub
первый вариант не сработал
заменил This на Active - не помогло
второй вариант сработал с Active (в оригинале не пробовал, т.к. макрос сидит в Normal.dot)
первый вариант не сработал
заменил This на Active - не помогло
второй вариант сработал с Active (в оригинале не пробовал, т.к. макрос сидит в Normal.dot)
второй вариант сработал с Active (в оригинале не пробовал, т.к. макрос сидит в Normal.dot)
спасибо, Александр Автор - карандаш
Дата добавления - 07.07.2015 в 13:28
однако, не работает в некоторых случаях
если в названии файла присутствуют точки, то при сохранении как pdf расширение отсутствует, хотя файл сохраняется как pdf (потом ему ручками пририсовываешь .pdf и всё нормально)
можно как-то эту беду устранить?
однако, не работает в некоторых случаях
если в названии файла присутствуют точки, то при сохранении как pdf расширение отсутствует, хотя файл сохраняется как pdf (потом ему ручками пририсовываешь .pdf и всё нормально)
можно как-то эту беду устранить?
если в названии файла присутствуют точки, то при сохранении как pdf расширение отсутствует, хотя файл сохраняется как pdf (потом ему ручками пририсовываешь .pdf и всё нормально)
можно как-то эту беду устранить?
спасибо Автор - карандаш
Дата добавления - 09.07.2015 в 11:06
Sub tt()
p_ = ThisDocument.Path
n0_ = ThisDocument.Name
n1_ = Left(n0_, Len(n0_) - 4 + (Left(Right(n0_, 5), 1) = ".")) & ".pdf"
ss = p_ & "\" & n1_
ThisDocument.ExportAsFixedFormat OutputFileName:=ss, ExportFormat:=wdExportFormatPDF
End Sub
Да, InStrRev луше
Sub tt()
p_ = ThisDocument.Path
n0_ = ThisDocument.Name
n1_ = Left(n0_, Len(n0_) - 4 + (Left(Right(n0_, 5), 1) = ".")) & ".pdf"
ss = p_ & "\" & n1_
ThisDocument.ExportAsFixedFormat OutputFileName:=ss, ExportFormat:=wdExportFormatPDF
End Sub
Да, InStrRev луше _Boroda_
Sub tt()
p_ = ThisDocument.Path
n0_ = ThisDocument.Name
n1_ = Left(n0_, Len(n0_) - 4 + (Left(Right(n0_, 5), 1) = ".")) & ".pdf"
ss = p_ & "\" & n1_
ThisDocument.ExportAsFixedFormat OutputFileName:=ss, ExportFormat:=wdExportFormatPDF
End Sub
Да, InStrRev луше Автор - _Boroda_
Дата добавления - 09.07.2015 в 11:14
можно закрыть из ворда файл pdf, открытый для просмотра Акробатом?
или придётся ручками закрывать?
а если ручками, то можно не вылетать в отладчик макросов при ошибке?
p.s. где-то в ворде снял какую-то галочку и теперь при сохранении в pdf файл не открывается в Акробате, а просто рисует "прогресс" сохранения и всё. Приходится ручками открывать для контроля - не могу найти эту галочку. По-моему она была в диалоге - показывать ли сохранённый файл.
можно закрыть из ворда файл pdf, открытый для просмотра Акробатом?
или придётся ручками закрывать?
а если ручками, то можно не вылетать в отладчик макросов при ошибке?
p.s. где-то в ворде снял какую-то галочку и теперь при сохранении в pdf файл не открывается в Акробате, а просто рисует "прогресс" сохранения и всё. Приходится ручками открывать для контроля - не могу найти эту галочку. По-моему она была в диалоге - показывать ли сохранённый файл. карандаш
можно закрыть из ворда файл pdf, открытый для просмотра Акробатом?
или придётся ручками закрывать?
а если ручками, то можно не вылетать в отладчик макросов при ошибке?
p.s. где-то в ворде снял какую-то галочку и теперь при сохранении в pdf файл не открывается в Акробате, а просто рисует "прогресс" сохранения и всё. Приходится ручками открывать для контроля - не могу найти эту галочку. По-моему она была в диалоге - показывать ли сохранённый файл. Автор - карандаш
Дата добавления - 09.07.2015 в 11:37
У меня есть документ.pdf с Javascript, который мне нужно загрузить через пользовательскую форму Excel, но у меня возникла проблема с избыточным пустое.pdf-окном, которое я не могу описать в VBA, чтобы я мог закрыть его программным путем.
Для начала, файл.pdf, о котором идет речь, таков, что при нажатии на ссылку внутри документа будет выполняться следующая JS:
Как вы можете видеть, все это создает новый документ (который автоматически открывается в новом окне), сохраняет его в определенном месте с определенным именем и затем закрывает результирующее окно. Все это работает точно так, как предполагалось, когда я открываю документ.pdf с помощью Acrobat.
У меня возникает небольшая проблема, когда я загружаю этот.pdf через пользовательскую форму Excel, поскольку мне нужно сделать это как часть моего более крупного проекта. В этом случае основная функция JS по-прежнему выполняется так, как ожидалось (создает новый пустой.pdf и сохраняет его в нужном месте и с соответствующим именем).
Проблема возникает с последнего шага. Где открытые acrobat экземпляры этого файла закрывают все окно, соответствующее файлу "myDoc", в открывшейся версии Excel я могу закрыть файл только в более крупном окне.
Другими словами, разница в поведении myDoc.closeDoc(); выполните команду:
В acrobat эта команда выполняет так, как если бы пользователь нажал на большой красный X в главном окне управления окна, где открывается "myDoc".
В пользовательской форме excel одна и та же команда работает так, как если бы пользователь нажал, а не большой красный x в блоке управления, а только меньший черный x чуть ниже поля управления. То есть, он закрывает документ, оставляя окно открытым.
Это не было бы проблемой, если бы я мог как-то просто закрыть пустое окно с помощью VBA. к сожалению, я не знаю, как я должен ссылаться на это пустое окно.
Мой вопрос: как я могу обратиться к этому окну в Excel VBA, чтобы я мог закрыть его программным путем?
Само окно выглядит точно так же, как и окно adobe, но оно появляется на панели задач как открытое окно Excel. Диспетчер задач показывает "приложение" как для adobe acrobat, так и для excel, но также указывает, что процесс Adobe Acrobat не выполняется. приложение Adobe показано как принадлежащее процессу EXCEL.EXE.
VBA, похоже, не распознает пустое окно.pdf как любой объект Excel. Но я также, похоже, не могу просто закрыть все экземпляры Adobe Acrobat, потому что, строго говоря, нет процессов adobe acrobat.
Надеюсь, я просто пропустил простой синтаксис здесь, но, очевидно, я не уверен в этом. Может ли кто-нибудь указать мне в правильном направлении?
Очень часто нужно сохранить какие-либо данные. Для этого существует три способа: сохранение в файл, сохранение в базу данных и сохранение в реестр Windows. Первый способ используется при сохранении информации небольшого объема. Если объем велик, то лучше (и удобнее) воспользоваться базой данных. В реестр Windows обычно сохраняют какие-либо настройки приложения.
Получение информации о файле
Получить информацию о файле позволяют следующие свойства объекта File :
- Size — размер файла;
- Path — полный путь к файлу (например, D:\VBA\file1.txt );
- ShortPath — короткий путь к файлу;
- Drive — имя диска (например, D: );
- Name — имя файла без пути;
- ShortName — короткое имя файла;
- Type — тип файла;
- ParentFolder — ссылка на объект родительского каталога;
- DateCreated — дата и время создания файла;
- DateLastAccessed — дата и время последнего доступа к файлу;
- DateLastModified — дата и время последнего изменения файла;
- Attributes — позволяет определить какие атрибуты установлены для файла. Содержит сумму следующих значений:
- 0 — Normal — обычный файл (только чтение);
- 1 — ReadOnly — файл доступен только для чтения (чтение и запись);
- 2 — Hidden — скрытый файл (чтение и запись);
- 4 — System — системный файл (чтение и запись);
- 16 — Directory — путь указывает на каталог (только чтение);
- 32 — Archive — архивный файл (чтение и запись);
- 64 — Alias — имя файла является псевдонимом (только чтение);
- 128 — Compressed — сжатый файл (только чтение).
Проверить, установлен атрибут или нет, позволяет оператор And . Если атрибут установлен, то результатом операции будет ненулевое значение. Если этому свойству присвоить новое значение, то атрибуты файла (доступные для записи) будут изменены.
Пример получения и изменения атрибутов файла показан в листинге 13.1.
Листинг 13.1. Получение и изменение атрибутов файла
Способ 3. Сохранение в новые книги только выделенных листов
Если вы хотите раскидать по файлам не все листы в вашей книге, а только некоторые, то макрос придется немного изменить. Выделите нужные вам листы в книге, удерживая на клавиатуре клавишу Ctrl или Shift и запустите приведенный ниже макрос:
Создавать новое окно и копировать через него, а не напрямую, приходится потому, что Excel не умеет копировать группу листов, если среди них есть листы с умными таблицами. Копирование через новое окно позволяет такую проблему обойти.
Создание временных файлов
С помощью метода GetTempName() объекта FileSystemObject можно сгенерировать уникальное имя для временного файла. Обратите внимание на то, что метод не создает файл, а лишь возвращает уникальное имя в виде строки (например, "radDA657.tmp "). Пример:
Читайте также: