макрос для печати всех файлов в той же папке, в которой находится файл с макросо

Автор OOKapitan, 24 апреля 2017, 13:33

0 Пользователи и 1 гость просматривают эту тему.

bigor

закладка События
на Выполнить действие вешаете макрос
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan



OOKapitan

       Здравствуйте, снова.
      Понадобилось печатать, решил использовать макрос, предоставленный Bigor, - и опять вылезла ошибка (на скрине). Замечу, что в папке, которую я выбрал для печати, есть ещё и odt файлы. Помогите, пожалуйста.

bigor

Если нужно печатать только xls файлы, то проще сделать как rami советовал, прописать поиск только xls. Для этого строку  sFileName = Dir(sPath, 0) заменить на  sFileName = Dir(sPath & "*.xls", 0)
А по ошибке мало информации, когда тестил .odt, .txt печатались без проблем. скорее всего еще есть что-то не поддерживаемое LO, возможно скрытое
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Rafik

Чтобы видеть какие файлы будет пытаться открывать, необходимо перед строкой set oDoc = oDesk.loadComponentFromURL(filename,"_blank",63, args()) вставить print filename
В итоге должно получиться
print filename
set oDoc = oDesk.loadComponentFromURL(filename,"_blank",63, args())
После такого дополнения макрос будет выводить название файла, который будет пытаться открывать. Посмотреть на каком имени будет спотыкаться и решить как запретить макросу открывать такие файлы.

OOKapitan

Цитата: Rafik от  7 сентября 2017, 05:09решить как запретить макросу открывать такие файлы.
Проблема в том, что нужно чтобы макрос и эти файлы ОТКРЫВАЛ и xls. Пока некогда было смотреть. Как посмотрю - сразу отпишусь.

Rafik

Цитата: OOKapitan от  7 сентября 2017, 15:59Проблема в том, что нужно чтобы макрос и эти файлы ОТКРЫВАЛ и xls...
Мне думается, что мешающие файлы как раз и не придётся печатать, ибо офис спотыкается на чём-то что не нужно открывать. Это могут быть скрытые временные файлы или что-нибудь типа Desktop.ini, Thumbs.db и прочая служебная ерунда, которая не нужна пользователю.

economist

Вот интересно, эта ветка наберет 100 страниц или нет? Копеечная проблема - уже отняла у людей несколько часов.
А причина в том, что ТС не смог четко и сразу описать что нужно. Здесь срабатывает горькое правило - переделка 1-й строки кода занимает столько же времени, сколько нужно на написание 10% всего кода.

Коллеги, еще раз приведу свой код, который работает и написан за 1... ну ладно, за 5 минут. Добавил комментарии и те условия, что вскрылись в ходе обсуждения.

Option VBASupport 1
Option Compatible
' работает и в Excel, и в LibreOffice Calc (в OpenOffice "Инфра" и нек-ых др. - работает)

Sub Print_All_XLS_From_This_Directory()
' Макрос печатает все XLS из "этого" каталога на принтер по умолчанию
katalog=ThisWorkbook.Path     ' текущий путь
'katalog="C:\DOWNLOAD\!TEST" ' или явный каталог, но без \
failik=dir(katalog & "\*.xls") ' поискали первый XLS
While failik<>""  ' делаем цикл пока находятся еще XLS-ы
if failik<>ActiveWorkbook.Name then ' если это НЕ файл с этим макро, то
Workbooks.open(katalog & failik)' открыли
Workbooks(failik).Sheets(1).PrintOut ' напечатали 1-й лист
wait(500) ' подождали зачем-то (spooler в Win капризен!)
Workbooks(failik).Close ' закрыли
failik=dir() ' еще раз поискали XLS-ы
Else
failik=dir() ' и поискали XLS, если это был "Я"
End if
Wend
End Sub


Еще раз призываю форумчан к активному юзанию VBA-кода внутри StarBasic-кода в LibreOffice.
Это дает ускорение программированию в десятки раз по сравнению с чистым StarBasic-ом.
Код выше написан по памяти, без заглядывания в справку и Интернет, просто потому что объектная модель VBAExcel
идеально проста и хорошо запоминается, команды - короткие. А в Сети - инфы с кусками кода по VBA столько, что это превышает
инфу по всем другим языками программирования, вместе взятым.
VBA - самый популярный язык программирования, на нем пишут около 15 млн. человек во всем мире.  
Выше - наглядное преимущество майкрософтовского диалекта и подтверждение правильности шагов разработчиков OpenOffice|LibreOffice в этом направлении (VBA в SB).

Макросы - последний "бастион" Экселя, после которого Calc станет фактически ему равен по силе и возможностям. И это достойное соревнование, ведь Excel - одно из самых популярных приложений в мире (для PC), с 32-х летней историей и именно он сделал компьютеры персональными, и привел их в бизнес навсегда. С пятницей, друзья! https://ru.wikipedia.org/wiki/Microsoft_Excel
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

bigor

Цитата: economist от  8 сентября 2017, 07:20Добавил комментарии и те условия, что вскрылись в ходе обсуждения.
Ты уже отстал от условий, теперь нужно что бы папку можно было выбрать и как оказывается печатать не только xls файлы :)
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

     Здравствуйте.
     Пользуюсь Вашими макросами, и всё работает нормально. Но вот понадобилось печатать на другой принтер - но почему-то в настройках документа другой принтер по умолчанию не ставится - только на разовую печать. Скажите, пожалуйста, как в Ваших макросах указать имя принтера? Особенно сейчас интересует макрос от пользователя Bigor.

bigor

По мне, так проще сделать нужный принтер по умолчанию  в системе.
НО если хочется что бы макрос выводил  печать на определенный принтер , то смотри приложенный файл. В  PrintName надо прописать имя нужного принтера (как он называется в системе)
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

OOKapitan

Цитата: Bigor от 17 октября 2017, 13:34НО если хочется что бы макрос выводил  печать на определенный принтер , то смотри приложенный файл.
Большое спасибо.
Как опробую - отпишусь.
Пока что сделал как Вы и посоветовали:
Цитата: Bigor от 17 октября 2017, 13:34По мне, так проще сделать нужный принтер по умолчанию  в системе.

Rafik

Для ЛО можно попробовать ещё такой вариант: в документе, котором находится макрос, пройти в меню "Файл" - "настройки принтера", выбрать требуемый принтер и сохранить. Вывод будет идти на принтер, который указан для документа с макросом.