Как передать переменную массива из VBA в функцию vb.net - PullRequest
2 голосов
/ 02 марта 2012

Я пытаюсь передать массив, созданный из Access VBA, в функцию .net.

У меня нет проблем с com, поскольку я могу ссылаться на библиотеку из VBA и вызывать простую функцию.

Моя проблема возникает, когда я пытаюсь передать массив в функцию vb.net.

код vb.net

            <ComClass(ComClass1.ClassId, ComClass1.InterfaceId, ComClass1.EventsId)> _
            Public Class ComClass1
                Public otag As String()
            #Region "COM GUIDs"
                ' These  GUIDs provide the COM identity for this class 
                ' and its COM interfaces. If you change them, existing 
                ' clients will no longer be able to access the class.
                Public Const ClassId As String = "a23f3cee-72c2-4181-9a0a-a8356a42dfcd"
                Public Const InterfaceId As String = "9708311e-492c-4d29-b902-ef53b8db2ae1"
                Public Const EventsId As String = "f785175f-d829-459b-bcbf-405266c1d5a2"
            #End Region

                ' A creatable COM class must have a Public Sub New() 
                ' with no parameters, otherwise, the class will not be 
                ' registered in the COM registry and cannot be created 
                ' via CreateObject.
                Public Sub New()
                    MyBase.New()
                End Sub

                Function CreateAnAsset() As String


                    Return "whohhhoo" 'otag


                End Function

            End Class

Теперь для простого звонка от VBA

Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * from Additions_Uploaded")
'DataFieldCount = rs.GetRows(rs.Fields.Count)
AdditionRows = DCount("*", "Additions_Uploaded")

DataFieldCount = rs.GetRows(AdditionRows)

rs.Close
db.Close

AdditionRows = DCount("*", "Additions_Uploaded")
numColumns = UBound(DataFieldCount, 2) + 1
ReDim COLUMN0(0 To numColumns - 1) 'As String
ReDim COLUMN1(0 To numColumns - 1)
ReDim COLUMN2(0 To numColumns - 1)
ReDim COLUMN3(0 To numColumns - 1)
ReDim COLUMN4(0 To numColumns - 1)
ReDim COLUMN5(0 To numColumns - 1)
ReDim COLUMN6(0 To numColumns - 1)
ReDim COLUMN7(0 To numColumns - 1)
ReDim COLUMN8(0 To numColumns - 1)
ReDim COLUMN9(0 To numColumns - 1)
ReDim COLUMN10(0 To numColumns - 1)
ReDim COLUMN11(0 To numColumns - 1)
ReDim COLUMN12(0 To numColumns - 1)
ReDim COLUMN13(0 To numColumns - 1)
ReDim COLUMN14(0 To numColumns - 1)
ReDim COLUMN15(0 To numColumns - 1)
ReDim COLUMN16(0 To numColumns - 1)
ReDim COLUMN17(0 To numColumns - 1)
ReDim COLUMN18(0 To numColumns - 1)
ReDim COLUMN19(0 To numColumns - 1)
ReDim COLUMN20(0 To numColumns - 1)
ReDim COLUMN21(0 To numColumns - 1)
ReDim COLUMN22(0 To numColumns - 1)
ReDim COLUMN23(0 To numColumns - 1)
ReDim COLUMN24(0 To numColumns - 1)
ReDim COLUMN25(0 To numColumns - 1)
' ReDim Inv(0 To numRecords - 1) As ujk
MsgBox "There are " & numColumns & " fields in the upload table."
MsgBox AdditionRows & " Is the number of records in the upload table."

Close #1
'Open "C:\Transient\BannerText.txt" For Output As #1

For i = 0 To numColumns - 1
    COLUMN0(i) = DataFieldCount(0, i)
    COLUMN1(i) = DataFieldCount(1, i)
    COLUMN2(i) = DataFieldCount(2, i)
    COLUMN3(i) = DataFieldCount(3, i)
    COLUMN4(i) = DataFieldCount(4, i)
    COLUMN5(i) = DataFieldCount(5, i)
    COLUMN6(i) = DataFieldCount(6, i)
    COLUMN7(i) = DataFieldCount(7, i)
    COLUMN8(i) = DataFieldCount(8, i)
    COLUMN9(i) = DataFieldCount(9, i)
    COLUMN10(i) = DataFieldCount(10, i)
    COLUMN11(i) = DataFieldCount(11, i)
    COLUMN12(i) = DataFieldCount(12, i)
    COLUMN13(i) = DataFieldCount(13, i)
    COLUMN14(i) = DataFieldCount(14, i)
    COLUMN15(i) = DataFieldCount(15, i)
    COLUMN16(i) = DataFieldCount(16, i)
    COLUMN17(i) = DataFieldCount(17, i)
    COLUMN18(i) = DataFieldCount(18, i)
    COLUMN19(i) = DataFieldCount(19, i)
    COLUMN20(i) = DataFieldCount(20, i)
    COLUMN21(i) = DataFieldCount(21, i)
    COLUMN22(i) = DataFieldCount(22, i)
    COLUMN23(i) = DataFieldCount(23, i)
    COLUMN24(i) = DataFieldCount(24, i)
    COLUMN25(i) = DataFieldCount(25, i)
    ' Inv(i).Nr = data(1, i)

    Dim RecordNumber As Integer
    Dim TextRecord As String

    TextRecord = DataFieldCount(0, i) & " " & DataFieldCount(1, i) & "  " & DataFieldCount(2, i) & "  " & DataFieldCount(3, i) & "  " & DataFieldCount(4, i) & "  " & _
      DataFieldCount(5, i) & " " & DataFieldCount(6, i) & "  " & DataFieldCount(7, i) & "  " & DataFieldCount(8, i) & "  " & DataFieldCount(9, i) & "  " & _
      DataFieldCount(10, i) & " " & DataFieldCount(11, i) & "  " & DataFieldCount(12, i) & "  " & DataFieldCount(13, i) & "  " & DataFieldCount(14, i) & "  " & _
      DataFieldCount(15, i) & " " & DataFieldCount(16, i) & "  " & DataFieldCount(17, i) & "  " & DataFieldCount(18, i) & "  " & DataFieldCount(19, i) & "  " & _
      DataFieldCount(20, i) & " " & DataFieldCount(21, i) & "  " & DataFieldCount(22, i) & "  " & DataFieldCount(23, i) & "  " & DataFieldCount(24, i) & "  " & _
      DataFieldCount(25, i)
    'Print #1, TextRecord
Next i

' serv.
serv.otag (COLUMN25)

Моя последняя строка пытается передать массив строк с типизированным вариантом в VBA в открытую переменную otag, но я получаю сообщение об ошибке.

объект не поддерживает это свойство или метод

Повторюсь, я могу сделать простую строку. Кажется, любая попытка отправить массив дает мне ошибку в коде VBA.

1 Ответ

1 голос
/ 30 апреля 2012

Если я что-то не упустил, похоже, что вы вызываете свойство otag, как если бы это был метод, а не устанавливаете для него новое значение (например, serv.otag = COLUMN25)

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