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

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

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

Войти
Новости: Вы можете задать вопрос по LibreOffice или Apache OpenOffice  без регистрации, используя форму
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Макрос для печати  (Прочитано 609 раз)
0 Пользователей и 1 Гость смотрят эту тему.
imitator
Новичок
*
Offline Offline

Сообщений: 7


« Стартовое сообщение: 30 Март 2018, 14:22 »

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

Перешли на OpenOffice Calc, скрипты с Экселя не работают. Если есть возможность то помогите.
Нужен скрипт, который при печати будет автоматически скрывать пустые строки в диапазоне A16:A24, после чего должно отправится на печать 2 странички, после печати скрытые строки должны вернутся.

Пример Макроса в Экселе
Код:

Public avArr(), avCngArr()
Sub HideRows()
    Dim bChange As Boolean
    Dim lr As Long, lc As Long
    Dim vTmp
    Dim x(), i&, hr As Range: Application.ScreenUpdating = 0
avCngArr = ActiveSheet.UsedRange.Value
    On Error Resume Next
    vTmp = avArr(1, 1)
    If Err.Number = 0 Then
        For lr = 1 To UBound(avArr, 1)
            For lc = 1 To UBound(avArr, 2)
                If avCngArr(lr, lc) <> avArr(lr, lc) Then
                    bChange = 1
                    Exit For
                End If
            Next lc
            If bChange Then Exit For
        Next lr
    Else
        bChange = 1
    End If
    If bChange Then
        avArr = ActiveSheet.UsedRange.Value
        With Range([B1], Cells(Rows.Count, 2).End(xlUp))
x = .Value
For i = 3 To UBound(x)
If x(i, 1) = Empty Then
If hr Is Nothing Then Set hr = .Cells(i) Else Set hr = Union(hr, .Cells(i))
End If
Next i
.EntireRow.Hidden = False
End With
If Not hr Is Nothing Then hr.EntireRow.Hidden = True
Application.ScreenUpdating = 1
        ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=2
    End If
Call HideRows2
End Sub

Sub HideRows2()
Dim x(), i&, hr As Range: Application.ScreenUpdating = 0
With Range([A1], Cells(Rows.Count, 1).End(xlUp))
x = .Value
For i = 3 To UBound(x)
If x(i, 1) = Empty Then
If hr Is Nothing Then Set hr = .Cells(i) Else Set hr = Union(hr, .Cells(i))
End If
Next i
.EntireRow.Hidden = False
End With
If Not hr Is Nothing Then hr.EntireRow.Hidden = True
Application.ScreenUpdating = 1
End Sub

Во вложении пример таблички

* TEST.ods (17.74 Кб - загружено 4 раз.)
Записан
Bigor
Старожил
****
Offline Offline

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


« Ответ #1: 30 Март 2018, 15:16 »

в A16:A24 нет пустых ячеек, сделал проверку по b16:b24

ps нужно прописать в макросе имя принтера, на который будет осуществляться печать

PrintName = "Foxit Reader PDF Printer"

* TEST_print_h.ods (19.6 Кб - загружено 5 раз.)
« Последнее редактирование: 30 Март 2018, 15:19 от Bigor » Записан
imitator
Новичок
*
Offline Offline

Сообщений: 7


« Ответ #2: 30 Март 2018, 16:42 »

ps нужно прописать в макросе имя принтера, на который будет осуществляться печать

PrintName = "Foxit Reader PDF Printer"
А если принтер стоит по умолчанию, то его как прописать? или надо прописывать конкретно название? Просто если файлом будут пользоваться несколько человек и у них разные сетевые принтеры, то тогда как?

-----

Так же макрос скрывает все пустые строчки по столбцу В а не в выбранном диапазоне, Хотя в Екселе так же было.
Но есть еще вопрос, если в ячейке стоит формула, то можно ли при определенном результате эту строку не печатать (скрыть)? например результат слово  ERROR?

А вообще спасибо, это то что надо, только вот маленькие но есть.  Всё хорошо
« Последнее редактирование: 30 Март 2018, 17:09 от imitator » Записан
Bigor
Старожил
****
Offline Offline

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


« Ответ #3: 30 Март 2018, 17:46 »

Вот с принтером по умолчанию.

И несколько более тормозной, но работающий именно с указанным диапазоном, и скрывающий в том числе ячейки с формулами (b17)

* TEST_print_h_2.ods (18.39 Кб - загружено 5 раз.)
Записан
Bigor
Старожил
****
Offline Offline

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


« Ответ #4: 30 Март 2018, 17:50 »

например результат слово  ERROR
скорее всего у вас нет обработки ошибок, смотрите iferror.
Если error все же нужна, то допишите в условиях второй and и проверку на error
Записан
imitator
Новичок
*
Offline Offline

Сообщений: 7


« Ответ #5: 30 Март 2018, 18:02 »

например результат слово  ERROR
скорее всего у вас нет обработки ошибок, смотрите iferror.
Если error все же нужна, то допишите в условиях второй and и проверку на error
Нет Error не нужен, то просто так для понимания.
Спасибо огромное.
Записан
Bigor
Старожил
****
Offline Offline

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


« Ответ #6: 30 Март 2018, 18:10 »

Ошибся
допишите в условиях второй and or
Записан
imitator
Новичок
*
Offline Offline

Сообщений: 7


« Ответ #7: 30 Март 2018, 18:25 »

А еще такой вопрос, может кто знает, как сделать так, что бы рисунок в таблицах не выводился на печать? Например в Екселе была функция "выводить на печать", тут я найти не могу.
Записан
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #8: 30 Март 2018, 18:35 »

Зайдите в соответствующий стиль страницы (по умолчанию это Базовый), на вкладке Лист есть "птички" что печатать, а что нет.
Записан

imitator
Новичок
*
Offline Offline

Сообщений: 7


« Ответ #9: 30 Март 2018, 19:09 »

Зайдите в соответствующий стиль страницы (по умолчанию это Базовый), на вкладке Лист есть "птички" что печатать, а что нет.
Пасипки, и последний вопрос, если добавлять кол-во распечатанных копий (например 4 шт) то где и как в макросе это добавить?
Записан
Bigor
Старожил
****
Offline Offline

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


« Ответ #10: 1 Апрель 2018, 22:41 »

кол-во распечатанных копий (например 4 шт) то где и как в макросе это добавить?

Раз
Код:
Dim oOpt (1) as new com.sun.star.beans.PropertyValue

Два
Код:
oOpt (1).Name = "CopyCount" ' число копий '
oOpt (1).Value = 4 '
Записан
imitator
Новичок
*
Offline Offline

Сообщений: 7


« Ответ #11: 1 Апрель 2018, 23:38 »


Раз
Код:
Dim oOpt (1) as new com.sun.star.beans.PropertyValue

Два
Код:
oOpt (1).Name = "CopyCount" ' число копий '
oOpt (1).Value = 4 '
Хм, а я добавил еще строчки
Код:
ThisComponent.Print(oOpt())
Или так лучше не делать?
Для 4 копий например

Код:
...
ThisComponent.Print(oOpt())
ThisComponent.Print(oOpt())
ThisComponent.Print(oOpt())
ThisComponent.Print(oOpt())
...
Записан
Bigor
Старожил
****
Offline Offline

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


« Ответ #12: 1 Апрель 2018, 23:46 »

Как у тебя, это примерно тоже, что ты 4 раза нажмешь кнопку печать, как у меня один раз нажал печать и выбрал 4 копии.
Что у тебя что у меня отпечатает 4 копии, но мой вариант должен быстрее это сделать Улыбка
Записан
imitator
Новичок
*
Offline Offline

Сообщений: 7


« Ответ #13: 2 Апрель 2018, 01:12 »

но мой вариант должен быстрее это сделать Улыбка
Вот оно что, пасипки. Скорость это тоже хорошо.
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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