Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Закрепление областей на всех листах - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Закрепление областей на всех листах (Макросы/Sub)
Закрепление областей на всех листах
Мурад Дата: Понедельник, 25.05.2015, 11:19 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Добрый день! Подскажите, пожалуйста, как можно быстро закрепить области на всех листах? Если сгруппировать листы и закрепить область на одном листе, то это закрепление на другие листы не распространяется.
К сообщению приложен файл: 8663169.xlsx (64.7 Kb)
 
Ответить
СообщениеДобрый день! Подскажите, пожалуйста, как можно быстро закрепить области на всех листах? Если сгруппировать листы и закрепить область на одном листе, то это закрепление на другие листы не распространяется.

Автор - Мурад
Дата добавления - 25.05.2015 в 11:19
AndreTM Дата: Понедельник, 25.05.2015, 11:47 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Попробуйте, например, такой процедурой (вставить в общий модуль):
[vba]
Код
Sub freezeAll()
     Dim sh0 As Worksheet, c0 As Range
     Application.ScreenUpdating = False
     Set sh0 = ActiveSheet
     For Each sh In ThisWorkbook.Sheets
         If Val(sh.Name) > 0 Then
             sh.Activate
             Set c0 = ActiveCell
             Rows("2:2").Select
             ActiveWindow.FreezePanes = True
             c0.Select
         End If
     Next
     sh0.Activate
     Application.ScreenUpdating = True
End Sub
[/vba]


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеПопробуйте, например, такой процедурой (вставить в общий модуль):
[vba]
Код
Sub freezeAll()
     Dim sh0 As Worksheet, c0 As Range
     Application.ScreenUpdating = False
     Set sh0 = ActiveSheet
     For Each sh In ThisWorkbook.Sheets
         If Val(sh.Name) > 0 Then
             sh.Activate
             Set c0 = ActiveCell
             Rows("2:2").Select
             ActiveWindow.FreezePanes = True
             c0.Select
         End If
     Next
     sh0.Activate
     Application.ScreenUpdating = True
End Sub
[/vba]

Автор - AndreTM
Дата добавления - 25.05.2015 в 11:47
Мурад Дата: Понедельник, 25.05.2015, 11:53 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
AndreTM, вставил, запустил. Ошибок не возникает, но закрепления ни на одном листе не происходит почему-то :(
 
Ответить
СообщениеAndreTM, вставил, запустил. Ошибок не возникает, но закрепления ни на одном листе не происходит почему-то :(

Автор - Мурад
Дата добавления - 25.05.2015 в 11:53
AndreTM Дата: Понедельник, 25.05.2015, 11:58 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
А имена листов у вас точно как в примере - только "числовые"?
Иначе вам надо убрать строчки if и end if, чтобы проверка не выполнялась (или прописать в условие собственную проверку имен листов).
Тут ведь как - я предположил, что у вас, кроме этих листов, в книге и другие листы могут быть, которые закреплять не надо.

Ну и да - если у вас 2007/2010, то сохраните файл как файл с макросами (*.xlsm) и разрешите их исполнение...


Skype: andre.tm.007
Donate: Qiwi: 9517375010


Сообщение отредактировал AndreTM - Понедельник, 25.05.2015, 12:09
 
Ответить
СообщениеА имена листов у вас точно как в примере - только "числовые"?
Иначе вам надо убрать строчки if и end if, чтобы проверка не выполнялась (или прописать в условие собственную проверку имен листов).
Тут ведь как - я предположил, что у вас, кроме этих листов, в книге и другие листы могут быть, которые закреплять не надо.

Ну и да - если у вас 2007/2010, то сохраните файл как файл с макросами (*.xlsm) и разрешите их исполнение...

Автор - AndreTM
Дата добавления - 25.05.2015 в 11:58
Manyasha Дата: Понедельник, 25.05.2015, 12:01 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Вот еще пример:[vba]
Код
Sub primer()
      Application.ScreenUpdating = False
      For Each sh In ThisWorkbook.Sheets
          sh.Activate
          With ActiveWindow
              .SplitColumn = 0'номер закрепленного столбца
              .SplitRow = 1'номер закрепленной строки
          End With
              ActiveWindow.FreezePanes = True
      Next sh
      Application.ScreenUpdating = True
End Sub
[/vba]
[p.s.]Количество листов сократила, а то файл по размеру не проходит. [/p.s.]
К сообщению приложен файл: 8663169_1.xlsm (37.4 Kb)


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеВот еще пример:[vba]
Код
Sub primer()
      Application.ScreenUpdating = False
      For Each sh In ThisWorkbook.Sheets
          sh.Activate
          With ActiveWindow
              .SplitColumn = 0'номер закрепленного столбца
              .SplitRow = 1'номер закрепленной строки
          End With
              ActiveWindow.FreezePanes = True
      Next sh
      Application.ScreenUpdating = True
End Sub
[/vba]
[p.s.]Количество листов сократила, а то файл по размеру не проходит. [/p.s.]

Автор - Manyasha
Дата добавления - 25.05.2015 в 12:01
Мурад Дата: Понедельник, 25.05.2015, 12:04 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
В моей рабочей книге имена листов пронумерованы от 0 до 132. Не думал, что это влияет на работу макроса.
 
Ответить
СообщениеВ моей рабочей книге имена листов пронумерованы от 0 до 132. Не думал, что это влияет на работу макроса.

Автор - Мурад
Дата добавления - 25.05.2015 в 12:04
AndreTM Дата: Понедельник, 25.05.2015, 12:06 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Manyasha, ActiveWindow.Split* поделит само окно на части, а не закрепит области...


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеManyasha, ActiveWindow.Split* поделит само окно на части, а не закрепит области...

Автор - AndreTM
Дата добавления - 25.05.2015 в 12:06
Мурад Дата: Понедельник, 25.05.2015, 12:25 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
AndreTM, ваш второй вариант у меня также не срабатывает. Никаких изменений на листах
 
Ответить
СообщениеAndreTM, ваш второй вариант у меня также не срабатывает. Никаких изменений на листах

Автор - Мурад
Дата добавления - 25.05.2015 в 12:25
Alex_ST Дата: Понедельник, 25.05.2015, 12:37 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Всё работает.
Только надо Option Explicit использовать и все переменные "обзывать"



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Понедельник, 25.05.2015, 16:52
 
Ответить
СообщениеВсё работает.
Только надо Option Explicit использовать и все переменные "обзывать"

Автор - Alex_ST
Дата добавления - 25.05.2015 в 12:37
Manyasha Дата: Понедельник, 25.05.2015, 12:41 | Сообщение № 10
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
AndreTM, Вы правы, только что проверила. Закрепление происходит нормально, а вот если его снять вручную, лист остается разделенным.


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеAndreTM, Вы правы, только что проверила. Закрепление происходит нормально, а вот если его снять вручную, лист остается разделенным.

Автор - Manyasha
Дата добавления - 25.05.2015 в 12:41
Мурад Дата: Понедельник, 25.05.2015, 14:14 | Сообщение № 11
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Alex_ST, я открыл файл со 132 листами, вставил Option Explicit, затем сразу под ним код, который Вы написали в своем посте. Запустил - никаких изменений или ошибок, просто частое моргание экрана и все.
 
Ответить
СообщениеAlex_ST, я открыл файл со 132 листами, вставил Option Explicit, затем сразу под ним код, который Вы написали в своем посте. Запустил - никаких изменений или ошибок, просто частое моргание экрана и все.

Автор - Мурад
Дата добавления - 25.05.2015 в 14:14
AndreTM Дата: Понедельник, 25.05.2015, 14:58 | Сообщение № 12
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Ну непонятливость можнопростить. Но неумение читать...
вставить в общий модуль
К сообщению приложен файл: 10-17618-1.xls (59.0 Kb)


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеНу непонятливость можнопростить. Но неумение читать...
вставить в общий модуль

Автор - AndreTM
Дата добавления - 25.05.2015 в 14:58
Alex_ST Дата: Понедельник, 25.05.2015, 15:04 | Сообщение № 13
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
частое моргание экрана
Моргание экрана???
Это с чего бы вдруг? Ведь в начале перед циклом стоит Application.ScreenUpdating = False, а по завершении Application.ScreenUpdating = True
Ничего мигать не должно!
Я бы, правда, написАл чуть по-другому - так, чтобы границы закрепления не задавались жёстко 2:2, а определялись по выделенной на активном в момент запуска листе ячейкой (ну не люблю я процедур с прописанными в теле диапазонами), но это сути не меняет.
Код практически точно такой же, как у Андрея (AndreTM):

К стати, код Вы поместили в стандартный модуль, надеюсь, а не в модуль листа?



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Понедельник, 25.05.2015, 15:23
 
Ответить
Сообщение
частое моргание экрана
Моргание экрана???
Это с чего бы вдруг? Ведь в начале перед циклом стоит Application.ScreenUpdating = False, а по завершении Application.ScreenUpdating = True
Ничего мигать не должно!
Я бы, правда, написАл чуть по-другому - так, чтобы границы закрепления не задавались жёстко 2:2, а определялись по выделенной на активном в момент запуска листе ячейкой (ну не люблю я процедур с прописанными в теле диапазонами), но это сути не меняет.
Код практически точно такой же, как у Андрея (AndreTM):

К стати, код Вы поместили в стандартный модуль, надеюсь, а не в модуль листа?

Автор - Alex_ST
Дата добавления - 25.05.2015 в 15:04
Мурад Дата: Понедельник, 25.05.2015, 15:11 | Сообщение № 14
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Вот скриншот вставки кода и его размещения в VBA:


Сообщение отредактировал Мурад - Понедельник, 25.05.2015, 15:12
 
Ответить
СообщениеВот скриншот вставки кода и его размещения в VBA:

Автор - Мурад
Дата добавления - 25.05.2015 в 15:11
Alex_ST Дата: Понедельник, 25.05.2015, 15:20 | Сообщение № 15
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Я, к сожалению, свой файл-пример с работающим макросом выложить не могу - собаки-сисадмины не дают.
Но у Вас какие-то чудеса...
Попробуйте для начала на новом чистом файле.
А может быть это кто-то из других процедур события смены листов или пересчёт перехватывает?
Попробуйте-ка всё события запретить:



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Понедельник, 25.05.2015, 15:25
 
Ответить
СообщениеЯ, к сожалению, свой файл-пример с работающим макросом выложить не могу - собаки-сисадмины не дают.
Но у Вас какие-то чудеса...
Попробуйте для начала на новом чистом файле.
А может быть это кто-то из других процедур события смены листов или пересчёт перехватывает?
Попробуйте-ка всё события запретить:

Автор - Alex_ST
Дата добавления - 25.05.2015 в 15:20
nilem Дата: Понедельник, 25.05.2015, 15:33 | Сообщение № 16
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Мурад, похоже вставил код в Персонал. Можно и так, но тогда замените ThisWorkbook на ActiveWorkbook


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеМурад, похоже вставил код в Персонал. Можно и так, но тогда замените ThisWorkbook на ActiveWorkbook

Автор - nilem
Дата добавления - 25.05.2015 в 15:33
Manyasha Дата: Понедельник, 25.05.2015, 15:37 | Сообщение № 17
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Мурад, PERSONAL.XLSB?
Зачем туда? Вам листы Вашей книги нужно обрабатывать, вставлять код нужно в проект Вашей книги "1.ВПО.xslx".


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеМурад, PERSONAL.XLSB?
Зачем туда? Вам листы Вашей книги нужно обрабатывать, вставлять код нужно в проект Вашей книги "1.ВПО.xslx".

Автор - Manyasha
Дата добавления - 25.05.2015 в 15:37
Мурад Дата: Понедельник, 25.05.2015, 15:39 | Сообщение № 18
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Спасибо, nilem!!! Заменил This на Active и заработало :)


Сообщение отредактировал Мурад - Понедельник, 25.05.2015, 15:40
 
Ответить
СообщениеСпасибо, nilem!!! Заменил This на Active и заработало :)

Автор - Мурад
Дата добавления - 25.05.2015 в 15:39
Мурад Дата: Понедельник, 25.05.2015, 15:44 | Сообщение № 19
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Мурад, PERSONAL.XLSB?

Так я ведь чайник :)


Сообщение отредактировал Мурад - Понедельник, 25.05.2015, 15:44
 
Ответить
Сообщение
Мурад, PERSONAL.XLSB?

Так я ведь чайник :)

Автор - Мурад
Дата добавления - 25.05.2015 в 15:44
Мурад Дата: Понедельник, 25.05.2015, 15:46 | Сообщение № 20
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Спасибо огромное за терпение и старания всем! Отдельный плюс Андрею!
 
Ответить
СообщениеСпасибо огромное за терпение и старания всем! Отдельный плюс Андрею!

Автор - Мурад
Дата добавления - 25.05.2015 в 15:46
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Закрепление областей на всех листах (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!