Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Посчитать модули, макросы, процедуры  (Прочитано 5381 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Ципихович Эндрю
Помогающий

ru
Offline Offline

« : 04-01-2011 13:15 » 


Вот скрипт, его назначение вывести информацию о модулях, макросах, их имена
Вот он мне выдал ответ:
Модуль: ThisDocument
Всего процедур в модуле ThisDocument: 0

Модуль: NewMacros
Макрос1, начало со строки 2
Макрос11, начало со строки 78
r, начало со строки 112
Всего процедур в модуле NewMacros: 3

Всего модулей в шаблоне Normal.dot: 2

Вопрос в следующем:
1. Ошибка модулей в шаблоне Normal.dot: не 2, а 1
Почему так происходит, как исправить???
2.Как ещё разграничить, отделять макросы от функций, если можно без Like, а то кто то может специально постараться, и обозвать макрос схожим именем Function, если нельзя без Like, тогда уж с ним
3.Если у макрос есть клавиши для его запуска, тоже в строке указать это и указать какие клавиши
То есть типа того:
Макрос1, начало со строки 2, назначены клавиши для запуска макроса: Альт Г

Код:
'необходимо подключить библиотеку "Microsoft Visual Basic for Applications Extensibility 5.3"
'необходимо в "Сервис" - "Макрос" - "Безопасность..." - "Надежные издатели" поставить галочку "Доверять доступ к Visual Basic Project"
'необходимо данный скрипт выполнять из шаблона
Dim cm As CodeModule 'здесь будут сохраняться тексты модулей
Dim vbc As VBComponent 'здесь будут сами модули
Dim n As Long 'для подсчёта строк в каждом модуле
Dim cmcount As Long 'для подсчёта процедур
Dim vbccount As Integer 'для подсчёта модулей
Dim msg As String 'текст сообщения
   vbccount = 0
   For Each vbc In ThisDocument.VBProject.VBComponents 'перебор всех модулей
      vbccount = vbccount + 1 'увеличение счётчиков модулей
      n = 0: cmcount = 0 'обнуление счётчиков
      msg = msg & "Модуль: " & vbc.Name & vbCr 'добавление в сообщение названия модуля
      'Selection.TypeText Text:=msg & vbCr
      Set cm = vbc.CodeModule 'выбираем код этого модуля
      n = cm.CountOfDeclarationLines + 1 'перемещяем указатель номера строки на строку, следующую за областью объявлений
      Do Until n >= cm.CountOfLines 'проверка, не вышло ли значение n за пределы модуля
         cmcount = cmcount + 1 'увеличение счётчика процедур
         msg = msg & " " & cmcount & ". " & cm.ProcOfLine(n, vbext_pk_Proc) & ", начало со строки " & n & vbCr 'добавление имени процедуры в сообщение
         'Selection.TypeText Text:=msg & vbCr
         n = n + cm.ProcCountLines(cm.ProcOfLine(n, vbext_pk_Proc), vbext_pk_Proc) 'увеличение указателя на строку на количество строк в процедуре
      Loop
      msg = msg & "Всего процедур в модуле " & vbc.Name & ": " & cmcount & vbCr & vbCr 'итог по модулю
   'Selection.TypeText Text:=msg & vbCr
   Next
   msg = msg & "Всего модулей в шаблоне " & ThisDocument.Name & ": " & vbccount
   'Selection.TypeText Text:=msg & vbCr
   MsgBox$ msg
Получил ответ
Всего модулей в шаблоне Normal.dot 2 ---- Почему их два, он один!!!!!!
Как бы ещё загнать в список имена этих шаблонов?Не понялНе понял

И ещё можно как-то организовать сообщение, вроде этого:
Макрос1, начало со строки 2, назначены клавиши для запуска макроса: Альт Г
Изменить??
И если пользователь соглашается на изменение, дать ему возможность ввести новое сочетание клавиш, только как я понимаю это надо уже делать после того как прога высчитает все сочетания клавиш для запуска макросов, а то если уже назначено например Альт Г и пользователь снова его просит сделать, надо ведь ему об этом указать, спасибо!!!!

Добавлено через 13 минут и 33 секунды:
Часть уже нашёл

KeyBindings - назначаем клавиатурные сокращения для запуска макросов
KeyBindings - возвращает коллекцию KeyBindings, которая содержит информацию о клавиатурных привязках. Это очень полезная коллекция - с её помощью можно, например, назначить клавиатурную комбинацию для запуска какого-нибудь макроса. Код ниже позволяет назначить комбинацию клавиш Alt + Shift + T макросу TextEdit, хранящемуся в модуле MyMacro шаблона Normal.Dotm

Application.CustomizationContext = NormalTemplate
Application.KeyBindings.Add _
wdKeyCategoryMacro, _
"Normal.MyMacro.TextEdit", _
BuildKeyCode(wdKeyAlt, wdKeyShift, wdKeyT)

Сначала с помощью свойства CustomizationContext мы устанавливаем место, где будет сохранена привязка. Это - шаблон Normal.Dotm. Далее мы используем метод Add коллекции KeyBindings. Мы передаем этому методу три параметра. Первый (wdKeyCategoryMacro) указывает методу на то, что мы назначаем клавиатурную комбинацию макросу. Второй -"Normal.MyMacro.TextEdit" - указывает путь к макросу, запуск которого мы назначаем клавиатурному сокращению. Третий параметр содержит вызов метода BuildKeyCode - напомню, что он генерирует код сочетания клавиш, на основе переданных ему параметров. В нашем случае он сгенерирует код для сочетания клавиш Alt + Shift + T - мы передали методу параметры wdKeyAlt, wdKeyShift и wdKeyT.
Если все сделано, верно - в частности, макрос, запуск которого мы автоматизируем, существует - после выполнения такого кода нажатие выбранного сочетания клавиш в любом активном документе приведет к запуску этого макроса.

« Последнее редактирование: 04-01-2011 13:28 от Ципихович Эндрю » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines