Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1440to1444
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Wechselnder Arrayname in Function übergeben

Wechselnder Arrayname in Function übergeben
14.08.2015 15:18:49
Sven
Hallo zusammen,
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

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wechselnder Arrayname in Function übergeben
14.08.2015 17:19:53
Nepumuk
Hallo,
einen Variablennamen als String, das geht nicht. Du könntest aber mit einem Variant-Array arbeiten welches deine Arrays enthält. Aber um mehr dazu schreiben zu können, müsste ich mal sehen wie die Arrays gefüllt werden (eines genügt).
Gruß
Nepumuk

AW: Wechselnder Arrayname in Function übergeben
17.08.2015 12:40:05
Sven
Die Arrays befülle ich mit Daten aus einer externen Excel Datei (DateiStammdaten), welche ich zuvor öffne und danach wieder schließe. In der externen Datei gibt es 5 Sheets, welche jeweils die entsprechenden Daten beinhalten.
Ich habe mal das Userform als Bild hochgeladen:
https://www.herber.de/bbs/user/99641.jpg
Private Sub Daten_auslesen()
Dim iTabelle As Long    'Zähler für Tabellenblätter
Dim Zeilen As Long      'Anzahl Zeilen im Tabellenblatt
Dim Spalten As Long     'Anzahl Spalten im Tabellenblatt
For iTabelle = 1 To 5 'jedes Tabellenblatt wird durchlaufen
Zeilen = Workbooks(DateiStammdaten).Sheets(Tabelle(iTabelle)).Cells(Rows.Count, 1).End( _
xlUp).Row
Spalten = Workbooks(DateiStammdaten).Sheets(Tabelle(iTabelle)).Cells(1, Columns.Count). _
End(xlToLeft).Column
With Workbooks(DateiStammdaten).Sheets(Tabelle(iTabelle))
Select Case iTabelle
Case 1
ReDim Daten_Adresse(0 To Zeilen - 2, 0 To Spalten - 1)
Daten_Adresse = .Range(.Cells(2, 1), .Cells(Zeilen, Spalten))
Case 2
ReDim Daten_Kunde(0 To Zeilen - 2, 0 To Spalten - 1)
Daten_Kunde = .Range(.Cells(2, 1), .Cells(Zeilen, Spalten))
Case 3
ReDim Daten_Ansprechpartner(0 To Zeilen - 2, 0 To Spalten - 1)
Daten_Ansprechpartner = .Range(.Cells(2, 1), .Cells(Zeilen, Spalten))
Case 4
ReDim Daten_Verpackung(0 To Zeilen - 2, 0 To Spalten - 1)
Daten_Verpackung = .Range(.Cells(2, 1), .Cells(Zeilen, Spalten))
Case 5
ReDim Daten_Einheiten(0 To Zeilen - 2, 0 To Spalten - 1)
Daten_Einheiten = .Range(.Cells(2, 1), .Cells(Zeilen, Spalten))
End Select
End With
Next iTabelle
End Sub

Grüße,
Sven

Anzeige
AW: Wechselnder Arrayname in Function übergeben
17.08.2015 13:15:22
Rudi
Hallo,
du musst deine 5 Arrays in ein Array packen und über den Index ansprechen.
etwa so:
Public Daten(1 To 5)
Private Sub Daten_auslesen()
Dim iTabelle As Long    'Zähler für Tabellenblätter
Dim Zeilen As Long      'Anzahl Zeilen im Tabellenblatt
Dim Spalten As Long     'Anzahl Spalten im Tabellenblatt
For iTabelle = 1 To 5 'jedes Tabellenblatt wird durchlaufen
With Workbooks(DateiStammdaten).Sheets(Tabelle(iTabelle))
Zeilen = .Cells(Rows.Count, 1).End(xlUp).Row
Spalten = .Cells(1, Columns.Count).End(xlToLeft).Column
Daten(iTabelle) = .Range(.Cells(2, 1), .Cells(Zeilen, Spalten))
End With
Next iTabelle
End Sub
Private Sub TBox_Daten1_AfterUpdate()
MsgBox IsInArray(Daten(TabellenIndex), TBox_Daten1.Value) 'Hier soll das Array übergeben  _
werden, aber _
nicht als string
End Sub
Public Function IsInArray(ByVal DasArray 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 nStart As Long
Dim nEnd As Long
nIndex = -1
nStart = LBound(DasArray)
nEnd = UBound(DasArray)
For i = nStart To nEnd
If DasArray(i, 1) = sItem Then
nIndex = i: Exit For
End If
Next i
IsInArray = nIndex
End Function
(Daten(1)= Adressen; Daten(2)=Kunden, ...)
Gruß
Rudi

Anzeige
AW: Wechselnder Arrayname in Function übergeben
17.08.2015 13:55:25
Sven
Das hört sich gut an. Werde das direkt mal umsetzen. Schonmal vielen Dank!!
Aber eine Frage hätte ich noch. Wie spreche ich denn innerhalb des Arrays einzelne Daten an?
Also: Daten(1) entspricht dem Array Adressen. Nun möchte ich innerhalb der Adressen einen bestimmten Datensatz ausgeben (z.B. vorher Daten_Adresse(2, 3). Geht das dann über Daten(1(2, 3))?
Grüße,
Sven

AW: Wechselnder Arrayname in Function übergeben
17.08.2015 22:51:14
Rudi
Hallo,
Geht das dann über Daten(1(2, 3))?
Daten(1)(2,3)
Gruß
Rudi

AW: Wechselnder Arrayname in Function übergeben
18.08.2015 17:41:31
Sven
Danke, funktioniert.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige