Мартын Пользователь Сообщений: 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 Пользователь Сообщений: 23252 |
#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 Пользователь Сообщений: 23252 |
#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 Владимир |
||||
Я хочу программно заморозить верхнюю строку листа 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
0 / 0 / 0 Регистрация: 17.10.2011 Сообщений: 3 |
|
1 |
|
17.10.2011, 17:48. Показов 24517. Ответов 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 |
811 / 465 / 181 Регистрация: 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 |
|
|||||||||||||||||||||||||
|
Закрепление областей на всех листах |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |