excel学习库

excel表格_excel函数公式大全_execl从入门到精通

自定义RibbonX(功能区)触发回调

分享成果,随喜正能量】人生苦短,糊涂一点不较真,大度一点不生气,凡事看淡,一切随缘,人生本过客,何必千千结。生活,从来不会故意刁难任何人,让你烦恼的,一直都是你自己的拿得起、放不下。

实际工作中分发VBA程序,写好的程序可以升级

应用1 在EXCEL中构建加载项

Excel是一个功能非常强大的应用程序,具有数千个选项和功能,可帮助我们构建模型、报告和数据分析。但是,在我们日常工作中往往也会需要一些额外的功能,这就需要我们使用VBA来扩充。本文将给大家展示如何创建一个小型实用程序,我将概述来创建外接程序的所有步骤。这些步骤的使用可以帮助大家构建自己的自定义应用。

7 代码功能实现

1) Ribbon load

在打开这个加载项时候,为了能够告诉Excel它需要更新功能区,我们需要一个指向功能区对象的指针。该指针在onLoad回调中传递给我们。因此,让我们添加一个模块级对象变量并为其指定Ribbon对象:

Sub mynzSheetToolscustomUI_onLoad(ribbon As IRibbonUI)

Set moRibbon = ribbon

ThisWorkbook.Worksheets("Sheet1").Range("RibbonPointer").Value = "'" & ObjPtr(moRibbon)

End Sub

这里,VBA会记住Ribbon对象,因此我们可以要求它从代码中刷新。打开Excel文件并启用宏时,onLoad是第一个被调用的回调。

2)使用工作表选项卡名称填充下拉列表

接下来发生的事情是下拉列表请求它需要加载的项目数。这是在mynzSheetToolsbtnSheets getItemCount回调中完成的:

'Callback for mynzSheetToolsbtnSheets getItemCount

Sub mynzSheetToolsbtnSheets_Count(control As IRibbonControl, ByRef returnedVal)

Dim lCt As Long

Dim oSh As Object

For Each oSh In Sheets

If oSh.Visible = xlSheetVisible Then lCt = lCt + 1

Next

returnedVal = lCt

End Sub

该过程只计算活动工作簿中可见工作表的数量,并将该数量传递给returnedVal变量,该变量将传递回Excel。

3触发下一个回调,它将获取实际的工作表名称

Public Sub mynzSheetToolsbtnSheets_getItemLabel(control As IRibbonControl, Index As Integer, ByRef returnedVal)

Dim lCt As Long

Dim oSh As Object

For Each oSh In Sheets

If oSh.Visible = xlSheetVisible Then lCt = lCt + 1

If lCt = Index + 1 Then

returnedVal = oSh.Name

Exit For

End If

Next

End Sub

调用此回调的次数与在上一次回调中传递的工作表数相同。索引从零开始,所以你必须注意返回到它的内容。因此,对sub的每次调用都要求一个工作表名称。

4)填充下拉列表时,我们希望它显示活动工作表的名称,由此回调处理.

'Callback for mynzSheetToolsbtnSheets getSelectedItemIndex

Sub mynzSheetToolsbtnSheets_getSelectedItemIndex(control As IRibbonControl, ByRef returnedVal)

Dim lCt As Long

Dim oSh As Object

For Each oSh In Sheets

If oSh.Visible = xlSheetVisible Then lCt = lCt + 1

If oSh.Name = ActiveSheet.Name Then

returnedVal = lCt - 1

Exit For

End If

Next

End Sub

5)最后,如果我们从下拉列表中选择一张工作表,我们希望它将我们带到那里

Sub mynzSheetToolsbtnSheets_Click(control As IRibbonControl, id As String, Index As Integer)

Dim lCt As Long

Dim oSh As Object

For Each oSh In Sheets

If oSh.Visible = xlSheetVisible Then lCt = lCt + 1

If lCt = Index + 1 Then

oSh.Activate

Exit Sub

End If

Next

End Sub

刚才讲过下拉索引从零开始,注意Excel的工作表索引从1开始。

6)更新TOC工作表

我们设计一个空回调函数,因此让我们调用在开始时设计的宏:

Sub mynzSheetToolsbtnInsertTOC(control As IRibbonControl)

UpdateTOC

End Sub

[待续]

  1. 本讲内容参考程序文件:高级应用01.xlsm

  1. 第三方应用软件:Office RibbonXEditor-NETFramework-Installer.EXE

  1. 实现的外接应用程序:mynzSheetTools.xlma

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:

分享成果,随喜正能量】愿意吃亏的人,终究吃不了亏。吃亏多了,总有厚报。爱占便宜的人,定是占不了便宜。赢了微利,却失了大贵。再好的东西,也可能长久拥有,不必计一时回赠,莫如常怀怜悯之情,常施援助之爱,得到人心,他物不缺。莫要以为成败无因,今天的苦果,是昨天所播之种;当下的付出,是明日的善报。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接