Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1164to1168
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
Array füllen
promsn
Hallo,
gibt es eine Möglichkeit das die Werte die in das Array geschrieben werden sollen, immer an die nächste Frei Position geschrieben werden?
Mein Problem ist das ich RecordSet habe welches mir die Anzahl der benötigten Zeilen ausgibt und somit ich die größe des Arrays bestimme. Beim ersten Durchlauf der for Schleife klappt das Prima. Da das Programm aber erneut in die Schleife muss beginnt es wieder bei 0 und löscht mir den ersten Eintrag und die folgende Einträge.
Hier mein Code:
rs.MoveFirst
For iView = 0 To rs.RecordCount - 1
ArrOBST(iView, 0) = iTab
ArrOBST(iView, 1) = rs!Distance
ArrOBST(iView, 2) = rs!Elevation
If TabStrip1.Value = ArrOBST(iView, 0) Then
ListView1.ListItems.Add , , ArrOBST(iView, 1)
End If
rs.MoveNext
Next 'iView
baue Dir einen Zähler ein...
28.06.2010 15:10:57
Tino
Hallo,
der sich die letzte Position merkt und
mit jedem Eintrag addierst Du eins zum Zähler hinzu.
Gruß Tino
AW: baue Dir einen Zähler ein...
28.06.2010 15:20:55
promsn
Hi,
dann bräuchte ich als noch eine Spalte?
VG
AW: baue Dir einen Zähler ein...
28.06.2010 15:40:22
Tino
Hallo,
nee, einfach eine Variable im Kopf definieren und diese Anfang oder/und am Ende auf 0 setzen.
Je nachdem wie Dein Array Dimensioniert ist,
muss die Addition vor oder nach dem füllen des Array stattfinden.
Nur ein Beispiel!
Dim HilfsZaehler As Long
Sub Start()
HilfsZaehler = 0
Call Beispiel
Call Beispiel2
HilfsZaehler = 0
End Sub
Sub Beispiel()
ArrOBST(HilfsZaehler, 0) = ITab
ArrOBST(HilfsZaehler, 1) = rs!Distance
ArrOBST(HilfsZaehler, 2) = rs!Elevation
HilfsZaehler = HilfsZaehler + 1
End Sub
Sub Beispiel2()
ArrOBST(HilfsZaehler, 0) = ITab
ArrOBST(HilfsZaehler, 1) = rs!Distance
ArrOBST(HilfsZaehler, 2) = rs!Elevation
HilfsZaehler = HilfsZaehler + 1
End Sub
Gruß Tino
Anzeige
AW: baue Dir einen Zähler ein...
28.06.2010 16:00:12
promsn
Hi,
okay. Ich hatte es genau so :). Nur mit einer Spalte wo ich den Hilfszähler ablege.
Kennst Du Dich auch mit Listview aus?
VG
Listview
28.06.2010 16:04:33
Tino
Hallo,
kommt darauf an, ein bar Kenntnisse habe ich.
Um was geht es?
Gruß Tino
AW: Listview
28.06.2010 16:11:23
promsn
Der Code zum füllen des Arrays steht in einer Private Sub ComboBox1_Change(). D.h. jedes mal wenn sich der Wert in der ComboBox ändert startet er den Code. Der funktioniert jetzt Prima. Auch das füllen der Listview klappt bei der ersten Eingabe in der ComoBox und die Arrays steht ganz oben. Jedoch wenn ich dann den Wert in der Combo ändere stehen die Werte ganz unten und dazwischen sind mehrere Zeilen nicht gefüllt. Auch ein ListView1.ListItems.Clear hilft da nicht.
Anzeige
AW: Listview
28.06.2010 16:35:53
Tino
Hallo,
ich denke das Dein Array beim zweiten Durchlauf nicht entsprechend gefüllt wird.
Mach doch mal an der entsprechenden stelle ein Haltepunkt und schau was im Array steht.
Gruß Tino
AW: Listview
29.06.2010 07:56:14
promsn
Hab ich schon. Es wird alles Richtig abgelegt. Er Durchläuft die Schleife nur so oft wieviele rs.recordcount bringt. Aber wie gesagt, es sind immer viele Leerzeilen davor. Wenn ich dann in meinem Tabs hin und her gehe im Sub TapStrip1.Change () den gleichen Code habe zum Füllen der Felder und Listview, besteht das Problem nicht...
hier ein Beispiel mit Listview
29.06.2010 11:00:47
Tino
Hallo,
habe Dir mal ein Beispiel aufgebaut.
Mehr kann ich auch nicht ohne eine Beispieldatei von Dir.
Entpacke die zip Datei und starte die Datei Abfrage.xls
https://www.herber.de/bbs/user/70320.zip
Gruß Tino
Anzeige
AW: hier ein Beispiel mit Listview
29.06.2010 12:19:37
promsn
Hi,
Super. Du hast mir echt geholfe. Der Fehler lag in meinem TapStripChange. Aber an von Deinem Code konnte ich den Fehler finden.
Jedoch komme ich nicht ganz so klar mit Deinem Code. Wie füllst man die zweite Spalte mit einem Array wert?
VG
AW: hier ein Beispiel mit Listview
29.06.2010 12:40:06
Tino
Hallo,
Listview1.ListItems(1).SubItems(1) = "Spalte 2"
Listview1.ListItems(1).SubItems(2) = "Spalte 3"
ListItems ist die Zeile und SubItems die Spalte,
wobei ListItems schon die erste Spalte füllt durch ListItems.Add... .
Gruß Tino
AW: hier ein Beispiel mit Listview
29.06.2010 12:50:14
promsn
Hi,
ich habe es jetzt so gelöst:
With ListView1
With .ListItems.Add(Text:=ArrOBST(j, 1))
.SubItems(1) = ArrOBST(j, 2)
End With
.Sorted = True ' Sortierte Anzeige
.SortKey = 0 ' Sortierung nach erster Spalte
.SortOrder = lvwAscending ' Aufsteigende Sortierung
End With
Das funktioniert auch soweit. Sobald ich jedoch die Sort nutze habe ich bei klicken auf einen Tab immer im ersten Tap im Listview in der ersten Zeile nichts drin stehen. Bei den anderen Tabs klappt das Prima. Wenn ich das Sort ausschalte passt alles, nur halt nicht sortiert.
VG
Anzeige
AW: hier ein Beispiel mit Listview
29.06.2010 13:04:52
promsn
Hi,
ich noch mal. Fehler gefunden (leeres array). Habe jedoch einen anderen. Es werden alle Tabs sortiert außer das erste.
AW: hier ein Beispiel mit Listview
29.06.2010 15:22:43
promsn
Fehler gefunden. ListView kann nicht nach Zahlen sortieren... grrr
AW: hier ein Beispiel mit Listview
30.06.2010 06:18:09
Tino
Hallo,
verwende doch Quicksort und baue den etwas um und Multipliziere im Quicksort den Wert im Array mit 1
http://www.online-excel.de/excel/singsel_vba.php?f=97
Allerdings darf kein Text in der Spalte mehr vorkommen.
Private Sub prcQuickSort(lngLbound As Long, lngUbound As Long, _
intSortColumn As Integer, bntSortKey As Boolean, vntArray() As Variant)
Dim intIndex As Integer
Dim lngIndex1 As Long, lngIndex2 As Long
Dim vntTemp As Variant, vntBuffer As Variant
lngIndex1 = lngLbound
lngIndex2 = lngUbound
vntBuffer = vntArray((lngLbound + lngUbound) \ 2, intSortColumn) * 1
Do
If bntSortKey Then
Do While vntArray(lngIndex1, intSortColumn) * 1  vntBuffer
lngIndex1 = lngIndex1 + 1
Loop
Do While vntBuffer > vntArray(lngIndex2, intSortColumn) * 1
lngIndex2 = lngIndex2 - 1
Loop
End If
If lngIndex1  _
vntArray(lngIndex2, intSortColumn) * 1 Then
For intIndex = LBound(vntArray, 2) To UBound(vntArray, 2)
vntTemp = vntArray(lngIndex1, intIndex)
vntArray(lngIndex1, intIndex) = _
vntArray(lngIndex2, intIndex)
vntArray(lngIndex2, intIndex) = vntTemp
Next
End If
lngIndex1 = lngIndex1 + 1
lngIndex2 = lngIndex2 - 1
ElseIf lngIndex1 = lngIndex2 Then
lngIndex1 = lngIndex1 + 1
lngIndex2 = lngIndex2 - 1
End If
Loop Until lngIndex1 > lngIndex2
If lngLbound 

Gruß Tino
Anzeige

52 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige