ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: SCYANGYU

如何给自定义函数的参数添加描述信息?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-7-2 18:27 | 显示全部楼层
本帖已被收录到知识树中,索引项:自定义函数开发
谢谢,非常有用。不知道为什么,类似的程序,用下面链接中的就不行
http://club.excelhome.net/viewth ... p;extra=&page=1

TA的精华主题

TA的得分主题

发表于 2011-8-1 11:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Const Lib = """c:\windows\system32\user32.dll"""
Option Base 1

Private Function Multiply(N1 As Double, N2 As Double) As Double
  Multiply = N1 * N2
End Function


Private Function Divide(N1 As Double, N2 As Double) As Double
  Divide = N1 / N2
End Function



Sub Auto_open()

  Register "DIVIDE", 3, "Numerator,Divisor", 1, "Division", _
    "Divides two numbers", """Numerator"",""Divisor """, "CharPrevA"
  Register "MULTIPLY", 3, "Number1,Number2", 1, "Multiplication", _
    "Multiplies two numbers", """First number"",""Second number """, _
    "CharNextA"

End Sub


Sub Register(FunctionName As String, NbArgs As Integer, _
  Args As String, MacroType As Integer, Category As String, _
  Descr As String, DescrArgs As String, FLib As String)
  
  Application.ExecuteExcel4Macro _
  "REGISTER(" & Lib & ",""" & FLib & """,""" & String(NbArgs, "P") _
  & """,""" & FunctionName & """,""" & Args & """," & MacroType _
  & ",""" & Category & """,,,""" & Descr & """," & DescrArgs & ")"

End Sub



Sub Auto_close()
  
  Dim FName, FLib
  Dim I As Integer
  FName = Array("DIVIDE", "MULTIPLY")
  FLib = Array("CharPrevA", "CharNextA")
  For I = 1 To 2
    With Application
      .ExecuteExcel4Macro "UNREGISTER(" & FName(I) & ")"
      .ExecuteExcel4Macro "REGISTER(" & Lib & _
        ",""CharPrevA"",""P"",""" & FName(I) & """,,0)"
      .ExecuteExcel4Macro "UNREGISTER(" & FName(I) & ")"
    End With
  Next
  
End Sub
使用这个例子可以添加自定义函数说明。
对于xp系统,Const Lib = """c:\windows\system32\user32.dll""",其他系统需要找到user32.dll的路径填入。输入代码保存后,需要重启excel改函数才能加入说明
代码原地址:http://www.j-walk.com/ss/excel/eee/eee009.txt
基本原理是利用了Excel4Macro来伪造一个自定义函数同名的dll,使用dll的说明在添加自定义函数的说明,而excel正常调用的函数为自定义函数,参数显示为dll。
国人的一个例子:http://www.excelba.com/Soft/Html/131.html    ( 给自定义函数添加说明的示例)

其他添加自定义函数说明的方法总结:http://hi.baidu.com/%B4%BA%B7%D6 ... a7b6ae6d811925.html

TA的精华主题

TA的得分主题

发表于 2011-8-1 11:35 | 显示全部楼层

自定义函数的参数添加描述信息

Const Lib = """c:windowssystem32user32.dll"""
Option Base 1

Private Function Multiply(N1 As Double, N2 As Double) As Double
  Multiply = N1 * N2
End Function


Private Function Divide(N1 As Double, N2 As Double) As Double
  Divide = N1 / N2
End Function



Sub Auto_open()

  Register "DIVIDE", 3, "Numerator,Divisor", 1, "Division", _
    "Divides two numbers", """Numerator"",""Divisor """, "CharPrevA"
  Register "MULTIPLY", 3, "Number1,Number2", 1, "Multiplication", _
    "Multiplies two numbers", """First number"",""Second number """, _
    "CharNextA"

End Sub


Sub Register(FunctionName As String, NbArgs As Integer, _
  Args As String, MacroType As Integer, Category As String, _
  Descr As String, DescrArgs As String, FLib As String)
  
  Application.ExecuteExcel4Macro _
  "REGISTER(" & Lib & ",""" & FLib & """,""" & String(NbArgs, "P") _
  & """,""" & FunctionName & """,""" & Args & """," & MacroType _
  & ",""" & Category & """,,,""" & Descr & """," & DescrArgs & ")"

End Sub



Sub Auto_close()
  
  Dim FName, FLib
  Dim I As Integer
  FName = Array("DIVIDE", "MULTIPLY")
  FLib = Array("CharPrevA", "CharNextA")
  For I = 1 To 2
    With Application
      .ExecuteExcel4Macro "UNREGISTER(" & FName(I) & ")"
      .ExecuteExcel4Macro "REGISTER(" & Lib & _
        ",""CharPrevA"",""P"",""" & FName(I) & """,,0)"
      .ExecuteExcel4Macro "UNREGISTER(" & FName(I) & ")"
    End With
  Next
  
End Sub
使用这个例子可以添加自定义函数说明。
对于xp系统,Const Lib = """c:windowssystem32user32.dll""",其他系统需要找到user32.dll的路径填入。输入代码保存后,需要重启excel改函数才能加入说明
代码原地址:http://www.j-walk.com/ss/excel/eee/eee009.txt
基本原理是利用了Excel4Macro来伪造一个自定义函数同名的dll,使用dll的说明在添加自定义函数的说明,而excel正常调用的函数为自定义函数,参数显示为dll。
国人的一个例子:http://www.excelba.com/Soft/Html/131.html    ( 给自定义函数添加说明的示例)
国外的一个例子:http://www.jkp-ads.com/Articles/RegisterUDF00.asp
其他添加自定义函数说明的方法总结:http://hi.baidu.com/%B4%BA%B7%D6 ... a7b6ae6d811925.html

2009050241525641(1).rar

20.72 KB, 下载次数: 263

TA的精华主题

TA的得分主题

发表于 2011-10-25 11:55 | 显示全部楼层
MacroOptions 方法
参阅应用于示例特性对应于“宏选项”对话框中的选项。还可使用此方法将用户定义函数 (UDF) 显示在“插入函数”对话框的内置类别或新类别中。

expression.MacroOptions(Macro, Description, HasMenu, MenuText, HasShortcutKey, ShortcutKey, Category, StatusBar, HelpContextID, HelpFile)
expression      必需。该表达式返回一个 Application 对象。

Macro    Variant 类型,可选。宏的名称或用户定义函数 (UDF) 的名称。

Description      Variant 类型,可选。宏的说明。

HasMenu      Variant 类型,可选。忽略该参数。

MenuText      Variant 类型,可选。忽略该参数。

HasShortcutKey      Variant 类型,可选。如果该值为 True,则为此宏指定一个快捷键(必须指定 ShortcutKey 参数)。如果该值为 False,则不为此宏指定快捷键。如果此宏已经指定了快捷键,则将该参数设为 False 可清除已指定的快捷键。默认值为 False。

ShortcutKey      Variant 类型,可选。如果 HasShortcutKey 参数为 True,则必选;否则忽略该参数。指定快捷键。

Category    Variant 类型,可选。用于指定现有的宏函数类别的整数(例如,财务、日期与时间或用户定义)。请参阅说明部分,以确定映射到内置类别的整数。还可指定自定义类别的字符串。如果提供了一个字符串,它就会作为类别名称显示在“插入函数”对话框中。如果此类别名称从未使用过,则新的类别会用此名称定义。如果使用的类别名称与某个内置名称相同,则 Excel 会将用户定义的函数映射到此内置名称。

StatusBar      Variant 类型,可选。该宏的状态栏文字。

HelpContextId      Variant 类型,可选。用于指定对应于该宏的帮助主题上下文标识符的整数。

HelpFile      Variant 类型,可选。包含 HelpContextId 定义的帮助主题的帮助文件名。

说明
下表列出了哪些整数被映射到可在 Category 参数中使用的内置类别。

整数 类别
1 财务
2 日期与时间
3 数学与三角函数
4 统计
5 查找与引用
6 数据库
7 文本
8 逻辑
9 信息
10 命令
11 自定义
12 宏控件
13 DDE/ 外部
14 用户定义
15 第一个自定义类别
16 第二个自定义类别
17 第三个自定义类别
18 第四个自定义类别
19 第五个自定义类别
20 第六个自定义类别
21 第七个自定义类别
22 第八个自定义类别
23 第九个自定义类别
24 第十个自定义类别
25 第十一个自定义类别
26 第十二个自定义类别
27 第十三个自定义类别
28 第十四个自定义类别
29 第十五个自定义类别
30 第十六个自定义类别
31 第十七个自定义类别
32 第十八个自定义类别

示例
本示例将用户定义的宏“TestMacro”添加到名为“My Custom Category”的自定义类别中。运行本示例后,可以看到包含“TestMacro”用户定义函数的“My Custom Category”显示在“插入函数”对话框的“或选择类别”下拉列表中。

Function TestMacro()
    MsgBox ActiveWorkbook.Name
End Function

Sub AddUDFToCustomCategory()
    Application.MacroOptions Macro:="TestMacro", Category:="My Custom Category"
End Sub

TA的精华主题

TA的得分主题

发表于 2011-10-25 11:45 | 显示全部楼层
这个知识点对于2011年来说 过时了
Excel 2010自身支持定义函数说明,极其简单

TA的精华主题

TA的得分主题

发表于 2011-10-25 11:31 | 显示全部楼层
奇怪,上面的例子,增加了一个函数就不行。只能是两个。

TA的精华主题

TA的得分主题

发表于 2011-12-20 08:57 | 显示全部楼层
老外的就是好啊。代码写的很规范。

TA的精华主题

TA的得分主题

发表于 2012-2-17 16:45 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-3-2 09:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
感谢楼主大大啊

TA的精华主题

TA的得分主题

发表于 2012-5-9 18:27 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-1 17:21 , Processed in 0.042897 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表