2010-02-04 27 views
2

Je souhaite autoriser les utilisateurs à coller des valeurs dans TextBoxes dans un formulaire utilisateur dans VBA. Vous pouvez très bien utiliser Ctrl-v, mais tout le monde ne sait pas comment le faire.VBA Comment copier et coller dans un Userform en cliquant avec le bouton droit de la souris?

Comment activer le copier-coller à l'aide d'un menu contextuel?

+0

Si pas un comportement par défaut lorsque vous cliquez à droite sur une zone de texte, le menu standard devrait apparaître avec etc Couper/Coller dessus? – t0mm13b

+0

Je pensais que c'était la valeur par défaut et je ne pensais pas que ce serait un problème jusqu'à ce que je reçois des plaintes d'utilisateurs qui ne pouvaient pas coller. J'ai essayé de faire un clic droit sur la zone de texte et rien ne s'affiche. Ctrl-v fonctionne bien cependant. – BrianZ

Répondre

2

Je sais que c'est un ancien poste mais je crois qu'il ya une méthode plus efficace.
Userform Menu contextuel code de classe

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

Il y a même des feuilles de calcul pour l'échantillon excel les exemples de code.

Le module de classe gère la construction du menu contextuel, la capture du clic droit dans les zones de texte et la coupe réelle. Copier et coller des actions. La classe utilise l'objet ActiveControl de l'userform. Le code gère même les contrôles dans les contrôles de conteneur tels que les cadres et Multipage.

Le code d'initialisation suivant, à partir du formulaire utilisateur, montre à quel point il est simple de définir et d'utiliser l'objet de classe. Vous n'avez qu'à déclarer une variable à l'objet, puis définir une référence pour chaque zone de texte dans laquelle vous souhaitez disposer des fonctionnalités du menu contextuel. Vous pouvez parcourir tous les contrôles et référencer automatiquement chaque zone de texte.

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