Все
Я пишу в 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.
Может кто-нибудь объяснить мне, что здесь происходит, и как я могу достичь того, что я пытаюсь сделать.
С уважением
Пол Дж.