VBA笔记——文本框添加剪切、复制、粘贴、删除快捷键

  • 模块代码
Private ActiveTB As MSForms.TextBox
Public Sub CreateShortCutMenu()
    Dim ShortCutMenu As CommandBar
    Dim ShortCutMenuItem As CommandBarButton
    Dim sCaption As Variant
    Dim iFaceId As Variant
    Dim sAction As Variant
    Dim i As Integer
    sCaption = Array("剪切(&C)", "复制(&T)", "贴粘(&P)", "删除(&D)")
    iFaceId = Array(21, 19, 22, 1786)
    sAction = Array("Action_Cut", "Action_Copy", "Action_Paste", "Action_Delete")
    On Error Resume Next
    Application.CommandBars("ShortCut").Delete
    Set ShortCutMenu = Application.CommandBars.Add("ShortCut", msoBarPopup)
    With ShortCutMenu
        For i = 0 To 3
            Set ShortCutMenuItem = .Controls.Add(msoControlButton)
            With ShortCutMenuItem
                .Caption = sCaption(i)
                .FaceId = Val(iFaceId(i))
                .OnAction = sAction(i)
            End With
        Next
    End With
End Sub

Public Sub ShowPopupMenu(txtCtr As MSForms.TextBox)
    Dim Action As Variant
    Set ActiveTB = txtCtr
    With Application.CommandBars("ShortCut")
        .Controls(1).Enabled = txtCtr.SelLength > 0
        .Controls(2).Enabled = .Controls(1).Enabled
        .Controls(3).Enabled = txtCtr.CanPaste
        .Controls(4).Enabled = .Controls(1).Enabled
        .ShowPopup
    End With
End Sub
Public Sub Action_Cut()
    ActiveTB.Cut
End Sub
Public Sub Action_Copy()
    ActiveTB.Copy
End Sub
Public Sub Action_Paste()
    ActiveTB.Paste
End Sub
Public Sub Action_Delete()
    Dim s As String
    With ActiveTB
        s = .SelText
        .Value = Replace(.Value, s, "")
    End With
End Sub
Public Sub DeleteShortCutMenu()
    On Error Resume Next
    Application.CommandBars("ShortCut").Delete
End Sub
  • 窗体代码
Private Sub UserForm_Initialize()
    Call CreateShortCutMenu
End Sub
Private Sub TextBox1_MouseUp(ByVal Button As Integer, _
ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If Button = 2 Then ShowPopupMenu ActiveControl
End Sub
Private Sub TextBox2_MouseUp(ByVal Button As Integer, _
ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If Button = 2 Then ShowPopupMenu ActiveControl
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Call DeleteShortCutMenu
End Sub
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

star星梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值