【发布时间】:2012-04-16 09:46:08
【问题描述】:
我用 C# 编写了一个程序集,它返回一个字符串数组,C# 代码如下:
[ComVisible(true)]
public class PostcodeFinder
{
public string[] SearchPostcodes(string postCode)
{
var searchService = new QuickAddress("http://x.x.x.x:xxxx/")
{Engine = QuickAddress.EngineTypes.Singleline, Flatten = true};
var mPicklist = searchService.Search("GBR", postCode, PromptSet.Types.OneLine);
var x = mPicklist.Picklist.Items.Count();
var resultsToReturn = new string[x];
for (var i = 0; i < x; i++)
{
resultsToReturn[i] = mPicklist.Picklist.Items[i].PartialAddress;
}
return resultsToReturn;
}
}
然后我构建了这个程序集,一定要勾选属性中的Register for COM interop 框。然后在 Microsoft Access 中,我将.tlb 文件添加到引用中,并创建了一个带有几个控件的表单(其中一个是名为lstResults 的Listbox 控件)。在主按钮控件下,我有以下 VBA 代码:
Private Sub btnSearch_Click()
Dim postcodeToSearch As String
postcodeToSearch = Me.txtPostcode
Dim c As New PostcodeFinder
Dim results
results = c.SearchPostcodes(postcodeToSearch)
End Sub
编辑:这运行没有错误,但是当我在下面放置一些虚拟代码以允许我放置断点后使用?results 查询即时窗口时,我收到以下错误:
运行时错误 '13' - 类型不匹配
实际上我想在 VBA 中重写以下 C# 代码:
var results = c.SearchPostcodes(postcodeToSearch);
foreach(var x in results)
{
lstResults.Items.Add(x);
}
提前致谢
【问题讨论】: