事件给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)
说明:
下面的代码禁止默认的右键单击操作: Private Sub Workbook_SheetBeforeRightClick(ByValSh As Object, _ ByVal Target As Range, ByVal Cancel AsBoolean) Cancel= True End Sub
|
|