Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1020to1024
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

Übergabe eines Arrays

Übergabe eines Arrays
30.10.2008 16:58:50
Peter
Hallo Array-Spezialisten,
mit dem nachfolgenden Code befülle ich eine ListBox in einem UserForm(ular).
Da aus dem Tabellenblatt mit 500 Zeilen selektiv Zeilen ausgewählt werden, ist mein Array in seiner ersten Dimension sicherlich immer nur wenig gefüllt, musst aber auf 0 to 500 für ein evtl. Maximum ausgelegt werden.
Wie kann ich nun die ListBox aus einem (ggf. weiteren) Araay mit der tatsächlichen Anzahl Datensätze befüllen?
Mit For/Next und Abfrage ob der Array leer ist möchte ich es NICHT machen.
Wie fülle ich also einen zweiten Array auf einen Schlag mit den tatsächlich extrahierten Daten um diese dann an die ListBox zu übergeben?
Gruß und vielen Dank im voraus
Peter


Private Sub txtSearch_Change()
Dim rRng                      As Range
Dim iAnzahl                   As Integer
Dim vTemp(0 To 500, 0 To 14)  As Variant
Dim iIndx                     As Integer
   With Userform1.ListBox1
      .Clear
      .ColumnCount = 14
      .ColumnWidths = ("4cm;1,5cm;3cm;3cm;1,5cm;1,5cm;1cm;" & _
                       "2cm;2cm;2cm;2cm;1cm;0,5cm;2cm;" & _
                       "0cm") ' die 0cm-Spalte ist unsichtbar
   End With
   For Each rRng In Worksheets("Tabelle1").Range("B2:B500").Cells
      If UCase(rRng.Text) Like "*" & UCase(Trim(txtSearch.Text)) & "*" Then
         For iIndx = 0 To 13
            vTemp(iAnzahl, iIndx) = rRng.Offset(0, iIndx)
         Next iIndx
         vTemp(iAnzahl, 14) = rRng.Row ' die Zeile der gespeicherten Datensätze festhalten
         iAnzahl = iAnzahl + 1
      End If
   Next rRng
   Userform1.ListBox1.List() = vTemp
End Sub 


5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Übergabe eines Arrays
30.10.2008 17:04:47
Rudi
Hallo,
vTemp=Worksheetfunction.Transpose(vTemp)
Redim Preserve vTemp(14, iAnzahl-1)
vTemp=Worksheetfunction.Transpose(vTemp)
Gruß
Rudi
AW: Übergabe eines Arrays
30.10.2008 17:17:00
Peter
Hallo Rudi,
deine Lösung sieht gut aus, aber ...
Ich bekomme: Fehler beim Kompilieren keine Zuweisung an Datenfeld möglich
und das erste Vtemp in vTemp=Worksheetfunction.Transpose(vTemp) ist markiert.
Gruß Peter
AW: Übergabe eines Arrays
30.10.2008 17:44:25
Rudi
Hallo,
dann evtl. so:

Private Sub txtSearch_Change()
Dim rRng                      As Range
Dim iAnzahl                   As Integer
Dim vTemp()  As Variant
Dim iIndx                     As Integer
With Userform1.ListBox1
.Clear
.ColumnCount = 14
.ColumnWidths = ("4cm;1,5cm;3cm;3cm;1,5cm;1,5cm;1cm;" & _
"2cm;2cm;2cm;2cm;1cm;0,5cm;2cm;" & _
"0cm") ' die 0cm-Spalte ist unsichtbar
End With
ReDim vTemp(0 To WorksheetFunction.CountIf(Range("B2:B500"), "*" & txtSearch & "*"), 0 To 14)
For Each rRng In Worksheets("Tabelle1").Range("B2:B500").Cells
If UCase(rRng.Text) Like "*" & UCase(Trim(txtSearch.Text)) & "*" Then
For iIndx = 0 To 13
vTemp(iAnzahl, iIndx) = rRng.Offset(0, iIndx)
Next iIndx
vTemp(iAnzahl, 14) = rRng.Row ' die Zeile der gespeicherten Datensätze festhalten
iAnzahl = iAnzahl + 1
End If
Next rRng
Userform1.ListBox1.List() = vTemp
End Sub


Gruß
Rudi

Anzeige
AW: Übergabe eines Arrays
30.10.2008 17:51:00
Peter
Hallo Rudi,
die Idee an der Stelle zu dimensionieren war gut - darauf hätte ich auch kommen können - schade.
Danke für den Tipp.
Damit hat sich meine offene Frage ja auch erledigt.
Gruß Peter
AW: Übergabe eines Arrays
30.10.2008 17:45:00
Peter
Hallo Rudi,
deine Lösung sieht gut aus, aber ...
Ich bekomme: Fehler beim Kompilieren keine Zuweisung an Datenfeld möglich
und das erste Vtemp in vTemp=Worksheetfunction.Transpose(vTemp) ist markiert.
Gruß Peter
Frage wieder auf offen gestellt.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige