怎么样让自定义函数返回值?从上面的例子看出,只要将函数的名称设定为需要返回的值即可。
怎么当前工作表中使用自定久函数?使用自定义函数的方法其实和一般函数的方法是一样的,在单元格中键入=RangeCount(A1:A10),即可以得到值(10)!当然,也可以通过菜单插入/函数,在类别中选择用户自定义里找到你自定义的函数。
怎么在工作表里使用别的工作表里的自定义函数?从菜单插入/函数,类别中的用户自定义里,可以看到,如果这个自定义函数不是在当前的工作表里的,函数会变成——文件名.xls!函数名了,这样我们使用上面的自定义函数就变成=Book1.xls!RangeCount(A1:A10)(设我们刚才保存文件为Book1)。
怎么样在任何工作表中使用自定义函数?自定义了函数后,每一次使用都要打开这个工作簿,不方便,那么怎么样让任何工作簿都能使用这个自定义函数呢?有两个方法,第一个就是把代码写在上面说到的个人宏工作簿中,因为个人宏工作簿都是随Excel自动打开的,那么我们就可以通过PERSONAL.XLS!函数名来使用这个自定义函数。第二个方法就是加载宏(关于加载宏的其它用法和具体说明以后还会有专门的一贴),将包含这个自定义函数的工作簿,去掉无关的内容(不去当然也行啦!)后另存为加载宏(不会不知道怎么另存吧,汗!后注!),这样在菜单工具/加载宏里,将相关项前打勾,即可使用该自定义函数,这时使用函数的方法只要直接用函数名即可,如=RangeCount(A1:A10)。
最后再说一点大家少遇到的现象:用过VBA后,大家知道在同一模块中是不能有相同名称的子程序与函数的,如果有,运行时会提示存在二义性!但在不同模块中,却能有相同甸称的函数存在,那么怎么使用这样的函数呢?从菜单插入/函数,类别中的用户自定义里,我们可以看出这样的函数变成模块名.函数名了,这样我们的使用方法就是=模块1.RangeCount(A1:A10)或=模块2.RangeCount(A1:A10)。
后注:详细的另存为加载宏的过程,点击菜单/文件/另存为,在文件类型里选择Microsoft Excel加载宏项,这时文件夹自动转到保存加载宏的AddIns,再保存即可。
附:上面RangeCount的完整代码: Function RangeCount(XRan As Range) RangeCount = XRan.Count End Function
下面给出两个自定义函数,按给颜色求和SumColor与计数CountColor Function SumColor(rColor As Range, rSumRange As Range) Dim rCell As Range Dim iCol As Integer Dim vResult Application.Volatile
iCol = rColor.Interior.ColorIndex For Each rCell In rSumRange
If rCell.Interior.ColorIndex = iCol Then
vResult = WorksheetFunction.Sum(rCell) + vResult End If Next rCell SumColor = vResult End Function
Function CountColor(rColor As Range, rSumRange As Range) Dim rCell As Range Dim iCol As Integer Dim vResult Application.Volatile
iCol = rColor.Interior.ColorIndex For Each rCell In rSumRange If rCell.Interior.ColorIndex = iCol Then vResult = vResult + 1 End If Next rCell
CountColor = vResult End Function
十六、 自定义Excel加载宏
什么是加载宏?加载宏程序是一类程序,它们为 Microsoft Excel 添加可选的命令和功能。
加载宏的分类!Excel 有三种类型的加载宏程序:Excel 加载宏、自定义的组件对象模型 (COM) 加载宏和自动化加载宏。而我们这里说的和以后讲的加载宏都是第一类加载宏。
\如何安装加载宏?在使用某个加载宏前,必须先将其安装在计算机上,再将其加载到 Excel 中。默认情况下,加载宏(*.xla 文件)将安装在以下某个位置上:
Microsoft Office/Office 文件夹的 Library 文件夹或其中的某个子文件夹。
Documents and Settings/
如何将加载宏装入 Excel?安装完加载宏之后,还必须将加载宏装入 Excel。在工具/加载宏中,里面就列出你电脑中的所有安装的加载宏项,将对应项的勾勾选上即可加载加载宏。
如何卸载 Excel中的加载宏?相对应,在工具/加载宏中,里面就列出你电脑中的所有安装的加载宏项,将对应项的勾勾去除即可。将加载宏卸载只是从 Excel 中删除加载宏的功能和命令,但计算机上依然保留着加载宏程序,因此您还可以轻松地重新装载该加载宏。
如何在加载宏加载和关闭时运行特定的代码?在AddinInstall 事件和AddinUnInstall 事件中加入相应的代码即可,当然,这是加载宏加载和关闭时特有的事件,你可以选择在Workbook_open(打开)和Workbook_BeforeClose(关闭)中加入相应的加代。
如何在自定义的加载宏中加入说明?细心的朋友会发现,当我们选择每个Excel自带的加载宏时,在其下方会有一段文字说明这个加载宏,其实我们自定义的加载宏里也可以自已加入一段说明的,只要在其文件/属性的备注中写入这段说明即可,这样看起来是不是专业一点*~_~*,也方便让其它使用加载宏的朋友在加载前多一点了解它。
加载宏就说到这里了,再加上前面的说明,你是不是可以将以前的自定义函数啦,宏啦用加载宏分发别其他朋友了:),再下面的几项自定义项,能让你的一些不懂VBA的朋友更能易用你编好的加载宏,敬请关注哦!
十七、 自定义菜单项
上贴讲过了加载宏,并见意大家将以前的自定义函数啦,宏啦用加载宏分发别其他朋友。自定义函数包含在加载宏后的使用方法前面已说过,而宏呢?如果让别人使用加载宏里的宏?
在宏的基础篇中,我们已说过宏怎么运行,但其实最方便的方法就是在我们的工具栏中建立一个按钮来调用这个宏。
怎么自定义一个按钮?首先要确保要更改的工具栏是可见的,再单击“工具栏选项”箭头指向“添加或删除按钮”或用右击单击工具栏,再单击“自定义”,单击“命令”选项卡,在类别中选择“宏”,将“自定义按钮”拖拉到你需要的工具栏的位置即可。而有多项的话,我们还可以自定义一个菜单项来包含这一些按钮。
怎么自定义一个菜单项?和自定义按钮是差不多的,只是最后一步的操作是将“自定义菜单项”拖拉到你需要的工具栏的位置即可。
怎么将按钮与宏关联?刚刚建立好的按钮,在第一次单击它是,会弹出一个菜单,让你选择与其相关联的宏,这时选择要关联的宏的名称即可。但我们可以这样操作,右击工具栏后选择“自定义”,选择需要关联宏的按钮,然后在“更改所选内容”中的指定宏中指定或修改!
如何更改这个自定义按钮的外观?在刚才说的“更改所选内容”项里,还可以更改这个按钮的名称,图标,样式,只要在此做相应的修改即可,要说明的一点是,在名称中用&后面跟着英文的话,就变成相对应的键盘按键,修改后我们看到的是这个英文下面加一条划线来表示!
如何删除自定义的菜单?还按照上面的操作,将要删除的菜单拖拉到工具栏外,或选择它,再点击“更改所选内容”里的删除即可。
上面说了手工怎么样建立的删除自己的菜单,而怎么让加载宏自己建一个菜单,并在关闭时将其删除呢?前贴说过,可以在AddinInstall 事件与AddinUnInstall 事件或者Workbook_open事情和Workbook_BeforeClose事件中,加入代码,来让加载宏打开与关闭时运行这些代码,还有一个方法就是在模块中定义auto_open(打开时运行)与auto_close(关闭时运行)这两个过程来实现,下面给出一个例子:
Private Declare Function ShellExecute Lib \Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Declare Function GetDesktopWindow Lib \Dim AName, MName(2, 1), DelMenu(2) As Boolean Sub auto_open()
Dim MyMenu As CommandBarPopup Dim MyBtn As CommandBarButton Dim i As Byte Dim XT As String On Error Resume Next
AName = \自定义(&Z)\菜单名称
MName(0, 0) = \百度Excel吧(&A)\菜单项名称 MName(0, 1) = \指定宏名称 MName(1, 0) = \吧主页(&B)\菜单项名称 MName(1, 1) = \指定宏名称 MName(2, 0) = \各页名(&C)\菜单项名称 MName(2, 1) = \各页名\指定宏名称
Set MyMenu = CommandBars(\If MyMenu Is Nothing Then Set
MyMenu
=
CommandBars(\
Menu
Bar\
MyMenu.Caption = AName End If
For i = 0 To UBound(MName)
Set MyBtn = MyMenu.CommandBar.Controls(MName(i, 0)) If MyBtn Is Nothing Then DelMenu(i) = True
Set MyBtn = MyMenu.CommandBar.Controls.Add(Type:=msoControlButton)
相关推荐: