VBA如何使用右键单击复制并粘贴到用户窗体中?

问题描述:

我想让用户能够将值粘贴到VBA中的userForm中的文本框中。你可以使用Ctrl-V,但不是每个人都知道如何做到这一点。VBA如何使用右键单击复制并粘贴到用户窗体中?

如何使用右键菜单启用复制和粘贴功能?

+0

难道不应该是默认的行为,当你右击一个文本框,标准菜单应与它剪切/粘贴等出现? – t0mm13b 2010-02-04 19:24:14

+0

我认为这是默认设置,并且在我收到一些无法粘贴的用户的投诉之前并不认为这会是一个问题。我试图右键单击文本框,没有弹出。然而,Ctrl-v可以正常工作。 – BrianZ 2010-02-04 21:00:36

我意识到这是一个老的文章,但我相信这是一个更有效的方法。
用户窗体上下文菜单类代码

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 

Download example workbook which contains both .xls and .xlsm files