Wechselnder Arrayname in Function übergeben
14.08.2015 15:18:49
Sven
Ich habe eine Userform mit TextBoxen. Beim Verlassen der TextBox soll geprüft werden, ob der Inhalt der TB in einem Array vorhanden ist. Dies erfolgt durch Aufruf der Function "IsInArray(Arrayname, Suchwert)". In Abhängigkeit vom gerade gültigen Tabellenindex soll ein bestimmtes Array durchsucht werden.
Arrays (mehrdimensional): Daten_Adresse, Daten_Kunde, Daten_Ansprechpartner, Daten_Verpackung, Daten_Einheiten
Diese Arrays werden ganz zu Beginn mit Daten aus einer Excel Tabelle gefüllt.
Das Array Tabelle() ist gefüllt mit den Werten (1) "Adresse", (2) "Kunde", (3) "Ansprechpartner", (4) "Verpackung", (5) "Einheiten", hat im Programm noch andere Zwecke und soll hier zur Bildung des Arraynamens dienen.
Die Variable Tabellenindex entspricht den Werten von 1 bis 5 und entspricht somit einem Wert aus dem Array Tabelle().
Mein Problem ist nun, wie kann ich den Arraynamen so übergeben, dass er bei Übergabe als Array erkannt wird und nicht als String?
PS: Ich denke, mit Select Case geht es auch, aber ich möchte eine "ausbaubare" Lösung, falls es _ mal mehr Arrays werden.
Private Sub TBox_Daten1_AfterUpdate()
Dim arName As String
arName = "Daten_" & Tabelle(Tabellenindex) 'Hier wird der Arrayname gebildet, aber als _
String
MsgBox IsInArray(arName, TBox_Daten1.Value) 'Hier soll das Array übergeben werden, aber _
nicht als string
End Sub
Public Function IsInArray(ByVal sArray As Variant, ByVal sItem As String) As Long
' Diese Function habe ich aus einem anderen Internetbeitrag.
' Prüfen, ob das Element "sItem" im Array "sArray" enthalten ist
' Rückgabewert: Index des Elements bzw. -1, wenn nicht vorhanden
Dim i As Long
Dim nIndex As Long
Dim nLen As Long
Dim nStart As Variant
Dim nEnd As Variant
On Error GoTo ErrHandler
nIndex = -1
nStart = LBound(sArray)
nEnd = UBound(sArray)
nLen = Len(sItem)
For i = nStart To nEnd
If Len(sArray(i, 1)) = nLen Then
If sArray(i, 1) = sItem Then
nIndex = i: Exit For
End If
End If
Next i
On Error GoTo 0
ErrHandler:
IsInArray_1 = nIndex
End Function
Danke schonmal für die Hilfe!!!
Grüße, Sven