Добавить функцию из контекстного меню правого клика по умолчанию в пользовательское контекстное меню?
Есть ли способ получить доступ к коду для всех встроенных функций контекстного меню ячейки?
Я специально пытаюсь запустить функцию "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?