打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VBA常用代码解析(第二十五讲)




8部分控件的应用

099 文本框添加右键快捷菜单

VBA中的控件没有提供右键快捷菜单,用户可以使用Excel 中的命令栏自已添加右键快捷菜单。

步骤1:按<Alt+F11>组合键进入VBE窗口,单击菜单“插入”→“模块”,在其代码窗口输入以下代码:

Private ActiveTB As MSForms.TextBox

Public Sub CreateShortCutMenu()

DimShortCutMenu As CommandBar

DimShortCutMenuItem As CommandBarButton

DimsCaption As Variant

DimiFaceId As Variant

DimsAction As Variant

Dimi As Integer

sCaption= Array('剪切(&C)''复制(&T)''贴粘(&P)''删除(&D)')

iFaceId= Array(2119221786)

sAction= Array('Action_Cut''Action_Copy''Action_Paste''Action_Delete')

On ErrorResume Next

Application.CommandBars('ShortCut').Delete

SetShortCutMenu = Application.CommandBars.Add('ShortCut'msoBarPopup)

WithShortCutMenu

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

EndWith

End Sub

代码解析:

1行代码,在模块级别中声明变量ActiveTB是用来对应窗体中的文本框所触发的所有事件的变量。CreateShortCutMenu过程用来创建标题为“ShortCut”的右键快捷菜单,并添加4个菜单项。

Public Sub ShowPopupMenu(txtCtr As MSForms.TextBox)

DimAction As Variant

SetActiveTB = txtCtr

WithApplication.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

EndWith

End Sub

代码解析:

ShowPopupMenu过程根据文本框中字符的选中状态设置右键快捷菜单菜单项的Enabled属性后使用ShowPopup方法显示右键快捷菜单。

5行代码,如果当前文本框中已有选中的字符则“剪切”按钮有效。

6行代码,如果当前文本框中已有选中的字符则“复制”按钮有效。

7行代码,如果剪贴板中包含对象支持的数据。则“贴粘”按钮有效。

8行代码,如果当前文本框中已有选中的字符则“删除”按钮有效。

9行代码,显示快捷菜单。

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()

Dims As String

WithActiveTB

s = .SelText

.Value = Replace(.Values““)

EndWith

End Sub

代码解析:

Action_Cut过程是快捷菜单中单击“剪切”菜单项所运行的过程。使用Cut 方法将当前选中的文本框中的文本删除并移至剪贴板。

Action_Copy过程是快捷菜单中单击“复制”菜单项所运行的过程。使用Copy方法将文本框选中的文本复制到剪贴板上。

Action_Paste过程是快捷菜单中单击“贴粘”菜单项所运行的过程。使用Paste方法把剪贴板上的内容传送到一个文本框中。

Action_Delete过程是快捷菜单中单击“贴粘”菜单项所运行的过程。使用Replace函数将文本框中选中的文本的文本替换成空字符。

Public Sub DeleteShortCutMenu()

On ErrorResume Next

Application.CommandBars('ShortCut').Delete

End Sub

代码解析:

DeleteShortCutMenu过程删除创建的右键快捷菜单。

步骤2:在VBE窗口中,单击菜单“插入”→“用户窗体”,在窗体上添加两个文本框控件。双击窗体,在其代码窗口中输入下面的代码。

Private Sub UserForm_Initialize()

CallCreateShortCutMenu

End Sub

Private Sub TextBox1_MouseUp(ByVal Button As IntegerByVal Shift As IntegerByVal X As SingleByVal Y As Single)

If Button= 2 Then ShowPopupMenu ActiveControl

End Sub

Private Sub TextBox2_MouseUp(ByVal Button As IntegerByVal Shift As IntegerByVal X As SingleByVal Y As Single)

If Button= 2 Then ShowPopupMenu ActiveControl

End Sub

Private Sub UserForm_QueryClose(Cancel As IntegerCloseMode As Integer)

CallDeleteShortCutMenu

End Sub

代码解析:

1行到第3行代码,窗体的Initialize事件,在窗体初始化时运行CreateShortCutMenu过程创建右键快捷菜单。

4行到第9行代码,文本框的MouseUp事件,当用户右健单击文本框时运行ShowPopupMenu过程在选中的菜单项上显示右键快捷菜单。

10行到第12行代码,窗体的QueryClose事件,在关闭窗体时运行DeleteShortCutMenu过程删除右键快捷菜单。

窗体运行后,右键单击文本框显示右键快捷菜单。

100 文本框回车自动输入

在使用文本框向工作表输入数据时,为了加快输入速度,可以利用文本框的KeyDown事件,回车后自动输入并清空文本框,如下面的代码所示。

Private Sub TextBox1_KeyDown(ByVal KeyCode AsMSForms.ReturnIntegerByVal Shift As Integer)

WithTextBox1

If Len(Trim(.Value)) > 0 Then

If KeyCode = vbKeyReturn Then

Sheet1.Range('A65536').End(xlUp).Offset(10) = .Value

.Text = ““

End If

End If

EndWith

End Sub

代码解析:

文本框的KeyDown事件,在输入数据并按<Enter>键后自动将数据录入到工作表A列最后一个非空单元格的下一个单元格中。

KeyDown事件在按下键盘按键时发生,语法如下:

Private Sub object_KeyDown(ByVal KeyCode As MSForms.ReturnIntegerByVal ShiftAs fmShiftState)

参数object是必需的,一个有效的对象。

参数KeyCode是必需的,代表被按下的键的键代码。

参数Shift是可选的,ShiftCtrl Alt的状态。

3行代码,为了防止误输入空白数据,使用Len 函数和Trim 函数检查文本框内是否为有效数据。

4行代码,根据KeyCode参数值判断是否按下了回车键。如果用户按下了回车键,KeyCode参数返回常数vbKeyReturn

56行代码,将文本框数据输入到工作表A列的最后一个单元格内,同时清空文本框内容准备下一次输入。

101 自动选择文本框内容

如果希望光标进入文本框时能自动选择文本框内容,可以在文本框的MouseUp事件中来完成,如下面的代码所示。

Private Sub TextBox1_MouseUp(ByVal Button As IntegerByVal Shift As IntegerByVal X As SingleByVal Y As Single)

WithTextBox1

If Button = 2 Then

.SelStart = 0

.SelLength = Len(.Text)

End If

EndWith

End Sub

代码解析:

文本框的MouseUp事件,在光标进入文本框释放鼠标右键时自动选择文本框内容。

MouseUp事件在用户释放鼠标按键时发生,语法如下:

Private Sub object_MouseUp(ByVal Button As fmButtonByVal Shift As fmShiftStateByVal X As SingleByVal Y As Single)

参数object是必需的,一个有效的对象。

参数Button是可选的,设置引起该事件的鼠标按键的整数值,如表格所示。

参数Shift是可选的,ShiftCtrl Alt的状态。

参数X和参数Y是可选的,窗体、框架或页的位置的横坐标与纵坐标。

3行到第6行代码,如果用户进入文本框释放鼠标右键,设置文本框的SelStart 属性为0SelLength属性为文本框的全部字符数。

SelStart 属性指定选中文本的起点,语法如下:

object.SelStart [=Long]

参数object是必需的,一个有效的对象。

参数Long是可选的,指定选中文本的起点。

SelLength 属性指定文本框或组合框的文本部分中选中的字符数,语法如下:

object.SelLength [=Long]

参数object是必需的,一个有效的对象。

参数Long是可选的,指定选中的字符数。

运行窗体,当光标进入文本框释放鼠标右键时自动选择文本框内容。



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VBA窗体-搭建一个简单的登录界面
《Visual Basic程序设计教程(第3版)》第10章 菜单及对话框
VBA控件常规使用
VB爱好者乐园(VBGood) - 经验之谈 - VB编程的必备技巧
VB编程常见问题_VB系统和窗体控制_VB程序设计
VB程序设计两次习题
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服