问:我看过很多别人发布的Excel加载项,可以提供一些额外的功能或者特殊的功能,极大的扩展和方便了Excel的使用。Excel外接程序是如何开发的?
答:下面介绍如何通过创建示例外接程序的完整过程来构建自己的Excel外接程序。
第一步:确定目标。
首先,我们需要确定外接程序应该执行什么操作以及它应该具有什么功能。
此示例外接程序的主要目的是帮助用户分析工作簿的底层操作机制:
列出工作簿中的所有公式和相关信息。
列出指定工作表中的条件格式信息。
第二步:用户界面设计和操作。
外接程序需要一种与用户交互的方式。该方法可以是用户表单、用于数据输入和报告的工作表模板、右键菜单命令或功能区选项卡中的命令。
此示例外接程序将使用自定义功能区用户界面。在功能区中添加一个名为“我的工具”的自定义选项卡,并在其中添加功能命令,如下所示。
当用户单击公式列表时,将弹出一个消息框,列出工作簿中使用的所有公式、公式所在的单元格以及工作表。
当用户点击“条件格式列表”时,会弹出一个用户表单,如下图,表单中选择了工作表,工作表中设置的条件格式信息会在下面列出。
第三步:写代码。
功能区用户界面
创建一个新工作簿并命名,然后关闭该工作簿。在Microsoft office的自定义ui编辑器中打开工作簿,然后单击“插入—— office 2 7自定义ui部件”,如所示。
在其中输入以下代码:
button id=" rxsheettoolsbtnformalists "
标签=“公式列表”。
size="大"
o action=" rxsheettoolsbtnformalists "
imageMso="FunctionWizard" /
button id=" rxsheettoolsbtncondingformat "
Label="条件格式列表"。
size="大"
on action=" rxSheetToolsbtnCondFormat "
imageMso=" conditionalformattingmanage "/
验证后,保存代码。单击生成回调,复制生成的回调代码,然后关闭自定义用户界面编辑器。
VBA法典
在Excel中打开工作簿,按Alt F11打开VBE。
在VBE中插入一个标准模块并命名为modRibbonX,然后将刚刚复制的代码粘贴到其中:
调用rxSheetToolsbtnConditionalFormat操作的回调
子rxSheetToolsbtnCondFormat(控件为IRibbonControl)
末端接头
子rxSheetToolsbtnFormulaLists(控制为IRibbonControl)
末端接头
插入一个标准模块并将其命名为:modAFL,然后输入代码:
列出所有公式。
子所有公式列表()
将周调暗为工作表
将字符串变暗为字符串
将范围调暗为范围
将rngFormulaRange调暗为范围
调光范围
昏暗的灯光和长长的一样
Str="工作表名称" vbTab "单元格地址" vbTab "公式文本" vbCrLf。
“vbCrLf”
遍历工作簿中的工作表,获取工作表中的公式和相关信息。
活动工作簿中的每个星期。工作表
设置rngUsedRange=wks。使用范围
出错时继续下一步
设置rngFormulaRange=rngUsedRange。特殊单元格(xlCellTypeFormulas)
对于rngFormulaRange中的每个rng
str=str wks。名称vbTab vbTab
字符串=字符串应用程序。替代物。地址," $ "," ")vbTab vbTab
str=str Mid(rng。公式2,(Len(rng。公式)))vbCrLf
下一个rng
设置rngFormulaRange=无
设置rngUsedRange=无
下一周
Msboxstr,“此工作簿中的所有公式和对应的单元格地址”。
末端接头
插入一个用户表单,并在其中放置两个标签控件,一个组合框,一个列表框和一个命令按钮,如下所示。
为用户表单编写的代码如下:
私有子用户表单_初始化()
将周调暗为工作表
表格中的每一周
cmbSheet。AddItem wks。名字
下一周
末端接头
私有子cmdOK_Click()
LBL选项。Caption=" "
第一秒格式。清楚的
列表条件格式。文本)
末端接头
子列表条件格式化(以字符串形式显示周名称)
变型
调光范围
将rngAll调暗为范围
将色谱柱整合为集合
我如龙,我如龙
变型变量
设置列一致性=新集合
出错时继续下一步
设置rngAll=工作表(wks名称)。细胞。特殊细胞(xlcelltypel畸形)
出现错误转到
如果rngAll什么都不是
LBL选项。标题="工作表"工作时间"中没有设置条件格式."
出口接头
如果…就会结束
LBL选项。标题="工作表"工作时间"中设置的条件格式如下:"
对每个人来说
对于i=1至rng .格式条件。计数
和皇族永不言弃(Royal Never Give Up 电子竞技俱乐部)一起。格式条件
出错时继续下一步
colConFormat .添加。第(一)项,FCSignature(.项目)
出现错误转到
以…结尾
接下来我
下一个皇族永不言弃(Royal Never Give Up 电子竞技俱乐部)
雷迪姆变量(1至colConFormat .数到1,1到5)
var(1,1)=”类型"
var(1,2)=”单元格"
var(1,3)=”如果为真则停止"
var(1,4)=”公式1"
var(1,5)=”公式2"
对于i=1至colConFormat .数数
设置cf=colConFormat .项目
var(i 1,1)=FCTypeFromIndex(参见类型)
var(i 1,2)=参见应用于地址
var(i 1,3)=参见停止运行
出错时继续下一步
var(i 1,4)=“”参见公式一
var(i 1,5)=“”参见公式2
出现错误转到
接下来我
第一秒格式。列计数=5
第一秒格式。列表=var
末端接头
函数FCSignature(ByRef cf As Variant)作为字符串
将结果(1至3)调暗为字符串
strResult(1)=cf . appliesto。地址
strResult(2)=FCTypeFromIndex(比较类型)
出错时继续下一步
strResult(3)=参见公式一
FCSignature=Join(strResult,vbNullString)
结束功能
函数FCTypeFromIndex(lngIndex为长)为字符串
选择案例索引
案例1: FCTypeFromIndex="单元格值"
Case 2: FCTypeFromIndex="表达式"
案例3: FCTypeFromIndex="色阶"
案例4: FCTypeFromIndex="数据条"
Case 5: FCTypeFromIndex="前1 ?"
Case 6: FCTypeFromIndex="图标集"
Case 8: FCTypeFromIndex="唯一值"
Case 9: FCTypeFromIndex="文本"
案例1 : FCTypeFromIndex="空值"
案例11: FCTypeFromIndex="时间段"
案例12: FCTypeFromIndex="高于平均值"
案例14: FCTypeFromIndex="非空值"
案例16: FCTypeFromIndex="错误"
案例17: FCTypeFromIndex="无错误"
Case Else: FCTypeFromIndex="未知"
结束选择
结束功能
然后,回到modRibbonX模块,完善代码如下:
rxSheetToolsbtnConditionalFormat操作的回调
子rxSheetToolsbtnCondFormat(控件为IRibbonControl)
财政部长会议.显示
末端接头
子rxSheetToolsbtnFormulaLists(控制为IRibbonControl)
所有公式列表
末端接头
至此,本示例加载宏的编码工作完成。
第四步:创建加载宏
创建加载宏很简单,单击"办公室按钮——另存为”(Excel 2 7)或者"文件——另存为”(Excel 2 1),在"保存类型"中选择“Excel加载宏(*.xlam)",如所示。
此时,Excel会自动导航到默认的加载宏文件夹,如所示。也可以选择存在自已指定的其他文件夹中。
单击"保存",创建加载宏。
第5步:安装加载宏
单击功能区"开发工具——加载项",打开如下所示的对话框。如果"可用加载宏"列表中没有我们的示例加载宏,则可以单击右侧的"浏览"按钮,导航到加载宏所在的文件夹并选择加载宏文件,添加到列表中。
如所示,选取示例加载宏前面的复选框,单击"确定",完成加载宏安装。此时,Excel工作簿中将会新增一个"我的工具"选项卡,如本文开头的所示。