Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

5 Июль 2022, 06:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: LibreOffice свойства диалога печати diaolog print  (Прочитано 815 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ForumOOo (бот)

Offline Offline

Сообщений: 815


« Стартовое сообщение: 28 Апрель 2022, 06:25 »

Компонент: 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
Мастер
*****
Offline Offline

Пол: Мужской
Сообщений: 940


WWW
« Ответ #1: 28 Апрель 2022, 12:54 »

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

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

Владимир.
zickname
Новичок
*
Offline Offline

Сообщений: 3


« Ответ #2: 29 Апрель 2022, 11:04 »

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


* snimok_ekrana_2022-04-28_0919207.png (47.91 Кб, 708x537 - просмотрено 9 раз.)
Записан
Bigor
Мастер
*****
Offline Offline

Пол: Мужской
Сообщений: 1 250


« Ответ #3: 29 Апрель 2022, 12:36 »

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

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
sokol92
Мастер
*****
Offline Offline

Пол: Мужской
Сообщений: 940


WWW
« Ответ #4: 29 Апрель 2022, 14:52 »

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

Владимир.
zickname
Новичок
*
Offline Offline

Сообщений: 3


« Ответ #5: 29 Апрель 2022, 17:23 »

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

Сообщений: 3


« Ответ #6: 29 Апрель 2022, 18:41 »

У меня в макросе из #2 другая проблема - сразу начинает печатать лист в двух экземплярах.  Улыбка
именно)) а этого как раз не нужно
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!