我已在access-programmers.co.uk上交叉发布
请在该论坛上发布回复。
我已经在c#3.5 ..中编译了一个dll,在其中设置了解决方案属性以注册COM互操作的生成。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace SBG_TestWithVBA
{
[ClassInterface(ClassInterfaceType.AutoDual)]
public class TestHello
{
[ComVisible(true)]
public string SayHello(string name)
{
string message = "Hello " + name;
return message;
}
public string HelloWorld()
{
string message = "Hello World!";
return message;
}
}
}
然后我使用以下命令注册了程序集和tlb文件
“” C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ regasm.exe“” \ sbgfs01 \ users \ Vincent Pirolli \ My Docs \ Visual Studio 2008 \ Projects \ TestWithVBA \ TestWithVBA \ bin \ Release \ SBG_TestWithVBA.dll“ / tlb:“ \ sbgfs01 \ users \ Vincent Pirolli \ My Docs \ Visual Studio 2008 \ Projects \ TestWithVBA \ TestWithVBA \ bin \ Release \ SBG_TestWithVBA.tlb”
然后,从“工具”>“引用”菜单中将tlb文件添加到vba中。
我的VBA代码如下:
Sub test()
Dim f As SBG_TestWithVBA
Set f = New SBG_TestWithVBA
f.HelloWorld
End Sub
即使Intellisense在VBA编辑器中工作,我也会收到以下错误消息:
“自动化错误
该系统找不到指定的文件。”
任何人有任何想法吗?我在以前的帖子中有文章,但是找不到解决方案。
好的,这真让我讨厌。
我设法使它工作..但我不明白为什么..
在Visual Studio的解决方案属性中。在“构建”选项卡上,将“注册COM互操作”设置为true,在“应用程序>装配信息”中,将“使装配COM-Visible” = TRUE。
我在共享驱动器中有VS项目文件。现在,如果我将构建位置设置为共享驱动器上项目文件夹下的bin文件夹,则当我从VBA调用时它不起作用。但是,如果我将构建文件夹设置为本地C驱动器上的文件夹,则它将从VBA调用时工作正常。
有任何想法吗?
最佳答案
您正在注册的程序集似乎在网络共享上。在这种情况下,.net程序集具有不同的安全模型。
您是否尝试过将程序集和TLB放在本地目录中,然后在“工具”>“引用”菜单中添加TLB?
另外-这可能完全不合时宜-但是DLL是否需要在RegSvr32中注册,以便可寻址?