Операторы VBA для настройки страницы выполняются только в режиме отладки

Следующая подпрограмма предназначена для подготовки страницы для вывода в формате PDF. Например, если из-за других подключенных принтеров перепутались страничные тормоза, сабвуфер должен исправить их обратно до 1 страницы в ширину и 3 страниц в высоту.

Sub adjustPB(ws As Variant, ps As XlPaperSize)
'On Error Resume Next
Application.DisplayAlerts = False
Application.PrintCommunication = False
With ws.PageSetup
    .LeftMargin = Application.InchesToPoints(0)
    .RightMargin = Application.InchesToPoints(0)
    .TopMargin = Application.InchesToPoints(0)
    .BottomMargin = Application.InchesToPoints(0)
    .HeaderMargin = Application.InchesToPoints(0)
    .FooterMargin = Application.InchesToPoints(0)
    .Orientation = xlLandscape
    '.Orientation = xlPortrait
    .PaperSize = ps
    .Zoom = 100
    .Zoom = False
    Debug.Print .Zoom
    .FitToPagesWide = 1
    Debug.Print .Zoom
    Debug.Print .FitToPagesWide
    .FitToPagesTall = 3
End With
Application.DisplayAlerts = True
Application.PrintCommunication = True
End Sub

Подпрограмма на самом деле работает, как и ожидалось, в одном шаге (F8), когда я добавляю точку останова в «With ws.PateSetup». Однако, если я запускаю его с помощью F5, он игнорирует операторы. Отладочные отпечатки показывают, что значения свойств не изменились.

До сих пор пробовали: добавляйте задержки перед .zoom и .FitPagesWide с DoEvents до 1 секунды. Без изменений. Масштаб, например, остается равным 55. В одношаговом режиме масштабирование в конце читается как ЛОЖЬ. Любые объяснения/подсказки, что здесь происходит не так?


person Mike    schedule 15.02.2018    source источник
comment
какие значения вы получаете в окне отладки?   -  person Foxfire And Burns And Burns    schedule 15.02.2018
comment
Если я запускаю его с помощью F5, значения масштабирования остаются такими, как показано в диалоговом окне настройки страницы. Если я запускаю Singlestep, масштабирование показывает FALSE, и страницы корректируются правильно. Pagesetup показывает серым цветом уровень масштабирования, необходимый для размещения на 1 странице по ширине (здесь 52).   -  person Mike    schedule 15.02.2018


Ответы (1)


.PrintCommunication может быть ключом. На данный момент документация довольно неясна, но похоже, что Excel кэширует все команды, когда .PrintCommunication выключен, и выгружает их в механизм настройки страницы, когда вы включаете .PrintCommunication. Это может быть причиной отсутствия каких-либо изменений при работе с F5. (Службы отладчика для меня еще более неясны.)

Попробуйте применить

With ActiveSheet.PageSetup
     ' .... 
    .Parent.Application.PrintCommunication = True
    .Zoom = 100
    .Zoom = False
    Debug.Print .Zoom
    .FitToPagesWide = 1
    Debug.Print .Zoom
    Debug.Print .FitToPagesWide
   .FitToPagesTall = 3
   .Parent.Application.PrintCommunication = False
   ' .... 
End With
Application.PrintCommunication = True

Мне тоже интересно посмотреть на результат :)

person AcsErno    schedule 15.02.2018
comment
Интересно, это решило это. Тем временем я также запустил его с printcommunication=false, если я использую xlPaperA4 вместо xlPaperEsheet. Спасибо за решение, но я думаю, что MS обязательно должна изучить это, поскольку мне это не кажется логичным, что там происходит. - person Mike; 16.02.2018