Comments 18
Как я понимаю, на предпоследней странице получится что несколько последних строк больше по высоте? Как вариант можно просто HPageBreaks вставить свой где надо. Тогда высоты будут одинаковые, но предпоследний лист будет чуть-чуть не весь заполнен на бумаге.
Делюсь лайк-хаком: пишите письмо на одной странице с основными параметрами, пишите детали как в приложении 1.
Руководитель подписывает письмо а сама смета -по барабану.
Если надо очень официально-то все равно каждая страница внизу подписывается
Форму поменяйте. На многих документах подпись стоит на первом листе с пометкой «утверждаю».
Есть ещё лайфх: посылаем по email и без подписи.
Весь загнивающий запад так работает. Подпись только под договором, детали по e-mail.
For Each ws In wb.Worksheets
ActiveWindow.View = xlPageBreakPreview
Перебор листов в книге не делает лист активным. Зачем в цикле каждый раз выполняется ActiveWindow.View = xlPageBreakPreview
?
Лучше написать ws.DisplayPageBreaks = True
- это заставит эксель пересчитать разделение на страницы на каждом листе.
Вообще, если директору так надо видеть сумму перед подписью, то я в таких случаях просто ставлю HPageBreaks
над строкой с суммой и не надо строчки раздвигать.
Вообще, если директору так надо видеть сумму перед подписью, то я в таких случаях просто ставлю
HPageBreaks
над строкой с суммой и не надо строчки раздвигать.
Попался на глаза этот код, вдруг кому полезно будет:
With myWorkbook
ActiveWindow.View = xlPageBreakPreview
If .ActiveSheet.HPageBreaks.Count > 0 Then
Set rPodpis = .ActiveSheet.Cells.Find("Итого:", LookIn:=xlValues, LookAt:=xlWhole)
If Not rPodpis Is Nothing Then
bSplit = False
For Each myHPageBreak In ActiveSheet.HPageBreaks
If myHPageBreak.Location.Row > rPodpis.Row Then
bSplit = True
Exit For
End If
Next
If bSplit Then .ActiveSheet.HPageBreaks.Add rPodpis
End If
End If
ActiveWindow.View = xlNormalView
End With
* В моем случае в книге был заведомо один лист, поэтому обращаюсь к ActiveSheet
Обоже, я думал в Германии бюрократия, ан нет, в России)) в Германии достаточно отправить на электронку ангебот (ценовое предложение, в котором будет перечень услуг и цен за квадратный метр, а так же общее количество метров). И всё. Даже подпись не нужна ни с чьей стороны. Это и является официальным договором по ценам для объекта в контексте которого идёт переписка.
Есть конечно так называемый Verhandlungstermin на котором самой сутью встречи является не наличие подписи, а переговоры с целью понизить некоторые позиции. Таким образом цены координируются сторонами и уже в этой версии документа необходимы подписи обоих участников.
Но как можно подписывать смету не видя при этом всего перечня? Это звучит как какая-то формальность. Если ты подписываешь видя только итоговую сумму, то это чисто формальная подпись, в таком случае можно и не видя сумму подписать.
Идиоты))
«Безумие и отвага»
Сами себе проблемы создаём, потом их героически преодолеваем.
Все таки не ясно о какого уровня руководителе идёт речь. Если директор- то по идее он не должен подписывать сметы только договоры с приложениями.
Если начальник уровня отдела, то надо бы директору настучать ему по голове, чтобы на ровном месте проблему не создавали.
Если ты подписываешь видя только итоговую сумму, то это чисто формальная подпись, в таком случае можно и не видя сумму подписать.
Смысл в том, что подписывается один лист. Остальные листы ретивые исполнители могут заменить. Если на листе с подписями будет итоговая сумма, то хотя бы она останется неизменной.
В целом предложенное решение автором - костыль, так как проблема не в технической плоскости, а в административной. Если уж ты при подписании не доверяешь, то подписывай каждую страницу или требуй, чтобы сшивали документ.
Ооо, у меня была такая проблема в Crystal Reports в 2007 году для банковского отчёта. Нормального решения в CR не было, и я как-то извратился. Не помню уже как. Вроде я вставлял принудительный page break при некоторых условиях, чтобы часть строк и Итого попадали на новую страницу. Форму поменять было нельзя, потому как она была утверждена ЦБ.
Я знаю, как случайно поломать скрипт. На любой строке ниже "визульно" последней (383 на примере) в ячейку ввести пробел. Например, где-то на четырехсотой.
Если люди, создающие сметы, не способны сразу сделать нормальную разметку, то от них вполне можно ожидать подобных сюрпризов.
Наверное, в скрипт надо ввести проверку, что выявленная последняя строка содержит значимую информацию. Можно сцепить значения ячеек, удалить пробелы и проверить длину того, что останется. Ну и определить порог. Если длина больше, то продолжаем. Меньше-ошибку в лог и к следующему файлу.
Кстати, при массовой обработке лучше не использовать msgbox, а писать лог или в консоль, или в текстовик. Нельзя отойти от компьютера, постоянно требуется нажатие кнопки. А уже в конце полноценное уведомление, типа, Успешно обработано Х файлов, ошибок Y. Детали в логе.
Если люди, создающие сметы, не способны сразу сделать нормальную разметку, то от них вполне можно ожидать подобных сюрпризов.
Это не люди:
Сметы создаются в приложении ГРАНД-Смета, версия 2024.2 - это указывается в колонтитуле Эксель файла и, возможно, у этого приложения есть такая кнопка, чтобы сделать всё красиво и не делать так, чтобы на последнем листе оставались только подписи.
Но организация, которая составляет эти сметы, и передаёт их на печать к нам в другую организацию, похоже с этой кнопкой не знакома.
Не будет там пробела в 400й строке.
Про msgbox и логи согласен.
Как сделать так, чтобы на последнем листе Экселя оказались не только подписи директоров, но и суммы