Я работаю над проектом, в котором я читаю файл CSV, форматирую данные во временном листе (OutputSheet
), копирую-вставляю форматированные данные на лист для печати (PrintSheet
), сохраняю PrintSheet как PDF после вставки разрывов страниц вручную, чтобы что блок данных не разбивается по страницам. Я делаю это в функции макроса Excel VBA. Вот соответствующая часть кода:
PrevPageNum = PrintSheet.HPageBreaks.Count
OutputSheet.Rows("6:" & (CurrHistoryRows + 14)).Copy
PrintSheet.Cells(PrtPstStRow, 1).PasteSpecial Paste:=xlPasteFormats
PrintSheet.Cells(PrtPstStRow, 1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Application.CutCopyMode = False
PageNum = PrintSheet.HPageBreaks.Count
If PrevPageNum < PageNum Then
PrintSheet.Rows(PrtPstStRow).PageBreak = xlPageBreakManual
End If
Когда я вызываю макрос непосредственно из кода или с помощью назначенной кнопки на панели инструментов быстрого доступа, разрывы страниц вручную назначаются правильно. Но когда я вызываю этот макрос из Auto_Open, они вообще не назначаются (все остальное остается прежним!). После отладки кода я заметил, что PrevPageNum
и PageNum
всегда равны нулю, когда макрос вызывается из Auto_Open
. В двух других случаях значения меняются.
Также хотелось бы отметить, что ширина PrintSheet
в макете страницы увеличена до 1 Page
.
Любые идеи, пожалуйста! Спасибо.
Update:
Я добавил эти операторы незадолго до PrintSheet.HPageBreaks.Count
, и разрывы страниц также начали работать с Auto_Open
.
OutputSheet.Activate
PrintSheet.Activate
FINAL Update:
Когда я запускал это на "медленном" компьютере (процессор - i3 с 3 ГБ оперативной памяти DDR2), я снова столкнулся с той же проблемой пропуска разрывов страниц. После долгих поисков я наконец нашел решение (или обходной путь) со 100% успехом. Вам нужно прокрутить вертикально до последней использованной строки, чтобы HPageBreaks Collection
обновился с помощью Count
. Окончательный код выглядит следующим образом:
PrintSheet.Activate
CurrentRowNum = ActiveWindow.ScrollRow
ActiveWindow.ScrollRow = 5000 'or the last used row
PageNum = PrintSheet.HPageBreaks.Count
ActiveWindow.ScrollRow = CurrentRowNum