VBA Как скопировать и вставить пользовательскую форму, щелкнув правой кнопкой мыши?

Я хочу, чтобы пользователи могли вставлять значения в текстовые поля в пользовательской форме в VBA. Вы можете использовать Ctrl-v, но не все знают, как это сделать.

Как включить копирование и вставку с помощью контекстного меню?


person BrianZ    schedule 04.02.2010    source источник
comment
Разве это не должно быть поведением по умолчанию, когда вы щелкаете правой кнопкой мыши по текстовому полю, должно появиться стандартное меню с пунктами «Вырезать/Вставить» и т. д.?   -  person t0mm13b    schedule 04.02.2010
comment
Я думал, что это было по умолчанию, и не думал, что это будет проблемой, пока не получил несколько жалоб от пользователей, которые не могли вставить. Я попытался щелкнуть правой кнопкой мыши по текстовому полю, и ничего не появляется. Однако Ctrl-v работает нормально.   -  person BrianZ    schedule 05.02.2010


Ответы (2)


Я понимаю, что это старый пост, но я считаю, что есть более эффективный метод.
Код класса контекстного меню пользовательской формы

http://www.andypope.info/vba/uf_contextualmenu.htm

Есть даже образцы электронных таблиц Excel для примеров кода.

Модуль класса обрабатывает построение контекстного меню, захват правой кнопкой мыши в текстовых полях и фактическое вырезание. Действия копирования и вставки. Класс использует объект ActiveControl пользовательской формы. Код даже обрабатывает элементы управления внутри элементов управления контейнера, таких как фреймы и многостраничные.

Следующий код инициализации из пользовательской формы показывает, насколько просто определить и использовать объект класса. Вам нужно только объявить переменную для объекта, а затем установить ссылку для каждого текстового поля, в котором вы хотите иметь возможности контекстного меню. Вы можете просмотреть все элементы управления и автоматически ссылаться на каждое текстовое поле.

Private m_colContextMenus As Collection

Private Sub UserForm_Initialize()

    Dim clsContextMenu As CTextBox_ContextMenu
    Dim cTRL as Control

    Set m_colContextMenus = New Collection

    For Each cTRL In Me.Controls
        Select Case TypeName(cTRL)
        Case "TextBox"
            'MsgBox cTRL.Name & ": " & Me.Controls(cTRL.Name).Value          
            Set clsContextMenu = New CTextBox_ContextMenu
            With clsContextMenu
                Set .TBox = Me.Controls(cTRL.Name)
                Set .Parent = Me
            End With
            m_colContextMenus.Add clsContextMenu, CStr(m_colContextMenus.Count + 1)
        Case Else
            'MsgBox TypeName(cTRL) & ": " & cTRL.Name
        End Select
    Next

End Sub

Загрузить пример книги, содержащей файлы .xls и .xlsm

person B Hart    schedule 30.08.2013

Это может представлять интерес: http://word.mvps.org/faqs/userforms/AddRightClickMenu.htm

person Fionnuala    schedule 04.02.2010