LibreOffice свойства диалога печати diaolog print

Автор ForumOOo (бот), 28 апреля 2022, 06:25

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

ForumOOo (бот)

Компонент: Basic
Версия продукта: 7.x
Сборка: LibreOffice
ОС: Windows

Здравствуйте! Помогите с решением задачи.
Нужно, по нажатию кнопки на листе запустить макрос, а он в свою очередь выводит диалог печати. Нужно передать параметры в этот самый диалог (количество копий).
Есть следующий код, но он не отрабатывает должным образом (не передает значение). при выводе диалога, количество копий остается неизменным и равно 1.

Attribute VBA_ModuleType=VBAModule
Option VBASupport 1
Sub Кнопка_Печать1()
   Application.ScreenUpdating = 0
   Worksheets("DATA").Unprotect Password:="123321"
   document   = ThisComponent.CurrentController.Frame
   dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
   With Sheets("DATA")
   Range("$A$1:$G$35").Select
   Columns("A:G").Hidden = False
   Worksheets("DATA").Range("$B$11:$B$27").WrapText = True
   Worksheets("DATA").Range("$C$23:$C$27").WrapText = True
       .PageSetup.PrintArea = "$A$1:$G$35"
     ' .Application.Dialogs(xlDialogPrint).Show , , , 2
       
       'Code_Libre
      'dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

      rem ----------------------------------------------------------------------
      Dim oRanges(0) As New com.sun.star.table.CellRangeAddress
      ' Устанавливаем лист печати (Лист1)
         oRanges(0).Sheet = 0
      ' Устанавливаем первую ячейку первого диапазона (A1)
         oRanges(0).StartColumn = 0
         oRanges(0).StartRow = 0
      ' Устанавливаем последнюю ячейку первого диапазона (D5)
         oRanges(0).EndColumn = 7
         oRanges(0).EndRow = 35
         ' Выбираем указанные диапазоны
         ThisComponent.CurrentController.getActiveSheet().setPrintAreas(oRanges())
         'Dim Args(0) as new com.sun.star.beans.PropertyValue
         dim args2(0) as new com.sun.star.beans.PropertyValue
            args2(0).Name = "CopyCount"
            args2(0).Value = 2
            
            dispatcher.executeDispatch(document, ".uno:Print", "", 0, args2())
         'Code+_Libre
         Wait 200
         Columns("A:G").Hidden = True
             Range("$i$18").Select
             end with
              Worksheets("DATA").Protect Password:="123321"
   Application.ScreenUpdating = 1
End Sub

Тестовый файл: http://forumooo.ru/attachments/upload/snimok_ekrana_2022-04-28_0919207.png (47.91 КБ)

--
Подпись: zickname

sokol92

Имя свойства для количества экземпляров печати - "Copies", а не "CopyCount".

Для форматирования кода в своем сообщении выделите код макроса и нажмите кнопку "#".
Владимир.

zickname

Здравствуйте! Помогите с решением задачи.
Нужно, по нажатию кнопки на листе запустить макрос, а он в свою очередь выводит диалог печати. Нужно передать параметры в этот самый диалог (количество копий).
Есть следующий код, но он не отрабатывает должным образом (не передает значение). при выводе диалога, количество копий остается неизменным и равно 1.

Attribute VBA_ModuleType=VBAModule
Option VBASupport 1
Sub Кнопка_Печать1()
   Application.ScreenUpdating = 0
   Worksheets("DATA").Unprotect Password:="123321"
   document   = ThisComponent.CurrentController.Frame
   dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
   With Sheets("DATA")
   Range("$A$1:$G$35").Select
   Columns("A:G").Hidden = False
   Worksheets("DATA").Range("$B$11:$B$27").WrapText = True
   Worksheets("DATA").Range("$C$23:$C$27").WrapText = True
       .PageSetup.PrintArea = "$A$1:$G$35"
     REM .Application.Dialogs(xlDialogPrint).Show , , , 2
       
       'Code_Libre
      'dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

      rem ----------------------------------------------------------------------
      Dim oRanges(0) As New com.sun.star.table.CellRangeAddress
         oRanges(0).Sheet = 0
         oRanges(0).StartColumn = 0
         oRanges(0).StartRow = 0
         oRanges(0).EndColumn = 7
         oRanges(0).EndRow = 35
         ' Выбираем указанные диапазоны
         ThisComponent.CurrentController.getActiveSheet().setPrintAreas(oRanges())
         'Dim Args(0) as new com.sun.star.beans.PropertyValue
         dim args2(0) as new com.sun.star.beans.PropertyValue
            args2(0).Name = "Copies"
            args2(0).Value = 2
           
            dispatcher.executeDispatch(document, ".uno:Print", "", 0, args2())
         'Code+_Libre
         Wait 200
         Columns("A:G").Hidden = True
             Range("$i$18").Select
             end with
              Worksheets("DATA").Protect Password:="123321"
   Application.ScreenUpdating = 1
End Sub


Предыдущая моя тема была опубликована через бот сайта https://forumooo.ru/index.php/topic,9148.0/msg,62317.html

bigor

Добрый день
А можно цель макроса описать. Нужно по кнопке напечатать некоторое количество копий документа. Количество копий обязательно через диалог задавать или оно постоянно и можно в макросе жестко прописать? Кроме количества копий что еще нужно от диалога?
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

sokol92

У меня в макросе из #2 другая проблема - сразу начинает печатать лист в двух экземплярах.  :)
Владимир.

zickname

Цитата: Bigor от 29 апреля 2022, 12:36
Добрый день
А можно цель макроса описать. Нужно по кнопке напечатать некоторое количество копий документа. Количество копий обязательно через диалог задавать или оно постоянно и можно в макросе жестко прописать? Кроме количества копий что еще нужно от диалога?
Здравствуйте, цель макроса:
Имеется защищенный лист с ячейками (кроме определенных), куда вносятся данные, после нажатия кнопки печать (кнопка расположена на листе) срабатывает данный макрос, (нужно вывести именно диалог печати с возможностью предварительного просмотра (чтобы убедится что лист сформирован верно и можно печатать.) Нужны заданные свойства - количество копий (2), чтобы не нажимать туда мышкой (авось тороплюсь, промохнусь и распечатаю одну копию) после печати столбцы скрываются и лист снова на защите.
В excel было сделано проще : application.dialogs(xlDialogPrint).Show , , , 2
Тут это не работает. Когда изменил и передал свойство в текущий макрос  "Copies", то печатается две копии без диалога.
Подскажите, как можно после открытия диалога через диспетчер, установить количество копий через макрос((

zickname

Цитата: sokol92 от 29 апреля 2022, 14:52
У меня в макросе из #2 другая проблема - сразу начинает печатать лист в двух экземплярах.  :)
именно)) а этого как раз не нужно