Morozbl4
Участник

Offline
Сообщений: 8
|
Уважаемые форумчане, здравствуйте! Необходима помощь ввиду полной некомпетенции в программировании (опыт 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
|
Добрый день. А не могли бы Вы приложить файл с примером, работающим в Excel. Мне кажется приведенный макрос не соответствует описанию задачи.
|
|
|
Записан
|
|
|
|
mikekaganski
|
Мне кажется приведенный макрос не соответствует описанию задачи.
Почему не соответствует? Макрос в цикле меняет E5 на значения из выделенного диапазона, и при каждом изменении распечатывает Sheet1...
|
|
|
Записан
|
|
|
|
Bigor
|
Из описания он должен выполнять гораздо больше действий  но если это финальная часть, то она должна в LO работать с Option VBASupport 1. А если переписывать под SB, то наверно нужно все переписать.
|
|
|
Записан
|
|
|
|
mikekaganski
|
Я задачу понял так:
"У меня уже есть книга с листом, в котором формулы завязаны на E5 так, что при изменении её всё нормально пересчитывается, и лист готов к печати. Теперь мне нужно распечатать этот лист при последовательном внесении в E5 значений, которые заданы где-то на другом листе в выделенном диапазоне."
Я попробовал с VBASupport - код не ругается, но PrintOut выдаёт на печать не свой объект, а текущий лист...
|
|
|
Записан
|
|
|
|
Bigor
|
Я попробовал с VBASupport - код не ругается, но PrintOut выдаёт на печать не свой объект, а текущий лист... печатает активный лист. Как вариант перед sh1.PrintOut вставить sh1.Activate
|
|
|
Записан
|
|
|
|
Morozbl4
Участник

Offline
Сообщений: 8
|
"У меня уже есть книга с листом, в котором формулы завязаны на E5 так, что при изменении её всё нормально пересчитывается, и лист готов к печати. Теперь мне нужно распечатать этот лист при последовательном внесении в E5 значений, которые заданы где-то на другом листе в выделенном диапазоне." Именно так. При смене значени Е5 выдергиваются значения с других листов и формируется некий протокол-отчет на одном листе. Просто вручную отправлять на печать порядка 1500 листов довольно долго и муторно... Я попробовал с VBASupport - код не ругается, но PrintOut выдаёт на печать не свой объект, а текущий лист... Именно так. Печатает абсолютно весь лист. А там много(
|
|
|
Записан
|
|
|
|
Morozbl4
Участник

Offline
Сообщений: 8
|
Я попробовал с VBASupport - код не ругается, но PrintOut выдаёт на печать не свой объект, а текущий лист... Есть еще одна проблемка при использовании VBASupport - адовое подвисание LO и периодический краш
|
|
|
Записан
|
|
|
|
mikekaganski
|
Я попробовал с VBASupport - код не ругается, но PrintOut выдаёт на печать не свой объект, а текущий лист... Именно так. Печатает абсолютно весь лист. А там много( Хм... а если Вы работаете на одном листе, и на этом листе есть не только то, что Вам надо напечатать, но и другое - то что Вы ожидаете при распечатке? Попробуйте задать диапазон для печати.
|
|
|
Записан
|
|
|
|
Bigor
|
Если у вас 1500 листов, то подвисание и краш может быть из-за очереди принтера.
|
|
|
Записан
|
|
|
|
Morozbl4
Участник

Offline
Сообщений: 8
|
Я попробовал с VBASupport - код не ругается, но PrintOut выдаёт на печать не свой объект, а текущий лист... Именно так. Печатает абсолютно весь лист. А там много( Хм... а если Вы работаете на одном листе, и на этом листе есть не только то, что Вам надо напечатать, но и другое - то что Вы ожидаете при распечатке? Попробуйте задать диапазон для печати. Я этот макрос с добавлением одной строчки тестировал в Excel и все работало нормально... ( Печатался именно тот лист который мне нужен с подставлением соответсвующих значений в ячейки с соседних листов. т.е. я на первом листе выделяю диапазон ячеек, эти ячейки вставляются в по очереди в ячейку Е5 отчета, в остальные ячейки подставляются значения из указанных листов и вуаля!
|
|
|
Записан
|
|
|
|
Bigor
|
Про нужный лист посмотрите ответ #5
|
|
|
Записан
|
|
|
|
Morozbl4
Участник

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

Offline
Сообщений: 8
|
Всем огромное спасибо! Все вроде как работает, отдельное спасибо Bigor! Периодически валится LO, но, это наверное больше его проблема)
|
|
|
Записан
|
|
|
|
Bigor
|
Вот на скорую руку на 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 »
|
Записан
|
|
|
|
|