Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вопрос по макросу для печати из Word'a / 6 сообщений из 6, страница 1 из 1
23.06.2015, 12:48
    #38990570
asp1x
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по макросу для печати из Word'a
Доброго времени суток!

Ковыряю макрос для печати определенных листов во всех документах *doc, находящихся одной папке.

Есть такой макрос:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub ListDocNamesInFolder()
  Dim sMyDir As String
  Dim sDocName As String
  sMyDir = "C:\документы\"
  sDocName = Dir(sMyDir & "*.doc")
  While sDocName <> ""
    Application.PrintOut Range:=wdPrintRangeOfPages, Pages:="1-4", PrintZoomColumn:=2, PrintZoomRow:=1, FileName:=sMyDir & sDocName
    sDocName = Dir()
  Wend
End Sub



В папке находится несколько файлов (допустим 1,2 и 3). Макрос выводит файлы на печать именно в таком порядке. Изменение расположения файлов внутри самой папки (сортировка по возрастанию/убыванию) не помогает.

Вопрос: Возможно ли сделать макрос (или внести изменения в этот), чтобы печать всех файлов осуществлялась в обратном порядке? Т.е печать 3 -> 2 -> 1

Модератор: Учимся использовать тэги оформления кода - FAQ
...
Рейтинг: 0 / 0
23.06.2015, 12:56
    #38990581
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по макросу для печати из Word'a
Макрос отправляет на печать файлы в том порядке, в котором их имена физически лежат в директории (так работает используемая функция Dir()). Подавляющее большинство программ сортируют файлы самостоятельно и даже не предоставляют вам возможности увидеть этот исходный порядок.

То есть мелкая модификация макроса не поможет. Вам нужно прочитать всю папку (имена) в какой-то массив или словарь, отсортировать его так, как вам нужно и потом только отдельным циклом выводить на печать.
...
Рейтинг: 0 / 0
23.06.2015, 12:59
    #38990586
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по макросу для печати из Word'a
Или, если заранее известны имена файлов тупо записать их в массив в нужном порядке. И потом цикл по этому массиву.
...
Рейтинг: 0 / 0
23.06.2015, 15:25
    #38990747
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по макросу для печати из Word'a
asp1xВопрос: Возможно ли сделать макрос (или внести изменения в этот), чтобы печать всех файлов осуществлялась в обратном порядке? Т.е печать 3 -> 2 -> 1
Ответ положительный. Возможно.
В случае использования Dir() решение дано - сперва всё прочитать в массив/коллекцию, потом печатать в нужном порядке.
Но я бы рекомендовал получать список файлов через FileSystemObject - тогда коллекцию FSO.Files можно перебирать как массив в обратном порядке, не считывая предварительно весь список. Правда, при этом нужно гарантировать, что файлы не будут добавляться или удаляться в процессе работы скрипта.
...
Рейтинг: 0 / 0
23.06.2015, 15:42
    #38990769
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по макросу для печати из Word'a
Akina,

Плохой совет, ИМХО.
Сегодня порядок файлов один, завтра копирнул в другую папку - он уже другой. Не стоит создавать такой недетерминизм.
...
Рейтинг: 0 / 0
23.06.2015, 16:17
    #38990831
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по макросу для печати из Word'a
Shocker.ProПлохой совет, ИМХО.Сегодня порядок файлов один, завтра копирнул в другую папку - он уже другой. Не стоит создавать такой недетерминизм.
Порядок файлов (вернее, то, в каком порядке они отдаются приложению) - определяется файловой системой и драйвером доступа к ФС.

90% за то, что в данном случае мы имеем дело с NTFS - тогда имена гарантированно отдаются в порядке лексической сортировки.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вопрос по макросу для печати из Word'a / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]