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

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

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

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 »   Вниз
  Печать  
Автор Тема: макрос для печати листа на основе диапазона значений  (Прочитано 816 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Morozbl4
Участник
**
Offline Offline

Сообщений: 8


« Стартовое сообщение: 10 Октябрь 2018, 17:34 »

Уважаемые форумчане, здравствуйте!
Необходима помощь ввиду полной некомпетенции в программировании (опыт pascal 25 лет назад это не опыт  Да уж...)
У меня есть лист, который при изменении значения в ячейке условно E5, автоматически заполняет определенные поля в sheet1, выполняет поиск и возвращает значения из таблицы на другом листе - sheetTable). Поэтому после изменения ячейки E5, sheet1 в основном готов к печати.

На просторах интернета нашел следующий макрос, работающий в Excel:
Цитата:
Sub Fill_Print()
    Dim Rng As Range, r As Range
    Dim sh1 As Worksheet, shTable As Worksheet

    Set sh1 = Sheets("Sheet1")
    Set shTable = Sheets("sheetTable")
    Set Rng = Selection

    For Each r In Rng
     sh1.Range("E5").Value = r.Value
     sh1.PrintOut
    Next r
End Sub
Помогите, пожалуйста, переписать его для LibreOffice.
Спасибо!
Записан
Bigor
Опытный пользователь
***
Offline Offline

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


« Ответ #1: 11 Октябрь 2018, 09:35 »

Добрый день.
А не могли бы Вы приложить файл с примером, работающим в Excel. Мне кажется приведенный макрос не соответствует описанию задачи.
Записан
mikekaganski
Мастер
*****
Online Online

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 162


« Ответ #2: 11 Октябрь 2018, 09:38 »

Мне кажется приведенный макрос не соответствует описанию задачи.

Почему не соответствует? Макрос в цикле меняет E5 на значения из выделенного диапазона, и при каждом изменении распечатывает Sheet1...
Записан

С уважением,
Михаил Каганский
Bigor
Опытный пользователь
***
Offline Offline

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


« Ответ #3: 11 Октябрь 2018, 09:43 »

Из описания он должен выполнять гораздо больше действий Улыбка но если это финальная часть, то она должна в LO работать с Option VBASupport 1. А если переписывать под SB, то наверно нужно все переписать.
Записан
mikekaganski
Мастер
*****
Online Online

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 162


« Ответ #4: 11 Октябрь 2018, 10:39 »

Я задачу понял так:

"У меня уже есть книга с листом, в котором формулы завязаны на E5 так, что при изменении её всё нормально пересчитывается, и лист готов к печати. Теперь мне нужно распечатать этот лист при последовательном внесении в E5 значений, которые заданы где-то на другом листе в выделенном диапазоне."

Я попробовал с VBASupport - код не ругается, но PrintOut выдаёт на печать не свой объект, а текущий лист...
Записан

С уважением,
Михаил Каганский
Bigor
Опытный пользователь
***
Offline Offline

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


« Ответ #5: 11 Октябрь 2018, 11:05 »

Я попробовал с VBASupport - код не ругается, но PrintOut выдаёт на печать не свой объект, а текущий лист...
печатает активный лист. Как вариант перед
Код:
sh1.PrintOut
  вставить
Код:
sh1.Activate
Записан
Morozbl4
Участник
**
Offline Offline

Сообщений: 8


« Ответ #6: 11 Октябрь 2018, 11:09 »

"У меня уже есть книга с листом, в котором формулы завязаны на E5 так, что при изменении её всё нормально пересчитывается, и лист готов к печати. Теперь мне нужно распечатать этот лист при последовательном внесении в E5 значений, которые заданы где-то на другом листе в выделенном диапазоне."
Именно так. При смене значени Е5 выдергиваются значения с других листов и формируется некий протокол-отчет на одном листе. Просто вручную отправлять на печать порядка 1500 листов довольно долго и муторно...

Я попробовал с VBASupport - код не ругается, но PrintOut выдаёт на печать не свой объект, а текущий лист...
Именно так. Печатает абсолютно весь лист. А там много(
Записан
Morozbl4
Участник
**
Offline Offline

Сообщений: 8


« Ответ #7: 11 Октябрь 2018, 11:11 »

Я попробовал с VBASupport - код не ругается, но PrintOut выдаёт на печать не свой объект, а текущий лист...
Есть еще одна проблемка при использовании VBASupport - адовое подвисание LO и периодический краш
Записан
mikekaganski
Мастер
*****
Online Online

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 162


« Ответ #8: 11 Октябрь 2018, 11:12 »

Я попробовал с VBASupport - код не ругается, но PrintOut выдаёт на печать не свой объект, а текущий лист...
Именно так. Печатает абсолютно весь лист. А там много(

Хм... а если Вы работаете на одном листе, и на этом листе есть не только то, что Вам надо напечатать, но и другое - то что Вы ожидаете при распечатке? Попробуйте задать диапазон для печати.
Записан

С уважением,
Михаил Каганский
Bigor
Опытный пользователь
***
Offline Offline

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


« Ответ #9: 11 Октябрь 2018, 11:16 »

Если у вас 1500 листов, то подвисание и краш может быть из-за очереди принтера.
Записан
Morozbl4
Участник
**
Offline Offline

Сообщений: 8


« Ответ #10: 11 Октябрь 2018, 11:20 »

Я попробовал с VBASupport - код не ругается, но PrintOut выдаёт на печать не свой объект, а текущий лист...
Именно так. Печатает абсолютно весь лист. А там много(
Хм... а если Вы работаете на одном листе, и на этом листе есть не только то, что Вам надо напечатать, но и другое - то что Вы ожидаете при распечатке? Попробуйте задать диапазон для печати.

Я этот макрос с добавлением одной строчки тестировал в Excel и все работало нормально... ( Печатался именно тот лист который мне нужен с подставлением соответсвующих значений в ячейки с соседних листов. т.е. я на первом листе выделяю диапазон ячеек, эти ячейки вставляются в по очереди в ячейку Е5 отчета, в остальные ячейки подставляются значения из указанных листов и вуаля!
Записан
Bigor
Опытный пользователь
***
Offline Offline

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


« Ответ #11: 11 Октябрь 2018, 11:23 »

Про нужный лист посмотрите ответ #5
Записан
Morozbl4
Участник
**
Offline Offline

Сообщений: 8


« Ответ #12: 11 Октябрь 2018, 11:26 »

Про нужный лист посмотрите ответ #5
Спасибо, попробую, несколько позже отпишусь!
Записан
Morozbl4
Участник
**
Offline Offline

Сообщений: 8


« Ответ #13: 11 Октябрь 2018, 11:52 »

Всем огромное спасибо!
Все вроде как работает, отдельное спасибо Bigor!
Периодически валится LO, но, это наверное больше его проблема)
Записан
Bigor
Опытный пользователь
***
Offline Offline

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


« Ответ #14: 11 Октябрь 2018, 12:12 »

Вот на скорую руку на  SB с областью печати
Код:
sub SB_print()
  Dim oOpts(0) as New com.sun.star.beans.PropertyValue
  Dim oRanges(0) As New com.sun.star.table.CellRangeAddress
  
  sh1=ThisComponent.Sheets(0)
  shTable=ThisComponent.Sheets(1)
  oSelection = ThisComponent.CurrentSelection()


oRanges(0).Sheet = 0
oRanges(0).StartColumn = 0 : oRanges(0).StartRow = 0 'A1
oRanges(0).EndColumn = 5 : oRanges(0).EndRow = 5 'f6
ThisComponent.CurrentController.setActiveSheet(sh1)
ThisComponent.CurrentController.getActiveSheet().setPrintAreas(oRanges())
oOpts(0).Name = "Wait"
oOpts(0).Value = True

   For i =oSelection.RangeAddress.StartRow To oSelection.RangeAddress.EndRow
     sh1.getCellByPosition(4,4).Value = shTable.getCellByPosition(oSelection.RangeAddress.StartColumn,i).Value
    
     ThisComponent.Print(oOpts())
    
    Next
End Sub

ps по ответу #5 строчку
Код:
sh1.Activate
лучше вставить до начала цикла
« Последнее редактирование: 11 Октябрь 2018, 12:18 от Bigor » Записан
Страниц: 1 2 »   Вверх
  Печать  
 
Перейти в:  

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