Как получить доступ к объекту на основе списка (Of T) из COM-клиента - PullRequest
2 голосов
/ 22 февраля 2011

Все

Я пишу в VS2005, что, на первый взгляд, должно быть относительно простой DLL, что позволит мне создавать список пользовательских объектов при вызове из Excel 2007.это у меня есть столбец и класс столбцов.Подразумевается, что Columns - это список объектов Column.Соответствующие классы определены следующим образом:

<Guid("1CD713EC-D140-4e8b-92D7-99E098694A85")> _
<InterfaceType(ComInterfaceType.InterfaceIsDual)> _
Public Interface IColumn
    Property Name() As String
End Interface
<Guid("6B146BF8-E905-4ed1-84D5-147B1A510AE3")> _
<ClassInterface(ClassInterfaceType.None)> _
Public Class Column
    Implements IColumn
    Private _name As String
    Public Sub New()
        MyBase.new()
    End Sub
    Public Property Name() As String Implements IColumn.Name
        Get
            Return _name
        End Get
        Set(ByVal value As String)
            _name = value
        End Set
    End Property
End Class

<Guid("C2C98A9B-DF7B-4ce1-9F48-EF2B0E63A8E8")> _
<InterfaceType(ComInterfaceType.InterfaceIsDual)> _
Public Interface IColumns
    Sub Add(ByVal col As Column)
End Interface

<Guid("CA76EAF0-1B87-402a-8720-933EDFA0CAE4")> _
<ClassInterface(ClassInterfaceType.None)> _
Public Class Columns
    Inherits List(Of Column)
    Implements IColumns
    Public Sub New()
        MyBase.New()
    End Sub
    Public Overloads Sub Add(ByVal col As Column) Implements IColumns.Add
        col.Name = col.Name.ToUpper
        MyBase.Add(col)
    End Sub
End Class

Следующий код работает, как ожидается, в VS2005:

Dim col As Column
Dim cols As New Columns
col = New Column
col.Name = "DefType"
cols.Add(col)

Однако при вызове из Excel с использованием VBA:

Dim col As PiMdbManager.Column
Dim cols As PiMdbManager.Columns
Dim cnt As Integer
Dim colName As String

head = header.Value

For cnt = 0 To header.Count - 1
    colName = header(1, cnt + 1)
    If colName <> "" Then
        Set col = New PiMdbManager.Column
        col.Name = header(1, cnt + 1)
        cols.Add (col)
    End If
Next cnt

Строка «cols.Add (col)» генерирует ошибку «Объект не поддерживает это свойство или метод»..Add метод виден в VBA через intellisense.

Может кто-нибудь объяснить мне, что здесь происходит, и как я могу достичь того, что я пытаюсь сделать.

С уважением

Пол Дж.

1 Ответ

0 голосов
/ 22 февраля 2011

Попробуйте удалить скобки в VBA в вашем cols.add (col), чтобы он выглядел следующим образом: cols.Add col

или вы можете использовать ключевое слово "Позвонить":

Call cols.Add (col)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...