2015-12-01 3 views
0

Есть ли способ получить доступ ко всем функциям встроенного сотового контекстного меню?Добавить функцию из контекстного меню контекстного меню по умолчанию в пользовательское контекстное меню?

Я специально ищу функцию «AddComment» из контекстного меню RightClick, но я создал настраиваемое контекстное меню.

Это не только комментарий. Он открывает комментарий и добавляет мое имя и выбирает его. Это хорошо, и я хотел бы применить эту функцию в пользовательском контекстном меню. Поэтому мне нужно либо удержать код для этой функции, либо «вызвать» эту функцию из моего пользовательского контекстного меню.

EDIT: Я думаю, что нужно быть более конкретным:

  • Стандартная операция, которая называется «Вставить комментарий» находится в ячейке правой кнопкой мыши контекстное меню.
  • Я хочу скопировать эту функцию в свое собственное (пользовательское) контекстное меню правой кнопки мыши.
  • Есть ли место, где можно увидеть фактический код для всех встроенных функций в excel? Например, я говорю об этих функциях щелчка правой кнопкой мыши.

Итак, я не хочу hijack контекстное меню. Я хочу использование это! Но я создал настраиваемое контекстное меню контекстного меню, где я хочу вставить функцию из исходного контекстного меню контекстного меню.

+0

Создайте кнопку в объекте 'CommandBars (« Cell ») и назначьте свою процедуру свойству' .OnAction'. https://msdn.microsoft.com/en-us/library/office/gg469862(v=office.14).aspx – Ambie

+0

@Ambie, большое предложение! Надеюсь, вы не возражаете, что я собрал образец кода для этого в редакции моего ответа, поскольку я пропустил - сначала понял OP. Если вы хотите опубликовать это как ответ, я могу удалить мою. – u8it

ответ

0

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

Range("A1").Select 
Range("A1").AddComment 
Range("A1").Comment.Visible = False 
Range("A1").Comment.Text Text:="Your Name:" & Chr(10) & "" 

Редактировать
Я думаю, что я избегаю понял OP сначала спросив, как получить соответствующий код VBA для умолчанию context- операции меню. Я думаю, что на самом деле спрашивается, как «захватить» встроенную операцию контекстного меню. Как заметил Амби, это можно сделать, как показано ниже.

Sub HijackContextMenuInsertComment() 
    Dim ContextMenu As CommandBar 
    Set ContextMenu = Application.CommandBars("Cell") 
    ContextMenu.Controls.Item(13).OnAction = "Test" 
End Sub 
Sub Test() 
    MsgBox "I've been hijacked" 
End Sub 
+0

На самом деле функция выбирает комментарий, вставляет мое имя (выделено полужирным шрифтом), выделяет его и помещает курсор в конец комментария - готов писать комментарий. Ваше предложение вставляет комментарий. Это огромная разница. – TAKL

+0

@TAKL Извините, я пропустил - понял ОП. Пожалуйста, ознакомьтесь с пересмотренной версией того, что я понимаю, теперь спрашиваю. – u8it

+0

Вы были на правильном пути с самого начала. Однако я не хочу записывать макрос для каждой операции, которую я хочу использовать. Я хочу ИСПОЛЬЗОВАТЬ эту точную операцию! Операции по «Вставить комментарий» делает что-то вроде этого: - Вставить комментарий - Показать комментарий - Вставьте мое имя жирного шрифта, а в Chr (10) - Поместите курсор после моего имени, готов к записи комментария. Другой способ описания того, что я хочу сделать, это: - Я хочу ВЫЗОВУ операцию «Вставить комментарий». Я не хочу имитировать это, я хочу использовать его точный. Дополнительную информацию см. В моем возможном обходном пути (ответ). Надеюсь ты понимаешь. – TAKL

0

Возможные обходной путь:

Шаг за шагом:

  • контекстное меню Использовать по умолчанию
  • Удалить все элементы, кроме "Вставить комментарий"
  • Добавление пользовательских функций в контексте menu
  • Теперь у меня должно быть все мое собственные функции и функцию «Вставить комментарий».

Чтобы сделать эту работу, я просто добавил этот код:

Dim Cnt As CommandBarControl 
With Application.CommandBars("Cell") 
    For Each Cnt In .Controls 
     If InStr(1, Cnt.Caption, "Infoga ko") = 0 Then Cnt.Delete 
    Next Cnt 
End with 

Обратите внимание, что подпись отличается на каждом языке. Я получил его в шведском, поэтому на английском он может работать с «Вставить c» вместо «Infoga ko».

Для того, чтобы получить правильный заголовок, вы можете петля все элементы управления, как это:

For Each Cnt In .Controls 
    Debug.Print Cnt.Caption 
Next Cnt 

После выполнения этого кода, я только функция «Вставить комментарий» слева, а затем я могу начать добавлять мои собственные средства управления!

ОБНОВЛЕНИЕ: Нет, это не работает. Функция не будет работать. При нажатии кнопки «Вставить комментарий» ничего не происходит. Weird?

Смежные вопросы