0 / 0 / 0 Регистрация: 17.10.2011 Сообщений: 3 |
|
1 |
|
17.10.2011, 17:48. Показов 24480. Ответов 8
Подскажите, как с помощью VB установить закрепление областей в Excel.
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
17.10.2011, 17:48 |
8 |
Tsvet 3 / 3 / 0 Регистрация: 08.09.2011 Сообщений: 111 |
||||
17.10.2011, 18:14 |
2 |
|||
В принципе и макрорекодер может помочь справиться с этой задачей, типа вот так:
Чтобы снять закрепление — ActiveWindow.FreezePanes = False
0 |
Tsvet 3 / 3 / 0 Регистрация: 08.09.2011 Сообщений: 111 |
||||
17.10.2011, 18:33 |
3 |
|||
Сорри, не дописал
0 |
0 / 0 / 0 Регистрация: 17.10.2011 Сообщений: 3 |
|
17.10.2011, 18:43 [ТС] |
4 |
спасибо. попробую.
0 |
Сумрак |
|
17.10.2011, 18:52 |
5 |
хех.. нужно явно указывать сколько строк или столбцов.А то она на 4 части экран поделит. |
viper-x 65 / 22 / 7 Регистрация: 28.02.2018 Сообщений: 211 |
||||||||
21.02.2022, 16:25 |
6 |
|||||||
Сумрак, а как это сделать?
и
делает вроде как одно и то же …или нет?
0 |
810 / 465 / 180 Регистрация: 09.03.2009 Сообщений: 1,577 |
|
21.02.2022, 16:43 |
7 |
Код делает одно и то же. With пишется, когда с одним объектом много действий. Меньше писать и выше скорость, потому что эксель уже знает, кого «дергать».
0 |
viper-x 65 / 22 / 7 Регистрация: 28.02.2018 Сообщений: 211 |
||||||||||||
22.02.2022, 08:46 |
8 |
|||||||||||
Я пытаюсь закрепить области выше и левее ячейки B2
производит разделение экрана в этом месте,
Код же
закрепляет и снимает закрепление экрана,
0 |
Punkt5 малоболт 1143 / 442 / 193 Регистрация: 30.01.2020 Сообщений: 1,095 |
||||
22.02.2022, 10:13 |
9 |
|||
Можно ли обойтись без лишнего Select? Можно. Достаточно объединить оба ваших куска кода:
0 |
Закрепление областей на всех листах |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Мартын Пользователь Сообщений: 282 |
Доброе время всем! |
Ivan.kh Пользователь Сообщений: 2024 |
Отключите обновление экрана, и ничего мелькать не будет, а в конце вкл. его |
vikttur Пользователь Сообщений: 47199 |
FreezePanes работает только с активным листом… |
Мартын Пользователь Сообщений: 282 |
#4 27.09.2017 15:10:11
Была такая мысль, но это-же кривые костыли. Должен быть прямой путь, не могли-же мелкомягкие так «тормознуть».
Вот так и умирают мечты…. |
||||
Ivan.kh Пользователь Сообщений: 2024 |
#5 27.09.2017 15:15:13
с чего это вдруг. |
||
vikttur Пользователь Сообщений: 47199 |
#6 27.09.2017 15:17:47
Это только предположение, дополнение к зачеркнутому. Не проверял досконально. Может, и есть решение без активации листа…
Не нужно глупостью называть то, чего не знаете… Возможно, для этого есть свои причины. Ведь не только этот параметр, но и другие нельзя менять без активации листа. И то, что нельзя сделать так, как нужно именно Вам — не глупость. |
||||
Hugo Пользователь Сообщений: 23251 |
#7 27.09.2017 15:18:36
— почему? Недооцениваете |
||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#8 27.09.2017 17:32:36
Да, в XML-схеме файла. Но достучаться до неё при открытом файле невозможно, да и в закрытом я бы не стал туда лезть только для того, чтобы закрепить область. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
z-f-s Пользователь Сообщений: 20 |
#9 09.04.2020 18:46:01 Да, с закреплением в Excel чудеса! Удалось заставить работать закрепление таким вот странным кодом:
Изменено: z-f-s — 09.04.2020 18:47:14 |
||
DAG Пользователь Сообщений: 2 |
#10 06.11.2020 22:32:48
Добрый день! Весьма вероятно что это так. |
||
все эти вопросы решаются эмпирическим путем или еще метод: Изменено: Ігор Гончаренко — 06.11.2020 23:34:54 Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
|
Hugo Пользователь Сообщений: 23251 |
#12 07.11.2020 10:44:23 Кстати вот тоже вспомнил, что работает только через ActiveWindow:
|
||
sokol92 Пользователь Сообщений: 4445 |
#13 07.11.2020 13:00:55
Свойство FreezePanes относится к окну, а не к рабочему листу. Если Вы откроете книгу, состоящую из двух (видимых) листов, то книга будет иметь одно окно:
Если через Меню/Вид/Новое окно добавить второе окно и отображать в окнах разные листы, то тогда можно управлять свойствами FreezePanes этих окон без предварительного активирования. Изменено: sokol92 — 07.11.2020 13:04:47 Владимир |
||||
Содержание
- VBA — стоп-кадры
- Заморозить панели с помощью VBA
- Принудительное сохранение рабочей книги без закрепления панелей
- Excel VBA freeze panes using FreezePanes property
- Freeze Panes in Excel spreadsheet
- Freeze Row
- Freeze Column
- Freeze Row + Column
- Freeze Panes in Excel VBA
- Freeze Row
- Freeze Column
- Freeze row + column
- Unfreeze Panes
- Use Split to freeze Panes in Excel VBA
- Vba excel freezepanes закрепить области
- Как применить заморозить / разморозить панели сразу к нескольким листам?
- Примените Freeze Panes ко всем листам одновременно с кодом VBA
- Примените Unfreeze Panes ко всем листам сразу с кодом VBA
- Примените замораживание / разморозить панели ко всем рабочим листам сразу одним щелчком мыши с помощью Kutools for Excel
- How can I programmatically freeze the top row of an Excel worksheet in Excel 2007 VBA?
- 6 Answers 6
- VBA – Freeze Panes
- Freeze Panes Using VBA
- Force Workbook to Save Without Freeze Panes
- VBA Coding Made Easy
- VBA Code Examples Add-in
VBA — стоп-кадры
Заморозить панели с помощью VBA
Недавно я писал о замораживании панелей в Excel, вот как это можно сделать с помощью VBA:
Заморозить строки
Закрепить столбцы
Закрепить строки и столбцы
Панели UnFreeze
Принудительное сохранение рабочей книги без закрепления панелей
Excel позволяет нам управлять вещами через события. Эта статья не является подробным описанием событий или их особенностей. Вместо этого он дает пример события WorkBook. Это события, которые проводятся на уровне книги, а не на конкретном листе.
С помощью VBA мы можем контролировать, что происходит при определенных событиях, например, перед печатью или перед сохранением. Одна из распространенных проблем, с которыми я сталкиваюсь, заключается в том, что ряду людей, с которыми я работаю, не нравятся файлы с фиксированными панелями.
Итак, в этой статье мы соберем код, который будет проверять, включены ли Freeze Panes, и если да, то файл не будет сохранен. Это означает, что мне нужно сохранить его без замораживания — чтобы мои коллеги были довольны !!
Самое важное в событиях книги — это то, что они должны сохраняться в правильном месте — на уровне книги.
Чтобы получить доступ к уровню книги, выполните следующие действия:
1. Щелкните правой кнопкой мыши книгу Excel — просмотрите код:
3. Дважды щелкните «Эта книга», а затем выберите «Рабочая книга» в первом раскрывающемся списке слева:
Мы видим, что значение слева теперь изменилось на «Открыть» — с некоторым кодом для события открытия книги. Этот код позволит нам определить, что происходит, когда книга открывается в первый раз.
Однако мы хотим контролировать, что происходит, когда мы сохраняем книгу. Поэтому измените правое раскрывающееся меню на «Перед сохранением». Экран теперь будет выглядеть так:
Теперь мы вставляем следующий код после объявления:
Итак, теперь полный код выглядит так:
Теперь сохраните файл и ЗАТЕМ активируйте Freeze Panes в любом окне. Затем — ВОССТАНОВИТЕ файл. Появится сообщение о том, что «Freeze Panes» включен — и файл не сохранен.
Действительно, файл не будет сохранен, пока не будут удалены области замораживания.
Источник
Excel VBA freeze panes using FreezePanes property
This Excel tutorial explains how to freeze panes in Excel spreadsheet and freeze panes in Excel VBA using FreezePanes property.
Freeze Panes in Excel spreadsheet
To explain how to freeze panes in Excel VBA, first I have to explain how to freeze panes in Excel spreadsheet.
Freeze Row
The most common kind of freeze panes is to freeze the first row as it contains the header of the column. So that when you scroll down the spreadsheet, you can still see the header in row 1.
Highlight row 2, navigate to View > Freeze Panes > Freeze Panes
Similarly, you can freeze row 2 by highlighting row 3 (highlight one row down the frozen row).
Freeze Column
To display data all the time in column A when you scroll to the right of the spreadsheet, highlight column B, , navigate to View > Freeze Panes > Freeze Panes
Similarly, you can freeze column A and B by highlighting column C (highlight the right column of the target frozen column).
Freeze Row + Column
To freeze column A and row 1 at the same time, select column B2, navigate to View > Freeze Panes > Freeze Panes
In the screenshot, I have highlighted the direction of freeze of a selected cell, it is the top row and left column of a selected Cell.
Freeze Panes in Excel VBA
Similar to freeze panes in Excel spreadsheet, to freeze panes in Excel VBA, select a Cell first, then set ActiveWindow.FreezePanes Property to TRUE.
Freeze Row
To freeze row 1, select Row 2. Setting FreezePanes to False is to ensure that we have unfrozen any active freezePanes first. FreezePanes won’t work if there is already a FreezePanes.
Freeze Column
To freeze column A, select column B.
Freeze row + column
To freeze column A and row 1, select Cell B2.
Unfreeze Panes
To unfreeze panes, simply set the FreezePanes Property to False.
Use Split to freeze Panes in Excel VBA
Instead of selecting a Cell to determine the freeze panes, we can also apply Split first, and then Set FreezePanes to TRUE.
Источник
Vba excel freezepanes закрепить области
Как применить заморозить / разморозить панели сразу к нескольким листам?
Предположим, у вас есть большая книга, содержащая сотни рабочих листов, и теперь вам нужно применить Freeze Panes, чтобы заморозить все рабочие листы сразу. С помощью функции замораживания панелей Excel вы можете просто заморозить только один рабочий лист за раз. Есть ли способ сразу заморозить или разморозить все листы в Excel?
Примените Freeze Panes ко всем листам одновременно с кодом VBA
Вы можете использовать следующий код, чтобы применить закрепленные области ко всем рабочим листам, выполните следующие действия:
1. Если вы хотите зафиксировать все листы в одном месте, выберите ячейку, которую вы хотите зафиксировать на листе, а затем удерживайте Shift клавишу, чтобы выбрать все вкладки листа.
2. Удерживайте ALT + F11 ключи, и он открывает Окно Microsoft Visual Basic для приложений.
3. Нажмите Вставить > Модулии вставьте следующий код в Окно модуля.
Код VBA: заморозить сразу все листы в Excel
4, Затем нажмите F5 для запуска этого кода, и все рабочие листы были применены с закрепленными панелями в одном и том же положении.
Примечание: Если все листы не выбраны, а активные ячейки каждого листа расположены в разных местах, закрепленные области будут в разных местах, как и активные ячейки.
Примените Unfreeze Panes ко всем листам сразу с кодом VBA
Если к закрепленным областям в Excel применяется несколько листов, как вы могли бы размораживать их одновременно, кроме как размораживать их по одному?
1. Запустите книгу, листы которой были применены с закрепленными панелями.
2. Удерживайте ALT + F11 ключи, и он открывает Окно Microsoft Visual Basic для приложений.
3. Нажмите Вставить > Модулии вставьте следующий код в Окно модуля.
Код VBA: разблокировать сразу все листы в Excel
4, Затем нажмите F5 ключ для запуска этого кода, и все рабочие листы, которые применялись с закрепленными панелями, были разморожены сразу.
Примените замораживание / разморозить панели ко всем рабочим листам сразу одним щелчком мыши с помощью Kutools for Excel
Если вы не знакомы с кодами VBA, вот мощный инструмент: Kutools for Excel, Его Закрепить области нескольких листов и Разморозить панели нескольких листов Утилиты могут помочь вам заморозить или разморозить сразу все рабочие листы текущей книги.
Примечание: Чтобы применить это Закрепить области нескольких листов, во-первых, вы должны скачать Kutools for Excel, а затем быстро и легко примените эту функцию.
После установки Kutools for Excel, пожалуйста, сделайте так:
1. Выберите ячейку, в которой вы хотите применить панель замораживания для всех листов, в этом случае я нажимаю ячейку B2, см. Снимок экрана:
2. Затем нажмите Кутулс Плюс > Рабочий лист > Закрепить области нескольких листов, см. снимок экрана:
3. И затем ко всем вашим рабочим листам были применены закрепленные области в том же месте ячейки B2.
Внимание: Если вы хотите немедленно разморозить их, вам просто нужно применить функцию Разморозить панели для нескольких листов, нажав Кутулс Плюс> Рабочий лист > Разморозить панели нескольких листов.
Источник
How can I programmatically freeze the top row of an Excel worksheet in Excel 2007 VBA?
I am looking to programmatically freeze the top row of an Excel worksheet from VBA. The end goal is to produce the same effect as the View > Freeze Panes > Freeze Top Row command in Excel 2007 so that the top row of the worksheet is frozen and users can see the top row of the worksheet even as they scroll through the data.
6 Answers 6
Select a different range for a different effect, much the same way you would do manually. The «Freeze Top Row» really just is a shortcut new in Excel 2007 (and up), it contains no added functionality compared to earlier versions of Excel.
Tomalak already gave you a correct answer, but I would like to add that most of the times when you would like to know the VBA code needed to do a certain action in the user interface it is a good idea to record a macro.
In this case click Record Macro on the developer tab of the Ribbon, freeze the top row and then stop recording. Excel will have the following macro recorded for you which also does the job:
The problem with the recorded macro is the same as the problem with the built-in action: Excel chooses to freeze the top visible row, rather than the actual top row where the header information can be found.
The purpose of a macro in this case is to freeze the actual top row. When I am viewing row #405592 and I need to check the header for the column (because I forgot to freeze rows when I opened the file), I have to scroll to the top, freeze the top row, then find my way back to row #405592 again. Since I believe this is stupid behavior, I want a macro to correct it, but, like I said, the recorded macro just mimics the same stupid behavior.
Источник
VBA – Freeze Panes
In this Article
Freeze Panes Using VBA
I recently posted on Freezing panes in Excel, here’s how you can do it using VBA:
Freeze Rows and Columns
Force Workbook to Save Without Freeze Panes
Excel lets us control things through events. This article isn’t a detail discussion on what events are or their features. Instead it gives an example of a WorkBook Event. These are events that are held at the workbook level rather than a particular worksheet.
Through VBA we can control what happens at certain events such as before printing or before saving. One common problem that I face is that a number of people I work with don’t like files with Freeze Panes on them.
So in this article, we will put together some code that will check if Freeze Panes is on and if so, it won’t save the file. This means that I have to save it without freeze panes – keeping my colleagues happy !!
The most important thing about workbook events is that they should be saved in the correct place – at the workbook level.
To access the workbook level, follow the steps below:
1. Right click on an Excel workbook – view code:
2. This will bring up:
3. Double click on “This Workbook” and then select “WorkBook” from the first drop down on the left hand side:
We see that the value on the left hand side has now changed to “Open” – with some code for the Workbook Open Event. This code will let us determine what happens when the workbook opens for the first time.
However we want to control what happens when we save the workbook. So change the right hand drop down to “Before Save” . The screen will now look like:
We now insert the following code after the declaration:
So that the complete code now looks like:
Now save the file and THEN activate Freeze Panes in any window. Then – RESAVE the file. A msgbox will appear stating that “Freeze Panes” is on – and the file is not saved.
Indeed the file will not save until Freeze Panes is removed.
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro – A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
VBA Code Examples Add-in
Easily access all of the code examples found on our site.
Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.
Источник
Я хочу программно заморозить верхнюю строку листа Excel из VBA. Конечная цель — добиться того же эффекта, что и команда View > Freeze Panes > Freeze Top Row
в Excel 2007, чтобы верхняя строка рабочего листа была заморожена, и пользователи могли видеть верхнюю строку рабочего листа даже при прокрутке данных.
6 ответов
Лучший ответ
Rows("2:2").Select
ActiveWindow.FreezePanes = True
Выберите другой диапазон для другого эффекта, почти так же, как вы делаете это вручную. «Закрепить верхнюю строку» — это новый ярлык, появившийся в Excel 2007 (и выше), он не содержит дополнительных функций по сравнению с более ранними версиями Excel.
45
Tomalak
29 Июл 2015 в 18:11
Проблема с записанным макросом такая же, как и со встроенным действием: Excel выбирает закрепить верхнюю видимую строку, а не фактическую верхнюю строку, в которой можно найти информацию заголовка.
Цель макроса в этом случае — заморозить фактическую верхнюю строку. Когда я просматриваю строку №405592 и мне нужно проверить заголовок столбца (потому что я забыл заморозить строки при открытии файла), мне нужно прокрутить вверх, заморозить верхнюю строку, а затем вернуться к строка # 405592 снова. Поскольку я считаю это глупым поведением, я хочу, чтобы макрос исправил его, но, как я уже сказал, записанный макрос просто имитирует такое же глупое поведение.
Я использую Office 2011 для Mac OS X Lion
Обновление (через 2 минуты):
Я нашел решение здесь: http://www.ozgrid.com/forum/showthread.php?t= 19692
Dim r As Range
Set r = ActiveCell
Range("A2").Select
With ActiveWindow
.FreezePanes = False
.ScrollRow = 1
.ScrollColumn = 1
.FreezePanes = True
.ScrollRow = r.Row
End With
r.Select
14
Dannid
13 Июл 2012 в 02:05
Просто нажмите на ту же проблему … По какой-то причине команда freezepanes просто вызвала появление перекрестия в центре экрана. Оказывается, я отключил ScreenUpdating! Решено с помощью следующего кода:
Application.ScreenUpdating = True
Cells(2, 1).Select
ActiveWindow.FreezePanes = True
Теперь работает нормально.
9
Tom M
14 Окт 2013 в 18:48
Чтобы расширить этот вопрос до области использования за пределами Excel собственного VBA, свойство ActiveWindow должно обращаться как дочерний по отношению к объекту Excel.Application.
Пример создания книги Excel из Access:
Использование объекта Excel.Application в проекте VBA другого приложения Office приведет к требуется добавить библиотеку объектов Microsoft Excel 15.0 (или эквивалентную для вашей собственной версии).
Option Explicit
Sub xls_Build__Report()
Dim xlApp As Excel.Application, ws As Worksheet, wb As Workbook
Dim fn As String
Set xlApp = CreateObject("Excel.Application")
xlApp.DisplayAlerts = False
xlApp.Visible = True
Set wb = xlApp.Workbooks.Add
With wb
.Sheets(1).Name = "Report"
With .Sheets("Report")
'report generation here
End With
'This is where the Freeze Pane is dealt with
'Freezes top row
With xlApp.ActiveWindow
.SplitColumn = 0
.SplitRow = 1
.FreezePanes = True
End With
fn = CurrentProject.Path & "ReportsReport_" & Format(Date, "yyyymmdd") & ".xlsx"
If CBool(Len(Dir(fn, vbNormal))) Then Kill fn
.SaveAs FileName:=fn, FileFormat:=xlOpenXMLWorkbook
End With
Close_and_Quit:
wb.Close False
xlApp.Quit
End Sub
Основной процесс — это просто повторение ранее представленных ответов, но я подумал, что важно продемонстрировать, как работать с ActiveWindow, когда вы не находитесь в собственном VBA Excel. Хотя здесь используется код VBA, его следует напрямую транслировать на другие языки и платформы.
Rows("2:2").Select
ActiveWindow.FreezePanes = True
Это самый простой способ заморозить верхний ряд. Правило для FreezePanes
— заморозить верхний левый угол выбранной вами ячейки. Например, если вы выделите C10, он остановится между столбцами B и C, строками 9 и 10. Поэтому, когда вы выделите строку 2, он фактически остановится между строками 1 и 2, которые являются верхней строкой.
Кроме того, .SplitColumn
или .SplitRow
разделят ваше окно, как только вы его разморозите, что мне не нравится.
3
ian0411
23 Авг 2017 в 20:40
Томалак уже дал вам правильный ответ, но я хотел бы добавить, что в большинстве случаев, когда вы хотите узнать код VBA, необходимый для выполнения определенного действия в пользовательском интерфейсе, рекомендуется записать макрос.
В этом случае нажмите Запись макроса на вкладке разработчика на ленте, зафиксируйте верхнюю строку и остановите запись. В Excel будет записан следующий макрос, который также выполняет эту работу:
With ActiveWindow
.SplitColumn = 0
.SplitRow = 1
End With
ActiveWindow.FreezePanes = True
22
Dirk Vollmar
13 Июл 2010 в 03:09