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

Вход

Регистрация

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

 

= Мир MS Excel/Автоматизация включения макроса автонумерации в модуль листа - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Автоматизация включения макроса автонумерации в модуль листа
pashkovsky Дата: Вторник, 30.09.2014, 12:16 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 40% ±

В книге (пример прилагается) есть несколько макросов в стандартном модуле:

  • (1) макрос, чтобы изменить цвет шрифта заголовка;
  • (2) макрос, чтобы "стартовала" нумерация;
  • (3) макрос по настройке параметров страницы;
  • (4) макрос по настройке параметров страницы;
  • (5) макрос на заданию области печати.

На определенном этапе (а именно, после того, как выполним макрос 1 и изменим цвет шрифта заголовка) нужно вставить в модуль книги (термин взял из Справочник по макросам) макрос автонумерации строк (макрос взял отсюда):
[vba]
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal target As Range) 'http://www.cyberforum.ru/vba/thread225190.html
Application.EnableEvents = False
For Each oCell In Range([B2], Cells(Rows.Count, "B")).Cells
     If Not IsEmpty(oCell) Then iCount = iCount + 1: oCell.Previous = iCount
Next
Application.EnableEvents = True
End Sub
[/vba]
А потом следует продолжить выполнение следующих макросов.
Вопрос, можно ли после выполнения первого макроса автоматически вставить в модуль книги макрос автонумерации и продолжить выполнение следующих макросов?
Спасибо.
К сообщению приложен файл: report02.xls (64.5 Kb)
 
Ответить
СообщениеВ книге (пример прилагается) есть несколько макросов в стандартном модуле:

  • (1) макрос, чтобы изменить цвет шрифта заголовка;
  • (2) макрос, чтобы "стартовала" нумерация;
  • (3) макрос по настройке параметров страницы;
  • (4) макрос по настройке параметров страницы;
  • (5) макрос на заданию области печати.

На определенном этапе (а именно, после того, как выполним макрос 1 и изменим цвет шрифта заголовка) нужно вставить в модуль книги (термин взял из Справочник по макросам) макрос автонумерации строк (макрос взял отсюда):
[vba]
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal target As Range) 'http://www.cyberforum.ru/vba/thread225190.html
Application.EnableEvents = False
For Each oCell In Range([B2], Cells(Rows.Count, "B")).Cells
     If Not IsEmpty(oCell) Then iCount = iCount + 1: oCell.Previous = iCount
Next
Application.EnableEvents = True
End Sub
[/vba]
А потом следует продолжить выполнение следующих макросов.
Вопрос, можно ли после выполнения первого макроса автоматически вставить в модуль книги макрос автонумерации и продолжить выполнение следующих макросов?
Спасибо.

Автор - pashkovsky
Дата добавления - 30.09.2014 в 12:16
pashkovsky Дата: Вторник, 30.09.2014, 12:25 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 40% ±

Как запустить группу макросов нашел здесь и сделал следующий макрос:
[vba]
Код
Sub ZapustiMenja()
ЗапускНомеров
Б_НастройкиПараметровСтраницы
Б_НастройкиПараметровСтраницы
Б_ЗадатьОбластьПечатиДляВсехЛистов
End Sub
[/vba].
Но как вставить автоматически макрос в модуль книги не нашел.
 
Ответить
СообщениеКак запустить группу макросов нашел здесь и сделал следующий макрос:
[vba]
Код
Sub ZapustiMenja()
ЗапускНомеров
Б_НастройкиПараметровСтраницы
Б_НастройкиПараметровСтраницы
Б_ЗадатьОбластьПечатиДляВсехЛистов
End Sub
[/vba].
Но как вставить автоматически макрос в модуль книги не нашел.

Автор - pashkovsky
Дата добавления - 30.09.2014 в 12:25
Rioran Дата: Вторник, 30.09.2014, 13:58 | Сообщение № 3
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
pashkovsky, здравствуйте.

Можно посмотреть здесь как программируются объекты VBA редактора. Попробуйте поковырять раздел "Adding A Procedure To A Module". Статья на английском.

Плюс Вам нужно будет в настройках безопасности разрешить программный доступ к модели VBA.


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279


Сообщение отредактировал Rioran - Вторник, 30.09.2014, 14:01
 
Ответить
Сообщениеpashkovsky, здравствуйте.

Можно посмотреть здесь как программируются объекты VBA редактора. Попробуйте поковырять раздел "Adding A Procedure To A Module". Статья на английском.

Плюс Вам нужно будет в настройках безопасности разрешить программный доступ к модели VBA.

Автор - Rioran
Дата добавления - 30.09.2014 в 13:58
pashkovsky Дата: Вторник, 30.09.2014, 16:24 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 40% ±

К сожалению, пока ничего не понял.
Подозреваю, что нужно вставлять vbext_ct_Document.
Будем читать дальше.
 
Ответить
СообщениеК сожалению, пока ничего не понял.
Подозреваю, что нужно вставлять vbext_ct_Document.
Будем читать дальше.

Автор - pashkovsky
Дата добавления - 30.09.2014 в 16:24
RAN Дата: Вторник, 30.09.2014, 17:02 | Сообщение № 5
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
А зачем вообще это нужно? Может есть путь проще? Или "мы не ищем простых путей"? ;)


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеА зачем вообще это нужно? Может есть путь проще? Или "мы не ищем простых путей"? ;)

Автор - RAN
Дата добавления - 30.09.2014 в 17:02
pashkovsky Дата: Вторник, 30.09.2014, 18:42 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 40% ±

Может и есть путь более простой.
Но я нашел только один работающий макрос для автоматической нумерации и тот вставляется только в модуль книги:
[vba]
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal target As Range) 'http://www.cyberforum.ru/vba/thread225190.html
Application.EnableEvents = False
For Each oCell In Range([B2], Cells(Rows.Count, "B")).Cells
     If Not IsEmpty(oCell) Then iCount = iCount + 1: oCell.Previous = iCount
Next
Application.EnableEvents = True
End Sub
[/vba]
 
Ответить
СообщениеМожет и есть путь более простой.
Но я нашел только один работающий макрос для автоматической нумерации и тот вставляется только в модуль книги:
[vba]
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal target As Range) 'http://www.cyberforum.ru/vba/thread225190.html
Application.EnableEvents = False
For Each oCell In Range([B2], Cells(Rows.Count, "B")).Cells
     If Not IsEmpty(oCell) Then iCount = iCount + 1: oCell.Previous = iCount
Next
Application.EnableEvents = True
End Sub
[/vba]

Автор - pashkovsky
Дата добавления - 30.09.2014 в 18:42
pashkovsky Дата: Вторник, 30.09.2014, 18:57 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 40% ±

Переделал немного макрос из приватного в публичный.
Получилось:
[vba]
Код
Sub Workbook_SheetChange() 'http://www.cyberforum.ru/vba/thread225190.html
Dim Sh As Worksheet
'    For Each Sh In Sheets
For Each oCell In Range([B2], Cells(Rows.Count, "B")).Cells
     If Not IsEmpty(oCell) Then iCount = iCount + 1: oCell.Previous = iCount
Next
End Sub
[/vba]
Но нумерация вставляется только в активный лист, в другие - нет.
Как можно распространить действие макроса на другие листы?
К сообщению приложен файл: report03.xls (72.5 Kb)
 
Ответить
СообщениеПеределал немного макрос из приватного в публичный.
Получилось:
[vba]
Код
Sub Workbook_SheetChange() 'http://www.cyberforum.ru/vba/thread225190.html
Dim Sh As Worksheet
'    For Each Sh In Sheets
For Each oCell In Range([B2], Cells(Rows.Count, "B")).Cells
     If Not IsEmpty(oCell) Then iCount = iCount + 1: oCell.Previous = iCount
Next
End Sub
[/vba]
Но нумерация вставляется только в активный лист, в другие - нет.
Как можно распространить действие макроса на другие листы?

Автор - pashkovsky
Дата добавления - 30.09.2014 в 18:57
RAN Дата: Вторник, 30.09.2014, 19:15 | Сообщение № 8
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Но я нашел только один работающий макрос для автоматической нумерации и тот вставляется только в модуль книги:

И что? Зачем его кодом вставлять?


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Но я нашел только один работающий макрос для автоматической нумерации и тот вставляется только в модуль книги:

И что? Зачем его кодом вставлять?

Автор - RAN
Дата добавления - 30.09.2014 в 19:15
pashkovsky Дата: Вторник, 30.09.2014, 20:58 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 40% ±

И что? Зачем его кодом вставлять?

Согласен.
1) чтобы не забыть вовремя вставить код в разрыв других выполняемых макросов;
2) думал, что есть простое решение.
 
Ответить
Сообщение
И что? Зачем его кодом вставлять?

Согласен.
1) чтобы не забыть вовремя вставить код в разрыв других выполняемых макросов;
2) думал, что есть простое решение.

Автор - pashkovsky
Дата добавления - 30.09.2014 в 20:58
RAN Дата: Вторник, 30.09.2014, 21:07 | Сообщение № 10
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
1) чтобы не забыть вовремя вставить код в разрыв других выполняемых макросов;

А если на русский перевести, что получится?


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
1) чтобы не забыть вовремя вставить код в разрыв других выполняемых макросов;

А если на русский перевести, что получится?

Автор - RAN
Дата добавления - 30.09.2014 в 21:07
pashkovsky Дата: Вторник, 30.09.2014, 21:33 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 40% ±

А если на русский перевести, что получится?

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

Я предполагал вставлять автонумерацию после предварительного форматирования таблицы с помощью макросов.
Можно вручную вставлять указанный макрос.
Но тогда придется делить остальные макросы на две группы - до вставки автонумерации и после.
Вот такая была идея.

Автор - pashkovsky
Дата добавления - 30.09.2014 в 21:33
RAN Дата: Вторник, 30.09.2014, 21:37 | Сообщение № 12
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Вставка макроса и запуск (выполнение) макроса - совершенно разные вещи. Вам что нужно?


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеВставка макроса и запуск (выполнение) макроса - совершенно разные вещи. Вам что нужно?

Автор - RAN
Дата добавления - 30.09.2014 в 21:37
pashkovsky Дата: Вторник, 30.09.2014, 21:52 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 40% ±

что нужно?

Нужно, чтобы указанный макрос на определенном этапе форматирования книги вставлялся в Модуль книги и выполнялся, а после этого продолжали выполняться другие макросы.
В приложенном файле видно, когда именно планировалась вставка макроса и его выполнение.
К сообщению приложен файл: 8940125.xls (64.5 Kb)
 
Ответить
Сообщение
что нужно?

Нужно, чтобы указанный макрос на определенном этапе форматирования книги вставлялся в Модуль книги и выполнялся, а после этого продолжали выполняться другие макросы.
В приложенном файле видно, когда именно планировалась вставка макроса и его выполнение.

Автор - pashkovsky
Дата добавления - 30.09.2014 в 21:52
Alex_ST Дата: Вторник, 30.09.2014, 22:29 | Сообщение № 14
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3219
Репутация: 622 ±
Замечаний: 0% ±

2003
[vba]
Код
Sub Нумерация()
     Dim Sh As Worksheet, rCell As Range, lCount&
     Application.EnableEvents = False
     For Each Sh In Sheets
     lCount = 0
         For Each rCell In Sh.Range("B2", Sh.Cells(Rows.Count, "B").End(xlUp))
             If Not IsEmpty(rCell) Then lCount = lCount + 1: rCell.Offset(0, -1) = lCount
         Next rCell
     Next Sh
     Application.EnableEvents = True
End Sub
[/vba]



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение[vba]
Код
Sub Нумерация()
     Dim Sh As Worksheet, rCell As Range, lCount&
     Application.EnableEvents = False
     For Each Sh In Sheets
     lCount = 0
         For Each rCell In Sh.Range("B2", Sh.Cells(Rows.Count, "B").End(xlUp))
             If Not IsEmpty(rCell) Then lCount = lCount + 1: rCell.Offset(0, -1) = lCount
         Next rCell
     Next Sh
     Application.EnableEvents = True
End Sub
[/vba]

Автор - Alex_ST
Дата добавления - 30.09.2014 в 22:29
RAN Дата: Вторник, 30.09.2014, 22:38 | Сообщение № 15
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Проблема не стоит высиженного яйца
[vba]
Код
Sub КрасимЗаголовок()
     Dim Sh As Worksheet
     For Each Sh In Sheets
         Sh.Range("A1:P1").Font.ColorIndex = 3
         Set r = Sh.Range(Sh.Cells(2, "B"), Sh.Cells(Rows.Count, "B").End(xlUp)).Offset(, -1)
         r.FormulaLocal = "=СТРОКА()-1"
         r.Value = r.Value
         Set r = Nothing
     Next
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеПроблема не стоит высиженного яйца
[vba]
Код
Sub КрасимЗаголовок()
     Dim Sh As Worksheet
     For Each Sh In Sheets
         Sh.Range("A1:P1").Font.ColorIndex = 3
         Set r = Sh.Range(Sh.Cells(2, "B"), Sh.Cells(Rows.Count, "B").End(xlUp)).Offset(, -1)
         r.FormulaLocal = "=СТРОКА()-1"
         r.Value = r.Value
         Set r = Nothing
     Next
End Sub
[/vba]

Автор - RAN
Дата добавления - 30.09.2014 в 22:38
Alex_ST Дата: Вторник, 30.09.2014, 22:39 | Сообщение № 16
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3219
Репутация: 622 ±
Замечаний: 0% ±

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

Да и использование не документированного для объекта Range свойства .Previous чревато неожиданными последствиями. Это свойство документировано только для примечаний (объектов Comment). А для Range надо использовать свойство .Offset.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение
Нужно, чтобы указанный макрос на определенном этапе форматирования книги вставлялся в Модуль книги и выполнялся
А вот это вообще полная чушь!
Вы хоть сами понимаете, о чём пишете? При чём здесь модуль книги?

Да и использование не документированного для объекта Range свойства .Previous чревато неожиданными последствиями. Это свойство документировано только для примечаний (объектов Comment). А для Range надо использовать свойство .Offset.

Автор - Alex_ST
Дата добавления - 30.09.2014 в 22:39
pashkovsky Дата: Среда, 01.10.2014, 16:46 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 40% ±

Проблема не стоит высиженного яйца

Большущее спасибо! Заработало как надо.
А вот это вообще полная чушь!
Вы хоть сами понимаете, о чём пишете?

Не очень.
Занялся макросами дня три-четыре назад.
Поэтому прошу прощение за некорректные вопросы.
Спасибо за помощь.
 
Ответить
Сообщение
Проблема не стоит высиженного яйца

Большущее спасибо! Заработало как надо.
А вот это вообще полная чушь!
Вы хоть сами понимаете, о чём пишете?

Не очень.
Занялся макросами дня три-четыре назад.
Поэтому прошу прощение за некорректные вопросы.
Спасибо за помощь.

Автор - pashkovsky
Дата добавления - 01.10.2014 в 16:46
  • Страница 1 из 1
  • 1
Поиск:

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