VBA问题右键单击粘贴

时间:2017-01-11 18:31:30

标签: vba excel-vba excel

我正在创建一个弹出菜单以粘贴到Excel工作表上的ActiveX文本框中。弹出窗口有效,但“粘贴”选项显示为灰色。

Private Sub txtInput_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If Button = vbKeyRButton Then
        Call ShowMenu
        Application.CommandBars("MyMenu").ShowPopup
    End If
End Sub



Sub ShowMenu()
    'Remove any old instance of MyPopUp
    On Error Resume Next
    CommandBars("MyMenu").Delete
    On Error GoTo 0

    With CommandBars.Add(name:="MyMenu", Position:=msoBarPopup)
        With .Controls.Add(Type:=msoControlButton, ID:=22)
            .Enabled = True
        End With
    End With
End Sub

我添加了.Enabled = True,但没有解决问题。我确定我遗漏了一些基本的东西。

其他问题,一旦用户可以点击粘贴,我是否必须添加OnAction并引用子文件,让它实际将文本粘贴到文本框中或使用msoControlButton ID 22足以指示文本的粘贴?

2 个答案:

答案 0 :(得分:1)

  

附加问题,一旦用户可以点击粘贴,我是否必须添加OnAction并引用一个子实际将文本粘贴到文本框中,或者使用ID为22的msoControlButton足以指示粘贴文本?

不,你实际上也不需要使用它们,因为ActiveX TextBox类有一个Paste方法,你可以使用它。因此,在cmdPasteButton_Click事件程序中,捎带@Mukul Varney的回答,您可以这样做:

txtInput.Paste

这应该将剪贴板内容粘贴到TextBox中的光标位置。

Private Sub cmdPasteButton_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
    txtInput.Paste

    CancelDefault = True
End Sub

答案 1 :(得分:0)

请尝试以下操作。我已启用粘贴。

Private WithEvents cmdPasteButton As CommandBarButton

Private Sub txtInput_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If Button = vbKeyRButton Then
        Call ShowMenu
        Application.CommandBars("MyMenu").ShowPopup
    End If
End Sub

Sub ShowMenu()

    'Remove any old instance of MyPopUp
    On Error Resume Next
    CommandBars("MyMenu").Delete
    On Error GoTo 0

    Set cmdPasteButton = CommandBars.Add(Name:="MyMenu", Position:=msoBarPopup).Controls.Add(Type:=msoControlButton, ID:=22)
    cmdPasteButton.OnAction = "Textbox_Paste"

End Sub

Private Sub cmdPasteButton_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
    MsgBox "hello from cmdPasteButton_Click"
    CancelDefault = True
End Sub