首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将用户定义的函数添加到Visual Studio Excel外接程序

将用户定义的函数添加到Visual Studio Excel外接程序
EN

Stack Overflow用户
提问于 2012-12-19 23:52:03
回答 4查看 5.4K关注 0票数 12

在visual studio中,我有一个Excel2010外接程序项目。如何让项目创建以下模块:

我知道我可以将该工作簿与该模块一起保存,然后在我的插件中使用它。如果我可以让我外接程序创建模块,那就太好了……

EN

回答 4

Stack Overflow用户

发布于 2012-12-22 10:00:16

可以创建模块。但是,要执行此操作,必须在Excel中选择“信任对VB项目模型的访问”设置。如果未选择信任设置,则会引发访问被拒绝的错误。

代码语言:javascript
运行
复制
using Excel = Microsoft.Office.Interop.Excel;
using VB = Microsoft.Vbe.Interop;

Excel.Application eApp = new Excel.Application();

eApp.Visible = true;
Excel.Workbook eBook = eApp.Workbooks.Add();

VB.VBProject eVBProj = (VB.VBProject)eBook.VBProject;
VB._VBComponent vbModule = eVBProj.VBE.ActiveVBProject.VBComponents.Add(VB.vbext_ComponentType.vbext_ct_StdModule);

String functionText = "Function MyTest()\n";
      functionText += "MsgBox \"Hello World\"\n";
      functionText += "End Function";

vbModule.CodeModule.AddFromString(functionText);
票数 10
EN

Stack Overflow用户

发布于 2012-12-22 03:19:12

我不认为VSTO支持Excel的UDF,一般的建议是使用自动化插件(正如Sid的链接所暗示的那样)。

另一种选择是从VBA调用托管VSTO函数。再说一次,这不是推荐的,但也是可能的。

这里是从VBA调用托管函数的任何简单方法。

使用VSTO中的函数创建一个类

代码语言:javascript
运行
复制
<System.Runtime.InteropServices.ComVisible(True)> _
Public Class MyManagedFunctions
    Public Function GetNumber() As Integer
        Return 42
    End Function
End Class

在VSTO中将类连接到VBA

代码语言:javascript
运行
复制
Private Sub ThisWorkbook_Open() Handles Me.Open
    Me.Application.Run("RegisterCallback", New MyManagedFunctions)
End Sub

为托管代码创建Hook并为VBA中的函数创建包装

在电子表格或文档的VBA模块中

代码语言:javascript
运行
复制
Dim managedObject As Object

Public Sub RegisterCallback(callback As Object)
    Set managedObject = callback
End Sub

Public Function GetNumberFromVSTO() As Integer
    GetNumberFromVSTO = managedObject.GetNumber()
End Function

现在您可以在单元格中输入=GetNumberFromVSTO(),当excel启动时,单元格值应为42。

http://blogs.msdn.com/b/pstubbs/archive/2004/12/31/344964.aspx

票数 3
EN

Stack Overflow用户

发布于 2012-12-28 01:18:27

如果您真正想要做的是编写VSTO,或者组合.NET应用级命令和UDFs,那么使用VSTO目前不是一个好的解决方案:

我推荐使用Addin Express (付费)或Excel DNA (免费)。

这两者都允许您创建Excel外接程序和自动化UDF外接程序(XLL外接程序提供了显著的性能优势,但对.NET对象模型的访问略有限制)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13956104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档