Я написал сборку в 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
к ссылкам и создал форму с парой элементов управления (один из которых - элемент управления Listbox
с именем lstResults
).Под управлением основной кнопки у меня есть следующий код 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
Редактировать: Это выполняется без ошибок, однако, когда я запрашиваю окно Immediate с помощью ?results
после добавления некоторого фиктивного кода ниже, чтобы позволить мнепоместив точку останова, я получаю следующую ошибку:
Ошибка времени выполнения '13' - Несоответствие типов
По сути, я хочу переписать следующий код C # в VBA:
var results = c.SearchPostcodes(postcodeToSearch);
foreach(var x in results)
{
lstResults.Items.Add(x);
}
Заранее спасибо