打开APP
userphoto
未登录

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

开通VIP
Excel VBA解读(97):工作簿事件示例——在单元格快捷菜单中添加自定义列表
userphoto

2018.05.21

关注


事件给Excel VBA编程带来了很多的奇妙,让Excel真正实现与用户的实时互动。在前面的系列文件中,通过讲解Workbook对象的几个事件,我们可以体会到事件编程给我们带来的新奇的感觉。接下来的文章中,我们通过一些示例,学习工作簿事件,并进一步体会到事件编程的妙处。

 

示例:在单元格快捷菜单中添加自定义列表

 

有时候,我们可以创建自定义列表,方便在单元格中输入一系列数据。例如,在自定义序列中,我们定义了一个序列:洪七公、小龙女、穆念慈、江小鱼、花无缺,如图1所示。


1

 

此时,我们可以在任意工作表单元格中输入“洪七公”,然后拖动该单元格右下角的填充句柄向下拖动到其他单元格,Excel会根据自定义的序列在下面的单元格中自动输入“小龙女、穆念慈、”。也就是说,我们只需输入序列中的第一个数据,余下的就不用管了!

 

然而,自定义序列多了或者时间长了,可能不记得序列第一个数据。我们可以将自定义的序列放置在单元格右键菜单中并显示序列第一个数据(如图2所示),这样只需单击右键,在快捷菜单中选择要输入的序列,然后向下拖动即可。


图2

 

下面是实现代码。

超时空同居

主演:雷佳音 / 佟丽娅 / 徐峥

猫眼电影演出 广告
购买

 

首先,在标准模块中输入代码:

Sub AddFirstList()

   Dim strList As String

   strList = Application.CommandBars.ActionControl.Caption

   If Not strList Like '*...*' Then Exit Sub

   ActiveCell = Left(strList, InStr(1, strList, '.',vbTextCompare) - 1)

End Sub

 

ThisWorkbook代码模块中,Workbook_ SheetBeforeRightClick事件的代码:

Private Sub Workbook_SheetBeforeRightClick(ByValSh As Object, ByVal Target As Range, Cancel As Boolean)

   Dim cmbBtn As CommandBarButton

   Dim lngListCount As Long

   Dim lngCount As Long

   Dim strList As String

   Dim MyList

   

   On Error Resume Next

   

   With Application

        lngListCount = .CustomListCount

        For lngCount = 1 To lngListCount

            MyList =.GetCustomListContents(lngCount)

            strList =.CommandBars('Cell').Controls(MyList(1) & _

                    '...' & MyList(UBound(MyList))).Caption

           .CommandBars('Cell').Controls(strList).Delete

            Set cmbBtn =.CommandBars('Cell').Controls.Add(Temporary:=True)

            With cmbBtn

                .Caption = MyList(1) &'...' & MyList(UBound(MyList))

                .Style = msoButtonCaption

                .OnAction ='AddFirstList'

            End With

        Next lngCount

   End With

   

   On Error GoTo 0

End Sub

 

代码输入完成后,回到工作表中,结果演示如图3所示。

3

 

代码运用了SheetBeforeRightClick事件,其语法为:

Workbook_SheetBeforeRightClick(ByValSh As Object, ByVal Target As Range, Cancel As Boolean)

 

说明:

  • 当在工作簿的任意工作表中单击右键时发生此事件,并且事件发生在默认的右击操作之前。

  • 参数Sh,代表工作表对象。

  • 参数Target,代表单元格对象,即最接近右击时光标所在位置的单元格。

  • 参数Cancel,当事件发生时为False。如果将该参数设置为True,则不会执行默认的右击操作。

 

下面的代码禁止默认的右键单击操作:

Private Sub Workbook_SheetBeforeRightClick(ByValSh As Object, _

 ByVal Target As Range, ByVal Cancel AsBoolean)

Cancel= True

End Sub

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
电脑做账:如何让Excel更轻松更好用
取出自定义序列的内容
Excel操作技巧(3)
在Excel中自定义上下文菜单 示例工作簿下载
Excel 2003 的另类技巧
53条EXCEL使用技巧(办公室文职必备)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服