是否可以为函数分配别名?

8 excel alias vba function excel-vba

我正在编写一个简单的函数,例如:

Function myFunction() As Variant
    'Some rules
End Function
Run Code Online (Sandbox Code Playgroud)

对于上面的函数,是否可以像API调用那样分配Alias

显然这不是正确的语法,但你明白了:

Function myFunction() Alias myFunc As Variant
    'Some rules
End Function
Run Code Online (Sandbox Code Playgroud)

这将允许我使用任一名称:

Sub Test()
    Debug.Print myFunction
    Debug.Print myFunc
End Sub
Run Code Online (Sandbox Code Playgroud)

ash*_*awg 23

我不明白为什么你需要为VBA函数提供VBA别名.

API别名用于引用DLL中的函数或其他对象,如果它的"给定名称"不能在需要它的模块中使用.

别名 - 表示正在调用的过程在DLL中具有另一个名称.当外部过程名称与关键字相同时,这很有用.当DLL过程与公共变量,常量或同一范围内的任何其他过程具有相同的名称时,也可以使用别名.如果DLL命名约定不允许DLL过程名称中的任何字符,则别名也很有用.(来源)

...但要回答您的问题,请确保您可以为函数创建备用名称,只需对代码稍作修改即可:


你的功能:

Function myFunction() As Variant
    'Some rules
End Function
Run Code Online (Sandbox Code Playgroud)

分配备用名称:

Function myFunc() As Variant
   myFunc = myFunction
End Function
Run Code Online (Sandbox Code Playgroud)

这将允许您使用任一名称:

Sub Test()
    Debug.Print myFunction
    Debug.Print myFunc
End Sub
Run Code Online (Sandbox Code Playgroud)

编辑: "不记得UDF名称"

(当我说我不明白为什么你需要这样做时,我以为你没有像我这样的记忆! 现在我理解你的推理,给同一个函数赋予多个名字!)

什么,你有没有记住所有自定义VBA函数的名称和语法,除了1000的内置函数,过程和对象,以及看似无限的属性,方法和类名列表?

我也不.

在VBA中编码时有助于触发我的内存的功能是 属性/方法列表.

开始键入函数或过程的名称并按Ctrl+J,您将获得自定义内置函数,方法,过程等的列表.**

Ctrl + J exanmple

我注意到你的样本函数名称都以" my" 开头.这可能只是为了说明的目的,但是,像这样的特定命名约定也可以通过在"属性/方法"对话框中将函数分组在一起.


更多记忆方法如何运作以及它们被称为:

您还可以向UDF(用户定义函数)添加描述,这将在工作表上输入函数名称时显示:

UDF描述截图

请参阅:如何在用户定义的函数上放置"工具提示"


有关:


把它更进一步比的描述中,注册的用户定义函数不仅允许一个描述的创建功能,但是关于每个的详细也信息函数的参数和它们的数据类型; 您甚至可以指定快捷键,添加自定义" 帮助 "文件/页面的链接,甚至为UDF 分配类别.

这些扩展属性显示在Insert Function对话框中,单击可访问公式栏左侧的按公式栏左侧的按钮,或按Shift+ F3:

插入功能对话框

Excel没有用于编辑参数描述的内置界面,因此需要VBA.相关文档很难找到.


有关注册用户定义函数的代码和信息 - :


创建功能区按钮以列出VBA过程

我没有尝试过这个,但我可以看到它是如何非常方便的,特别是因为它可以很容易进一步定制,可能还有项目特定的功能列表和其他信息.

可以在功能区中添加一个按钮,单击该按钮会显示VBA过程/功能列表,使用XML和VBA从按钮显示用户表单.还可以选择过程列表保存到文本文件中.

图片来自:https://i-msdn.sec.s-msft.com/dynimg/IC297331.jpg

您可以从"开发人员"选项卡上的"宏"按钮查看工作簿中的过程.但是,"宏"对话框中仅显示模块和工作表中的无参数子例程.带参数的函数和子程序不会显示.此列中描述的代码显示工作簿中的所有子例程和函数.

此处提供更多信息和完整代码.


编写VBA代码的VBA代码!?

通过以编程方式操作VBA编辑器(VBE),您可以在VBA中编写读取或修改其他VBA项目,模块和过程的代码,并可用于自动执行与开发相关的任务.这称为可扩展性,因为它扩展了编辑器 - 您可以使用VBA代码创建新的VBA代码.您可以使用这些功能编写用于创建,更改或删除VBA模块和代码过程的自定义过程.

令人惊奇的芯片皮尔逊做了一遍,有详细的说明和提供完整的代码在这里的一些有趣的事情扩展能为你做.

Chip页面上的部分代码列表(在此处):

  • 在项目中添加/删除/重命名模块
  • 添加/删除/重命名模块中的过程
  • 在项目之间复制模块
  • 在代码模块中创建新过程
  • 创建一个事件过程
  • 列出模块中的所有过程
  • 阅读程序声明
  • 在模块中搜索文本
  • 修复VBE中的屏幕闪烁
  • 将VBComponent导出到文本文件
  • 测试VBC组件是否存在
  • 确定与VBProject关联的工作簿
  • 计算Module/Project/Component中的代码行数

这些方法使用VBA可扩展性 [库](http://www.exceltoolset.com/setting-a-reference-to-the-vba-extensibility-library-by-code/)(参考),并要求以编程方式访问VBA项目,这是Excel选项中的安全设置.有关详细信息,请参阅Chip的页面.

Chip的页面上也提供了有关VBA定制菜单的优秀信息和代码,这可能有助于简化开发人员自己的工作.


如果控制甚至拦截内置命令的功能,VBA看似"被遗忘"的能力.这也可以用来造福于开发者(尤其是一个贫穷的记忆!)...更多信息和示例,从微软在这里.


  • @TheNotSoGuru为什么不使用一致的命名约定?这种基于别名的方法迟早会成为一种调试问题. (3认同)
  • @TheNotSoGuru正如John Coleman所说,解决你的内存问题只是维持一致的命名约定.所有函数都应该有描述性的名称,它们应该是动词(例如verify,get,pull等).我发现'Get'对于返回某些东西的函数最有用.我也强烈推荐不使用缩写的名称(所以VerifyRange而不是VerifyRng),但这是个人偏好.一致的名字将远远超过别名. (2认同)
  • 另一个有用的记忆辅助工具是将相关的功能放在不同的模块中并重命名你的模块 - 我几乎总是有一个名为G的模块用于全局变量,一个名为DB用于数据库连接和功能,一个用于实用程序功能.然后键入模块的名称,后跟dot,并自动列出该模块中的所有公共函数,就像类模块一样. (2认同)