Неумышленное избавление от замороженных панелей (Microsoft Excel)
У Стивена есть рабочий лист с множеством строк и столбцов данных. Он заморозил первую строку и столбец, сделав активной ячейку B2, а затем заморозив панели. Это работает так, как он хочет. Он даже может сохранить и закрыть книгу, и при повторном открытии книги панели все равно останутся замороженными.
Однако, если Стивен откроет новое окно для книги (Вид | Окно | Новое окно), в новом окне не будет закрепленных панелей. Поскольку он заморозил панели на многих листах в этой книге, он должен быть очень осторожен с тем, какое окно он закроет первым. Если он сначала закроет исходное окно, то при сохранении книги сохранятся все незамороженные рабочие листы.
Стивен задается вопросом, есть ли способ заставить новое окно сохранить настройки замороженных панелей?
В Excel нет настройки, которая бы обрабатывала то, что нужно Стивену. Причина того, что замороженные панели не сохраняются, заключается в том, что FreezePanes (вместе с Zoom, Split и некоторыми другими настройками) являются свойствами окон, а не листов или книг. Когда создается новое окно, свойства не наследуются от исходного окна.
Однако вы можете обойти это поведение (и решить проблему Стивена)
с помощью макроса, который сделает настройку за вас. Очень короткий подход — отказаться от использования инструментов ленты для создания нового окна. Вместо этого добавьте этот макрос в QAT и используйте его для создания окна:
Sub CreateNewWindow1() Dim rPane As Range Set rPane = ActiveWindow.VisibleRange(1) ActiveWindow.NewWindow ActiveSheet.Range("B2").Select ActiveWindow.FreezePanes = True End Sub
Макрос создает новое окно, устанавливает количество видимых ячеек, равное тому, что показано в исходном окне, выбирает ячейку B2 в новом окне, а затем замораживает панели.
Однако этот простой подход может не работать, если ваши потребности в «замораживании панели» более разнообразны. Например, вам может понадобиться способ создать новое окно, чтобы оно соответствовало тем панелям, которые были в окне, которое было активным, когда вы создавали новое окно.
Следующий макрос проверяет, есть ли в текущем окне застекленная панель. Если это так, он определяет, где он заморожен, и использует это для установки замороженных панелей в новом окне. Если замороженных панелей нет, то все равно создается новое окно, и ничего там не заморожено. В любом случае в новом окне выбирается та же ячейка, что и в исходном.
Sub CreateNewWindow2() Dim iRow As Integer Dim iCol As Integer Dim rOldPos As Range iRow = 0 iCol = 0 If ActiveWindow.FreezePanes Then iRow = ActiveWindow.ScrollRow iCol = ActiveWindow.ScrollColumn End If Set rOldPos = ActiveCell ActiveWindow.NewWindow If (iRow > 0) And (iCol > 0) Then Cells(iRow, iCol).Select ActiveWindow.FreezePanes = True End If rOldPos.Select End Sub
Этот код, опять же, можно использовать для создания любых новых окон, которые вы хотите.
Они выполняют то, что нужно Стивену, потому что копируют закрепленные настройки панели из активного окна во вновь созданное окно.
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (13366) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365.