Как установить ActiveWindow.View для не активного листа - PullRequest
1 голос
/ 24 сентября 2019

Согласно этой статье говорится, что если вы удаляете существующие разрывы страниц, вы можете получить сообщение об ошибке, если для вида листа задан предварительный просмотр разрывов страниц.Как решение они говорят, чтобы изменить представление к нормальному, а затем удалить разрыв страницы.

Сначала я пробовал следующую последовательность, которая не работает, потому что я обращаюсь к рабочему листу вместо activewindow:

    ViewState = Worksheets(2).View
    Worksheets(2).View = xlNormalView
    Worksheets(2).Cells.PageBreak = xlPageBreakNone
    Worksheets(2).View = ViewState

Теперь я мог чередовать свой код с чем-то вроде:

    Set InitialWorksheet = ActiveSheet
    Worksheets(2).Activate
    ViewState = ActiveWindow.View
    ActiveWindow.View = xlNormalView
    Worksheets(2).Cells.PageBreak = xlPageBreakNone
    ActiveWindow.View = ViewState
    InitialWorksheet.Activate

Мне было интересно, есть ли способ изменить состояние просмотра неактивной таблицы без необходимости сначала ее активировать?

Индекс Windows одинаков?пути листы являются индексом?Window (2) .view действителен?

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

К сожалению, если рабочая книга открыта, изменение параметра View для листа, отличного от активного листа, невозможно.

xlNormalView является частью типа XlWindowView и как можно прочитать на его странице MSDN, это для указания представления, отображаемого в окне (а не на рабочем листе).Следовательно, вы можете изменить это свойство только для объекта окна, и затронутый лист будет активным.

Альтернативные свойства внутри объекта Window также не помогают.Например, если вы наберете

Dim wsv As WorksheetView
wsv = ActiveWindow.SheetViews.Item("Sheet1")

, а затем наберете wsv., чтобы посмотреть доступные свойства в раскрывающемся списке Intellisense, вы увидите только следующие

enter image description here

, которая не включает ничего, что могло бы сделать эквивалент свойства View для одного рабочего листа.

Потенциальный обходной путь, если рабочая книга закрыта

Зная, что настройка View отличается от одного листа к другому, Excel должен где-то хранить информацию.Это где-то XML-файл, который включен в файл Excel (доступ к нему можно получить, изменив расширение на .zip).

Например, если лист (с кодовым именем Sheet1) был сохранен в Page BreakВ режиме предварительного просмотра XML-файл для этого листа будет содержать следующее:

<sheetPr codeName="Sheet1"/><dimension ref="A1"/>
</sheetViews><sheetView tabSelected="1" view="pageBreakPreview" workbookViewId="0"/>

Итак, если вам нужно пройти через много листов и вы хотите увеличить скорость своего кода, не активируяПо одному листу за раз, вы можете закодировать что-нибудь, что закроет книгу, разархивирует ее, отредактирует XML, чтобы изменить параметры просмотра для всех листов, а затем повторно заархивирует его перед повторным открытием.Ваш код выполняется на небольшом количестве листов, это, вероятно, не стоит проблем.

0 голосов
/ 25 сентября 2019

Попробуйте это:

Set InitialWorksheet = ActiveSheet
Worksheets(2).Activate
ActiveWindow.View = xlNormalView
ActiveSheet.Cells.PageBreak = xlPageBreakNone
InitialWorksheet.Activate

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...