Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2011, 17:00   #1
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,034
По умолчанию Обращаюсь к выделенному меню

в одном документе Ворда есть созданное мною меню
что-то с сегодняшнего дня нажимая на меню стал получать ошибку Object required - требуется объект
Код пошагово проверить нельзя из-за этой строки, видимо в ней и проблема
Код:
	'уточняем какой пункт меню нажат
    If Application.CommandBars.ActionControl.Caption = "&1 щит" Then
Так как я не могу и выделить меню и проходить код одновременно
Что за объект нужен, как узнать??
Забыл сказать, так происходит один раз, затем снова нажимаю на это же меню и магическим образом откуда-то недостающий объект появляется, так как ошибки нет
Как лечить?? Спасибо
Ципихович Эндрю вне форума Ответить с цитированием
Старый 02.09.2011, 06:34   #2
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Скорее всего ошибку вызывает ActionControl, которая возвращает или объект CommandBarControl, вызвавший запуск процидуры, или Nothing, если процедура запущена другим способом. Можно добавить проверку if ...ActionControl Is Nothing Then ... Можно обращаться напрямую к элементу меню, ведь известно, что нажато и где.

Вообще, код выдран из контекста, что-то советовать трудно!
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 02.09.2011, 13:06   #3
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,034
По умолчанию

весь этот сыр бор только из-за того, что я лично не умею для меню подсказки сделать в нужном мне тексте, то есть с пробелами
Так бы я написал
Перейти к а
Перейти к б
......
И не мучился
Посему они у меня все 6 штук как Перейти
Удивляет, что месяц было всё ОК
код:
Код:
Sub Перейти()
 
'отключаем дёргание экрана при выполнении кода
    Application.ScreenUpdating = False
 
    If ActiveDocument.Lists.Count <> 8 Then
        MsgBox$ _
                "Количество списков в документе: " & ActiveDocument.Lists.Count & Chr$(13) & _
                                                   "Для выполнения программы в документе должно быть 8  списков", vbOKOnly, _
                                                   "Внимание"
 
        'перейти к метке с именем ...
        GoTo Конец
 
    End If
 
    'уточняем какой пункт меню нажат
    If Application.CommandBars.ActionControl.Caption = "&1 За" Then
        'выделить в документе промежуток ...
        ActiveDocument.Range( _
                Start:=ActiveDocument.Lists(1).Range.Start, _
                End:=ActiveDocument.Lists(1).Range.Start).Select
 
    ElseIf Application.CommandBars.ActionControl.Caption = "&2 Эк" Then
        'выделить в документе промежуток ...
        ActiveDocument.Range( _
                Start:=ActiveDocument.Lists(2).Range.Start, _
                End:=ActiveDocument.Lists(2).Range.Start).Select
 
    ElseIf Application.CommandBars.ActionControl.Caption = "&3 Сп" Then
        'выделить в документе промежуток ...
        ActiveDocument.Range( _
                Start:=ActiveDocument.Lists(3).Range.Start, _
                End:=ActiveDocument.Lists(3).Range.Start).Select
 
    ElseIf Application.CommandBars.ActionControl.Caption = "&4 Пел" Then
        'выделить в документе промежуток ...
        ActiveDocument.Range( _
                Start:=ActiveDocument.Lists(4).Range.Start, _
                End:=ActiveDocument.Lists(4).Range.Start).Select
 
    ElseIf Application.CommandBars.ActionControl.Caption = "&5 По" Then
        'выделить в документе промежуток ...
        ActiveDocument.Range( _
                Start:=ActiveDocument.Lists(5).Range.Start, _
                End:=ActiveDocument.Lists(5).Range.Start).Select
 
    ElseIf Application.CommandBars.ActionControl.Caption = "&6 Пе" Then
        'выделить в документе промежуток ...
        ActiveDocument.Range( _
                Start:=ActiveDocument.Lists(6).Range.Start, _
                End:=ActiveDocument.Lists(6).Range.Start).Select
 
    End If
 
    Beep
 
Конец:
 
    'отменяем отключение дёргания экрана при выполнении кода
    Application.ScreenUpdating = True
 
End Sub
Ципихович Эндрю вне форума Ответить с цитированием
Старый 02.09.2011, 14:35   #4
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Цитата:
Сообщение от Ципихович Эндрю Посмотреть сообщение
...месяц было всё ОК...
Интересная у вас солянка из кода, если вылетает случайным образом
Добавьте в начале "Sub Перейти" такой код:
Код:
Dim CBC As Office.CommandBarControl
    Set CBC = Application.CommandBars.ActionControl
    If CBC Is Nothing Then Exit Sub
И далее вместо ActionControl используйте CBC, авось поможет.
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 02.09.2011, 15:21   #5
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,034
По умолчанию

сделал, эффект тот же самый
Ципихович Эндрю вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
применение формулы к выделенному диапазону Обыватель Microsoft Office Excel 2 03.02.2011 10:42
меню как на сайте p&g (меню ввиде таблицы) ilma55 WordPress и другие CMS 0 19.09.2010 19:09
И сново sendMessage =) Как нажать пункт верхнего меню и меню правой кнопки? TwiX Win Api 9 15.10.2009 01:57
Для доступа к пунктам главного меню клавиши ALT + подчеркнутая буква меню в офис 2007? Окоча Юра Microsoft Office Word 1 24.02.2009 12:29
Меню с Items в виде набора Bitmap (как меню редактирования в Word'е) chandrasecar Мультимедиа в Delphi 7 14.01.2009 09:20