如何将用户定义的函数添加到Excel?

时间:2014-07-28 17:16:33

标签: excel vba excel-vba excel-formula excel-2010

我有一个简单的存储过程,当您为其提供ID时,它会返回Description和Name。我需要在多个Excel表格中启用此内联。像=ItemLookup('12345')之类的东西会返回上述信息。

我没有用Excel编程做很多事情,我只是想知道我的选择是什么来解决这个问题。这是VBA还是应该是我注册的外部DLL?两者都觉得有点矫枉过正,但后来才意识到我不知道他们是不是。我真的很想使用VSTO,但听起来这对于Cell级UDF是不可能的,而不必用一些VBA来修改每个工作簿。

2 个答案:

答案 0 :(得分:1)

将UDF函数添加到Excel的最佳方法是使用Excel-DNA(我开发的一个免费的开源库),任何.NET语言 - VB.NET,C#和F#都是细

要开始使用,您需要创建一个新的“类库”#39;在Visual Studio(任何版本)中安装项目,安装' Excel-DNA'来自NuGet包管理器的包,并添加您的代码:

Public Module MyDataAccessFunctions
    <ExcelFunction(Description:="Gets the Item from the database")>
    Public Function ItemLookup(code As String) As String
        ' Here you have to do some work to get the data
        Return "Hello " & code
    End Function
End Module

按F5构建并启动Excel,您已完成 - 尝试将=ItemLookup("Paladin")放入单元格。

生成的加载项是单个.xll文件,您可以在没有任何安装或管理员权限的.NET上复制和使用该文件。它也适用于旧的Excel版本。

支持的最佳位置(包括绝对的初学者和问题)是Excel-DNA Google group

答案 1 :(得分:0)

您可以使用Excel轻松创建VBA UDF,只需按下alt + f8,右键单击屏幕左侧项目层次结构中的项目,然后单击添加模块。

这是一个快速的Hello World功能,您只需粘贴到模块中,然后单击播放(或从工作表中添加alt + f8)

sub test()
msgbox "helloworld"
end sub

如果是我,我可能只是创建一个需要搜索的文件路径列表。然后创建一个VBA宏,在excel中打开它们,搜索它们以获取密钥,并从找到密钥的行返回其他信息。

  • 您可以使用&#39; Application.Open&#39;打开文件。方法,简单地传入 文件路径作为参数。 &#39; Application.Open&#39;返回一个工作簿 对象。
  • 每个工作簿都有几个工作表,您可以访问它们 通过工作手册的工作表&#39;属性
  • 在工作簿中获取每个使用过的单元格可以通过循环使用“已使用过的”工具来完成。 每个工作表中的属性
  • 获取单元格的值以便从单元格的值中进行比较&#39;属性
  • 细胞也有一排&#39;物业,以便您可以在同一行找到其他物品

如果你习惯了VBA,你可以在不到一个小时的时间内完成这项工作。但是,既然你刚刚开始它可能需要3个多小时,因为你将有更多的研究/调试