Здравствуйте, уважаемые Хелперы и форумчане. Как напечатать макросом открытый файл текущий лист - знаю. Но никак не могу сварганить макрос, чтобы печатал все файлы в папке, начиная с указанного (чтобы я мог указать с какого), и до текущего открытого, включая его. У меня названия файлов либо идут по датам (пример, 2015.04.01 и так до конца месяца, пропусков нет), либо по цифрам (1, 2..., аналогично пропусков нет и в порядке возрастания). А лучше если бы смотрел дату создания файла - указал файл - и печатать его, и все, созданные позже.
Здравствуйте, уважаемые Хелперы и форумчане. Как напечатать макросом открытый файл текущий лист - знаю. Но никак не могу сварганить макрос, чтобы печатал все файлы в папке, начиная с указанного (чтобы я мог указать с какого), и до текущего открытого, включая его. У меня названия файлов либо идут по датам (пример, 2015.04.01 и так до конца месяца, пропусков нет), либо по цифрам (1, 2..., аналогично пропусков нет и в порядке возрастания). А лучше если бы смотрел дату создания файла - указал файл - и печатать его, и все, созданные позже.Макрописец
Упс, кажись не туда тему отправил? А если есть решение и макросами и формулами - куда писать? Модераторы, перенесите тему в нужный раздел, пожалуйста.
Упс, кажись не туда тему отправил? А если есть решение и макросами и формулами - куда писать? Модераторы, перенесите тему в нужный раздел, пожалуйста.Макрописец
на чистом VBA (без подключения каких-либо библиотек) можно, например, так: [vba]
Код
Sub PrintFiles() Dim p$, f$ p = "C:\Users\User\Downloads\DDE\" f = Dir$(p & "*.xls*") Do While Len(f) If FileDateTime(p & f) >= #5/27/2015# Then With Workbooks.Open(p & f) .PrintOut .Close False End With End If f = Dir$ Loop End Sub
[/vba]
[p.s.]Спасибо нашим замечательным ТС! Где бы мы без вас брали пустые файлы?! [/p.s.]
на чистом VBA (без подключения каких-либо библиотек) можно, например, так: [vba]
Код
Sub PrintFiles() Dim p$, f$ p = "C:\Users\User\Downloads\DDE\" f = Dir$(p & "*.xls*") Do While Len(f) If FileDateTime(p & f) >= #5/27/2015# Then With Workbooks.Open(p & f) .PrintOut .Close False End With End If f = Dir$ Loop End Sub
[/vba]
[p.s.]Спасибо нашим замечательным ТС! Где бы мы без вас брали пустые файлы?! [/p.s.]KSV
Насколько я понял из вашего первого сообщения, вам нужен был просто пример, а не готовое решение... И если этот пример чуть доделать, то получилось бы готовое решение: [vba]
Код
Private Sub PrintFiles() Dim i&, d#, p$, f$ f = Application.GetOpenFilename("Файлы Excel,*.xls*") If f = "False" Then Exit Sub i = InStrRev(f, "\") p = Left$(f, i) f = Mid$(f, i + 1) d = FileDateTime(p & f) f = Dir$(p & "*.xls*") Do While Len(f) If FileDateTime(p & f) >= d Then With Workbooks.Open(p & f) .PrintOut .Close False End With End If f = Dir$ Loop End Sub
[/vba]
Насколько я понял из вашего первого сообщения, вам нужен был просто пример, а не готовое решение... И если этот пример чуть доделать, то получилось бы готовое решение: [vba]
Код
Private Sub PrintFiles() Dim i&, d#, p$, f$ f = Application.GetOpenFilename("Файлы Excel,*.xls*") If f = "False" Then Exit Sub i = InStrRev(f, "\") p = Left$(f, i) f = Mid$(f, i + 1) d = FileDateTime(p & f) f = Dir$(p & "*.xls*") Do While Len(f) If FileDateTime(p & f) >= d Then With Workbooks.Open(p & f) .PrintOut .Close False End With End If f = Dir$ Loop End Sub
Пожалуйста! [p.s.]В коде учитывается не только дата выбранного файла, но и время, поэтому файлы с той же датой, но созданные ранее по времени, печататься не будут (т.е., именно так, как просили). Если время учитывать не нужно, то удалите d# из первой строки кода, а далее в коде замените в двух местах d на i[/p.s.]
Пожалуйста! [p.s.]В коде учитывается не только дата выбранного файла, но и время, поэтому файлы с той же датой, но созданные ранее по времени, печататься не будут (т.е., именно так, как просили). Если время учитывать не нужно, то удалите d# из первой строки кода, а далее в коде замените в двух местах d на i[/p.s.]KSV
А для чего оно вам? Ключевое слово Private и нужно для того, чтобы область видимости процедуры была только на уровне модуля, в котором она объявлена, а если вы хотите видеть ее извне, то нужно убрать Private.
А для чего оно вам? Ключевое слово Private и нужно для того, чтобы область видимости процедуры была только на уровне модуля, в котором она объявлена, а если вы хотите видеть ее извне, то нужно убрать Private.KSV
KSV, Я просто ещё не дошёл до Private. Огромнейшее Вам спасибо. К сожалению, второй раз (30 мин назад уже увеличивал) увеличить репутацию пока не даёт. Удачи во всём.
KSV, Я просто ещё не дошёл до Private. Огромнейшее Вам спасибо. К сожалению, второй раз (30 мин назад уже увеличивал) увеличить репутацию пока не даёт. Удачи во всём.Макрописец