Array zwischen VB6 und VBA

Hallo
Wer kann mir weiter helfen?
Ich möchte eine Arrayvariable Str(1 to 10) as String in Vb6(Active-X-dll) definieren und diese nach Excel übergeben.

Wie funktioniert das?

Das Codebeispiel unten zeigt, wie ich eine Variable verschieben kann, nun möchte ich aber die Arreivariabeln nicht einzeln, sondern als Array verschieben.

Besten dank für jede Antwort.
Grüsse Sebastian

Code Auszug VB6 'In Klassenmodul kFunktion
Public Function GetSettings(ByVal str) As String
mFilesEinlesen.ReadInManager
GetSettings = str
end Function

Code Auszug VBA
'Deklaration der Dll
NHKDatenDLLPath = ActiveWorkbook.Path & IIf(Right(ActiveWorkbook.Path, 1) = „“, „“, „“) & „NHKDaten2.dll“
Shell "regsvr32 /s " & Chr(34) & NHKDatenDLLPath & Chr(34)
Set NHK = CreateObject(„NHKDatenVerarbeitungsDLL.kFunktion“)

'Aufruf der Dll
For i = 1 To 10
str(i) = NHK.GetSettings(str, i, 3)
If str(i) = „“ Then Exit For
Next i

Hallo,

ich kenne mich mit Excel nicht aus und habe es auch nicht, kann also nichts testen.

Wenn von DLLs eine Variable zurückgegeben wird, die ein Array enthalten soll, wird das mit benutzerdefinieren Typen realisiert.
In VB sieht die Übergabe etwa so aus:

Option Explicit

Private Type MyText
 Txt(0 To 10)
End Type

Private Sub Command1\_Click()
 Dim i As Integer
 Dim St As MyText
 For i = 0 To 10
 St.Txt(i) = Str(i)
 Next
 anzeigen St
End Sub

Private Sub anzeigen(ByRef St As MyText)
 Dim i As Integer
 For i = 0 To 10
 List1.AddItem St.Txt(i)
 Next
End Sub

Hilft das?

Gruß, Rainer

Danke für den Tipp. Frage, wo ist dann der Code, welcher im Klassenmodul steht, der dieser Array entgegennimmt?

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

Danke für den Tipp. Frage, wo ist dann der Code, welcher im
Klassenmodul steht, der dieser Array entgegennimmt?

der private Typ muß deklariert sein, Im Beispiel ist das:

Private Type MyText
 Txt(0 To 10)
End Type

Wenn die DLL dann die Daten in dieser Form übergibt, kannst Du sie z.B. mit …

Private Sub anzeigen(ByRef St As MyText)
 Dim i As Integer
 For i = 0 To 10
 List1.AddItem St.Txt(i)
 Next
End Sub

verarbeiten.

Noch ein Beispiel aus der API-Guide, wie das mit Windows-DLLs aussieht:

Private Declare Sub GetSystemTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)
Private Type SYSTEMTIME
 wYear As Integer
 wMonth As Integer
 wDayOfWeek As Integer
 wDay As Integer
 wHour As Integer
 wMinute As Integer
 wSecond As Integer
 wMilliseconds As Integer
End Type
Private Sub Form\_Load()
 'KPD-Team 1998
 'URL: http://www.allapi.net/
 '[email protected]
 Dim SysTime As SYSTEMTIME
 'Set the graphical mode to persistent
 Me.AutoRedraw = True
 'Get the system time
 GetSystemTime SysTime
 'Print it to the form
 Me.Print "The System Date is:" & SysTime.wMonth & "-" & SysTime.wDay & "-" & SysTime.wYear
 Me.Print "The System Time is:" & SysTime.wHour & ":" & SysTime.wMinute & ":" & SysTime.wSecond
End Sub

Wie das allerdings in der DDL aussieht, habe ich keine Ahnung, DDLs schreiben kann ich nicht. :frowning:

Gruß, Rainer