2012-03-01 47 views
2

私はAccess VBAから構築した配列を.net関数に渡そうとしています。VBAからvb.net関数に配列変数を渡す方法

私は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) 

のために私の最後の行はotagのパブリック変数にVBAでバリアントを入力された文字列配列を渡そうしかし、私は言うエラーを取得します。

オブジェクトが、私は改めて、このプロパティまたはメソッド

をサポートしていない、私は単純な文字列を行うことができます。配列を送信しようとすると、VBAコードにエラーが発生します。

答えて

1

何かが欠けていない限り、otagプロパティを新しい値(例:serv.otag = COLUMN25)に設定するのではなく、メソッドであるかのように呼び出すようです。

関連する問題