Добрый день.
Когда пользовались Экселем, то там у нас был макрос на скрытие при печати пустых строк, а потом автоматически раскрывало их обратно
Перешли на 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
Во вложении пример таблички
в A16:A24 нет пустых ячеек, сделал проверку по b16:b24
ps нужно прописать в макросе имя принтера, на который будет осуществляться печать
PrintName = "Foxit Reader PDF Printer"
Цитата: Bigor от 30 марта 2018, 15:16
ps нужно прописать в макросе имя принтера, на который будет осуществляться печать
PrintName = "Foxit Reader PDF Printer"
А если принтер стоит по умолчанию, то его как прописать? или надо прописывать конкретно название? Просто если файлом будут пользоваться несколько человек и у них разные сетевые принтеры, то тогда как?
-----
Так же макрос скрывает все пустые строчки по столбцу В а не в выбранном диапазоне, Хотя в Екселе так же было.
Но есть еще вопрос, если в ячейке стоит формула, то можно ли при определенном результате эту строку не печатать (скрыть)? например результат слово ERROR?
А вообще спасибо, это то что надо, только вот маленькие но есть. :beer:
Вот с принтером по умолчанию.
И несколько более тормозной, но работающий именно с указанным диапазоном, и скрывающий в том числе ячейки с формулами (b17)
Цитата: imitator от 30 марта 2018, 14:42например результат слово ERROR
скорее всего у вас нет обработки ошибок, смотрите iferror.
Если error все же нужна, то допишите в условиях второй and и проверку на error
Цитата: Bigor от 30 марта 2018, 17:50
Цитата: imitator от 30 марта 2018, 14:42например результат слово ERROR
скорее всего у вас нет обработки ошибок, смотрите iferror.
Если error все же нужна, то допишите в условиях второй and и проверку на error
Нет Error не нужен, то просто так для понимания.
Спасибо огромное.
Ошибся
допишите в условиях второй and or
А еще такой вопрос, может кто знает, как сделать так, что бы рисунок в таблицах не выводился на печать? Например в Екселе была функция "выводить на печать", тут я найти не могу.
Зайдите в соответствующий стиль страницы (по умолчанию это Базовый), на вкладке Лист есть "птички" что печатать, а что нет.
Цитата: rami от 30 марта 2018, 18:35
Зайдите в соответствующий стиль страницы (по умолчанию это Базовый), на вкладке Лист есть "птички" что печатать, а что нет.
Пасипки, и последний вопрос, если добавлять кол-во распечатанных копий (например 4 шт) то где и как в макросе это добавить?
Цитата: imitator от 30 марта 2018, 17:09кол-во распечатанных копий (например 4 шт) то где и как в макросе это добавить?
Раз
Dim oOpt (1) as new com.sun.star.beans.PropertyValue
Два
oOpt (1).Name = "CopyCount" ' число копий '
oOpt (1).Value = 4 '
Цитата: Bigor от 1 апреля 2018, 22:41
Раз
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())
...
Как у тебя, это примерно тоже, что ты 4 раза нажмешь кнопку печать, как у меня один раз нажал печать и выбрал 4 копии.
Что у тебя что у меня отпечатает 4 копии, но мой вариант должен быстрее это сделать :)
Цитата: Bigor от 1 апреля 2018, 23:46
но мой вариант должен быстрее это сделать :)
Вот оно что, пасипки. Скорость это тоже хорошо.