分享

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

 L罗乐 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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多