Array / Stapelspeicherfehler
13.10.2022 17:07:13
Oliver
vielleicht könnt ihr ja bei meinem Problem helfen.
Ich habe eine Tabelle die ich über ein Datum filtere, diese gefilterte Tabelle lese ich dann über Array in eine Listbox ein. Habe das vorher mit .RowSource versucht was aber am Ende viel zu langsam beim öffnen war.
Beim Click auf die Listbox werden mir die Daten dann in Comboboxen und Textboxen angezeigt.
Nun wollte ich bei Änderung der Werte(Comboxen/ Textboxen) das diese in die Tabelle eingetragen werden. Das klappt auch wunderbar. Nur soll auch die Listbox die aktuellen Werte anzeigen. Am besten bei einer Click-Methode.
Dazu habe ich dann das Array neu auf Set gesetzt und wieder eingelesen. Hier kommt ein Stapelspeicher fehler. Bei AfterUpdate() Prozeduren für die Anzeige in der Listbox kommt dieser nicht. Nur ist es nicht das was ich gern hätte. Meine Überlegung dazu wäre aus der UserForm_Initialize() das Array in die anderen Subs zu übergeben, hier könnte man ja jederzeit auf dieses eine Array zugreifen, Oder? Oder eine Funktion mit dem Array ausführen und dann über die anderen Subs auf dieses zugreifen.
Eine andere Überlegung wäre zu prüfen welcher Wert geändert ist und nur diesen im Array ändern und dann in der Tabelle und in der Listbox.
Hier mal der Code für die Comboboxen zur Änderung in der Tabelle/Array/Listbox.
Diesen Code habe ich dann noch 2 mal für alle Textboxen.
Private Sub cb_Art1_AfterUpdate()
'globale Variablen
iSpalte = 1 'Spalte + 4 für Celle auf Tabelle 1
cb_Name = 1
Call speichern_cb_Art_AfterUpdate
End Sub
Private Sub cb_Art2_AfterUpdate()
iSpalte = 4
cb_Name = 2
Call speichern_cb_Art_AfterUpdate
End Sub
Private Sub cb_Art3_AfterUpdate()
iSpalte = 7
cb_Name = 3
Call speichern_cb_Art_AfterUpdate
End Sub
Private Sub cb_Art4_AfterUpdate()
iSpalte = 10
cb_Name = 4
Call speichern_cb_Art_AfterUpdate
End Sub
Private Sub speichern_cb_Art_AfterUpdate()
Dim rng As Range
Dim arr As Variant
Dim Listindex As Integer
Dim i As Long
'globale Variable - makierte Zeile Listbox
iZeile = ListBox1.List(ListBox1.Listindex, 19)
If Controls("cb_Art" & cb_Name) = "" Then
Tabelle1.Cells(iZeile, iSpalte + 4) = Left(Controls("cb_Art" & cb_Name), 1)
Else
If Len(Left(Controls("cb_Art" & cb_Name), 2)) 1 Or IsNumeric(Left(Controls("cb_Art" & cb_Name), 2)) = False Or Controls("cb_Art" & cb_Name).Value >= 4 Then
MsgBox "Die Eingabe sollte eine Zahl zwischen 1-3 sein!
With app.Controls("cb_Art" & cb_Name)
.Listindex = 0
.SetFocus
End With
Exit Sub
ElseIf IsNumeric(Left(Controls("cb_Art" & cb_Name), 4)) Then
Tabelle1.Cells(iZeile, iSpalte + 4) = Left(Controls("cb_Art" & cb_Name), 1)
Else
MsgBox "Die Eingabe sollte eine Zahl zwischen 1-3 sein!
With app.Controls("cb_Art" & cb_Name)
.Listindex = 0
.SetFocus
End With
Exit Sub
End If
End If
' Ab hier auch in UserForm_Initialize() vorhanden/ Dieser wird quasi immer neu gesetzt
Set rng = Range("tblDaten").SpecialCells(xlCellTypeVisible)
ReDim arr(1 To rng.Rows.Count, 1 To rng.Columns.Count) 'Zeile/Spalte
arr = rng.Value
'Format 1.Spalte in Listbox auf ddd und 0000 ändern
For i = 1 To rng.Rows.Count
arr(i, 1) = Format(arr(i, 1), "ddd")
arr(i, 5) = Format(arr(i, 5), "0000")
arr(i, 11) = Format(arr(i, 11), "0000")
arr(i, 14) = Format(arr(i, 14), "0000")
Next
Listindex = ListBox1.Listindex
'Listbox mit Array füllen
ListBox1.List = arr
ListBox1.Selected(Listindex) = True
End Sub
Vielleicht könnt ihr mir beim übergeben des Arrays in den "Sub speichern_cb_Art_AfterUpdate()" helfen oder habt eine andere Idee wie ich den Stapelspeicherfehler umgehe.Grüße Oliver