Закрепить строку Excel vba excel
Обновлено: 21.11.2024
Однако я хочу, чтобы строки 1 и 2 оставались видимыми при прокрутке активного рабочего листа.
У меня есть большая книга данных с несколькими листами, и только нужно закрепить область на определенных листах, а не всю книгу.
Пока коды, которые я нашел, мне не подходят .
Я новичок в VBA, поэтому буду очень признателен за помощь в решении этой проблемы (включая небольшую инструкцию, например, где разместить код — в ThisWorkbook, модуле или отдельных рабочих листах).
Заранее спасибо.
Факты об Excel
Отменить последнюю команду с помощью Ctrl+Z или Alt+Backspace. Если вы используете значок отмены в QAT, откройте стрелку раскрывающегося списка, чтобы отменить до 100 шагов.
mas123
Новый участник
wcm69
Обычная доска
Спасибо, что нашли время ответить.
Я поместил код на отдельный рабочий лист, где мне нужна область стоп-кадра. Код работает и делает то, что мне нужно, но для этого мне нужно запустить макрос .
Можете ли вы посоветовать, как я могу заставить код запускаться автоматически, т. е. активироваться, когда рабочий лист становится активным.
Мы очень ценим вашу помощь.
Заранее спасибо
mas123
Новый участник
Пожалуйста,
вы можете сделать это, поместив этот код в
эту книгу
в окне vba, нажав ALT+F11
wcm69
Обычная доска
Еще раз спасибо, что нашли время ответить и помочь мне.
Код делает то, что мне нужно, но у меня есть 2 рабочих листа в книге (страница содержания и таблица PQuery), которые я нео не хочу иметь применяется код области закрепления.
Помещение кода в рабочую книгу применило область закрепления к каждому рабочему листу в рабочей книге. Возможно, в код можно внести небольшие изменения, чтобы он применялся только к «указанным» рабочим листам. Извините, если я не совсем ясно выразился.
На самом деле у меня всего 53 рабочих листа во всей рабочей книге, поэтому я попытаюсь поместить код в отдельные рабочие листы, чтобы посмотреть, поможет ли это.
У меня есть скрипт VBA в Excel, который замораживает панели рабочего листа Excel, но мне любопытно посмотреть, возможно ли это без предварительного выбора диапазона. Вот код, который замораживает строки с 1 по 7:
9 ответов 9
Запишите себя, используя команду View ► Freeze Panes ► Freeze Top Row, и это то, что вы получите для .FreezePanes.
Поэтому изменение свойств .SplitColumn и/или .SplitRow должно делать это за вас независимо от того, какое свойство ActiveCell.
Отлично сделано! Для всех остальных обратите внимание, что значения SplitColumn/SplitRow представляют последнюю ячейку над/слева от разделения. Таким образом, чтобы заморозить строки с 1 по 7 и отделить их от строк 8, код выглядит следующим образом: With ActiveWindow .SplitColumn = 0 .SplitRow = 7 End With ActiveWindow.FreezePanes = True
Я подумал, что что-то вроде If .FreezePanes Then .FreezePanes = False может подойти в качестве первой строки внутри блока With ActiveWindow.
Можно не использовать ActiveWindow, если вместо этого вы обращаетесь к объекту Window через Application.Windows("[имя окна]"), где [имя окна] – это Workbook.Name
Код вызывает ошибку, когда вы пытаетесь заморозить и у вас активирована ячейка далеко от того места, где вы собираетесь заморозить. Я намерен заморозить первый столбец и ряд строк, и строки правильно заморожены, но для столбцов первый видимый столбец заморожен, что является произвольным. Если я затем вручную размораживаю, он остается разделенным экраном. Я попытался добавить активацию перед кодом, но это не дало никакого эффекта (вероятно, потому, что я отключил Screenupdate, чтобы ускорить мой макрос). Затем я попробовал решение, опубликованное z32a7ul, и это сработало. Я предполагаю, что разница заключается в добавлении Scroll.
С замораживанием окон можно ошибиться во многих моментах. Я добавляю свой собственный ответ, поэтому я найду его здесь, и мне не придется изобретать его в следующий раз.
- Входным параметром является верхняя левая ячейка нижней правой панели; Я думаю, что это наиболее частый вариант использования: вы знаете диапазон разделения и не заботитесь о том, в какой книге/рабочем листе/окне он находится
- Если входной параметр находится в первой строке/первой ячейке, но не в ячейке A1, то будет только две панели; A1 — это особый случай, однако Excel разделил бы окно по центру текущего вида, я предотвратил это, потому что не могу придумать ни одного случая, когда это было бы предназначено
- Он перебирает все Windows, прикрепленные к книге/листу; индексирование в Application.Windows (Windows(Thisworkbook.Name) ) не вызовет ошибки, если у вас есть несколько окон для одной и той же книги (имя будет «MyWorkbook:1») или Excel попытается (что обычно не удается) восстановить книгу после сбоя (имя будет "Моя рабочая книга [Исправлено]")
- Учитывается, что панели уже могут быть заморожены, а пользовательский/другой макрос может быть прокручен до места в книге, а верхняя левая ячейка в окне – не A1.
Я обнаружил, что предыдущие ответы работали только с некоторыми листами при циклическом просмотре вкладок. Я обнаружил, что следующий код работал на каждой вкладке, которую я просматривал (целью была одна рабочая книга), независимо от того, какая рабочая книга была активной.
Кратко:
Код в том виде, в котором он находится в моей подпрограмме: (учтите, что в этой подпрограмме я делаю намного больше форматирования, я попытался убрать это и оставить здесь только необходимый код)
Надеюсь, это сэкономит кому-то время на исследования в будущем.
Мне нужно иметь возможность правильно замораживать панели (в частности, при создании новых окон), не теряя активную ячейку или искажая видимый диапазон. Потребовалось много времени, но я думаю, что у меня есть что-то надежное, что работает:
Я знаю, что это старо, но я наткнулся на этот лакомый кусочек, который может быть полезен. как заявил ChrisB, значения SplitColumn/SplitRow представляют последнюю ячейку выше/слева от разделения, НО видимого в данный момент окна. Итак, если у вас есть такой код:
Разделение будет между строками 110 и 111 вместо 10 и 11.
отредактировано для уточнения и добавления дополнительной информации:
Я хочу сказать, что значения являются смещениями верхней левой ячейки, а не адресом ячейки. Поэтому комментарий ChrisB 04 декабря 2015, 18:34 под основным ответом действителен только в том случае, если строка 1 видна в Activewindow.
В этом учебном пособии по Excel объясняется, как закрепить панели в электронной таблице Excel и закрепить панели в Excel VBA с помощью свойства FreezePanes.
Закрепить области в электронной таблице Excel
Чтобы объяснить, как закрепить панели в Excel VBA, сначала нужно объяснить, как закрепить панели в электронной таблице Excel.
Закрепить строку
Самый распространенный вид областей закрепления – это закрепление первой строки, так как она содержит заголовок столбца. Чтобы при прокрутке таблицы вниз вы все еще могли видеть заголовок в строке 1.
Выделите строку 2, выберите "Просмотр" > "Закрепить области" > "Закрепить области"
.
Аналогичным образом вы можете закрепить строку 2, выделив строку 3 (выделите одну строку ниже закрепленной строки).
Закрепить столбец
Чтобы отображать данные все время в столбце A при прокрутке таблицы вправо, выделите столбец B и перейдите в меню «Просмотр» > «Закрепить области» > «Закрепить области»
Аналогичным образом вы можете закрепить столбцы A и B, выделив столбец C (выделите правый столбец целевого закрепленного столбца).
Закрепить строку + столбец
Чтобы одновременно закрепить столбец A и строку 1, выберите столбец B2, перейдите в меню «Просмотр» > «Закрепить области» > «Закрепить области».
На снимке экрана я выделил направление замораживания выбранной ячейки, это верхняя строка и левый столбец выбранной ячейки.
Закрепить области в Excel VBA
Подобно тому, как зафиксировать панели в электронной таблице Excel, чтобы зафиксировать панели в Excel VBA, сначала выберите ячейку, а затем установите для свойства ActiveWindow.FreezePanes значение TRUE.
Закрепить строку
Чтобы заморозить строку 1, выберите строку 2. Установка для FreezePanes значения False гарантирует, что мы сначала разморозили все активные заморозки. FreezePanes не будет работать, если FreezePanes уже есть.
Закрепить столбец
Чтобы закрепить столбец A, выберите столбец B.
Закрепить строку + столбец
Чтобы закрепить столбец A и строку 1, выберите ячейку B2.
Разморозить панели
Чтобы разморозить панели, просто установите для свойства FreezePanes значение False.
Используйте «Разделить», чтобы заморозить панели в Excel VBA
Вместо того, чтобы выбирать ячейку для определения областей закрепления, мы также можем сначала применить функцию "Разделить", а затем установить для области заморозки значение TRUE.
Блог Excel, PowerPoint и MS Word, содержащий удобные и креативные фрагменты кода VBA.Эти коды макросов хорошо прокомментированы и полностью функциональны при копировании в модуль.
Что делает этот код VBA
Я ненавижу менять местоположение области стоп-кадра, потому что для этого требуется два шага вместо одного. Сначала вам нужно удалить текущую область заморозки, а затем снова включить ее в новом предпочтительном месте. Это вдохновило меня на создание простого макроса VBA, который выполнял бы оба этих шага одним нажатием кнопки. Этот код также удалит стоп-панели, если вы запустите его с выбранным пересечением ячеек с текущими стоп-панелями (предоставив вам функцию включения/выключения). Наслаждайтесь!
Код VBA:
Затемнить CurrentFreezeLocation как строку
'Определить, где находятся текущие области закрепления (если применимо)
If ActiveWindow.FreezePanes = True Then
CurrentFreezeLocation = Cells(ActiveWindow.SplitRow + 1, ActiveWindow.SplitColumn + 1).Address
>Конец, если
'Удалить текущие области закрепления
ActiveWindow.FreezePanes = False
'Установить новое расположение областей закрепления (если применимо)
If CurrentFreezeLocation <> ActiveCell.Address Then
ActiveWindow.FreezePanes = True
End If
Как изменить это в соответствии со своими потребностями?
Возможно, это сообщение не дало вам точного ответа, который вы искали. У всех нас разные ситуации, и невозможно учесть каждую конкретную потребность, которая может возникнуть. Вот почему я хочу поделиться с вами: Мое руководство по быстрому решению ваших проблем! В этой статье я рассказываю о лучших стратегиях, которые я придумал за эти годы, чтобы получить быстрые ответы на сложные проблемы в Excel, PowerPoint, VBA, вы называете это!
Я настоятельно рекомендую вам ознакомиться с этим руководством, прежде чем просить меня или кого-либо еще в разделе комментариев решить вашу конкретную проблему. Я могу гарантировать, что в 9 случаях из 10 одна из моих стратегий даст вам ответы, которые вам нужны, быстрее, чем мне потребуется, чтобы вернуться к вам с возможным решением. Я изо всех сил стараюсь помочь всем, но иногда у меня нет времени ответить на все вопросы (кажется, часов в сутках никогда не бывает достаточно!).
Желаю вам удачи и надеюсь, что это руководство направит вас в правильном направлении!
Читайте также: