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

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

Я специально пытаюсь запустить функцию "AddComment" из контекстного меню RightClick - но я создал собственное контекстное меню.

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

РЕДАКТИРОВАТЬ: Я думаю, что я должен быть более конкретным:

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

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

2 ответа

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

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

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

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

Возможное решение:

Шаг за шагом:

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

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

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?

Другие вопросы по тегам