2017-01-11 4 views
2

Я создаю всплывающее меню для вставки в текстовое поле ActiveX на листе Excel. Всплывающее меню работает, но опция «Вставить» недоступна.Проблема с VBA правой кнопкой мыши Вставить

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 с идентификатором 22 достаточно, чтобы указать, склейка текста?

ответ

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 
+0

Если это относится к другой процедуре, такой как '' Textbox_Paste ", вы можете также включить необходимый код из этой процедуры. В противном случае я думаю, что этот ответ будет неполным. –

+0

@DavidZemens, Добавлен код для отображения окна сообщения при нажатии Paste. –

+0

Оператор 'OnAction' вызывает процедуру' 'Textbox_Paste''. Где код для '' Textbox_Paste? '? –

1

Дополнительный вопрос после того, как пользователь может щелкнуть пасту, я должен добавить OnAction и обратитесь к югу, чтобы он на самом деле вставить текст в текстовое поле или с помощью msoControlButton с ID 22 достаточно указать вставку текста?

Нет, вы на самом деле не нужно использовать либо, потому что ActiveX TextBox класс имеет метод Paste который вы можете использовать. Итак, поросенок-бэк на ответ @Mukul Варни, в рамках процедуры cmdPasteButton_Click событий, вы можете просто сделать:

txtInput.Paste 

И это должно вставить содержимое буфера обмена в позицию курсора в TextBox.

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

    CancelDefault = True 
End Sub 
+0

благодаря 'txtInput.Paste', поскольку необходимо вставить содержимое. – cheshire

Смежные вопросы