我使用regasm.exe注册了一个 COM DLL ,现在我正在尝试编写一个使用 DLL 中的类的 VBA 脚本。DLL 是ExcelDataReaderLibrary.dll
. 在 C# 源代码中,该类描述如下(包括来自此库的代码):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Data;
using Excel;
namespace ExcelDataReaderLibrary
{
public class ExcelDataReader
{
public void readSheet(string filePath,string sheetName,string outPath)
{
// code for method here
}
}
}
我的assembly.cs文件包括以下内容:
[assembly: ComVisible(true)]
[assembly: Guid("b1e78f8f-9ab0-46d8-beac-b843656aacdb")]
当我打开 VBA 编辑器并转到参考时,我看到了ExcelDataReaderLibrary
. 请注意,与此引用关联的文件是ExcelDataReaderLibrary.tlb,而不是ExcelDataReaderLibrary.dll。在我检查了这个参考之后,我想ExcelDataReader
在 VBA 中创建和使用一个对象,如下所示:
Sub x()
Dim xyz As New ExcelDataReaderLibrary.ExcelDataReader
xyz.readSheet "c:\mypath\testfile.xlsx", "Sheet1", "c:\outputPath"
End Sub
该对象已成功创建,但readSheet
出现此错误:
Automation error
The system cannot find the file specified.
此外,ExcelDataReaderLibrary
命名空间有 Intellisense,但对象没有 Intellisense ExcelDataReader
。我想我的班级已经注册但没有注册它的方法——我必须对 Guid 做一些不同的事情吗?如何从我的 VBA 代码中调用该方法?