Userform startet - Excel stürzt ab

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Userform startet - Excel stürzt ab
von: Jan
Geschrieben am: 21.07.2015 12:20:30

Hallo zusammen,
ich habe eine Userform, sobald ich diese starte stürzt Excel ab. Dies ist aber nicht immer der Fall mal geht es mal nicht.
Habt Ihr eine Idee woran es liegen kann?
Vielen Dank für die Mühe.

Bild

Betrifft: AW: Userform startet - Excel stürzt ab
von: Rudi Maintaire
Geschrieben am: 21.07.2015 12:46:05
Hallo,
Habt Ihr eine Idee woran es liegen kann?
am Code.
Gruß
Rudi

Bild

Betrifft: AW: Userform startet - Excel stürzt ab
von: Jan
Geschrieben am: 23.07.2015 21:04:20
:-) Meine Vermutung, es liegt an der Grösse! die anderen Userformen starten zuverlässig. Nur die Eine nicht!
- Wie gross darf denn so eine Userform sein?
- Wo kann ich die Angaben zur Grösse finden?
- Wieviel Zeilen Code verträgt die Userfrom?
- Was kann ich machen wenn sie wirklich zu gross ist?

Bild

Betrifft: Kristallkugel
von: Raphael H
Geschrieben am: 23.07.2015 23:20:46
Hallo Jan,
da die meisten User dieses Forums die Kristallkugel ausschliesslich im Zelt auf dem Jahrmarkt und nicht am Bildschirm nutzen ist es recht schwierig eine aussagekräftige Diagnose zu stellen.
http://www.xlam.ch/xlimits/vbe.htm
Bei dem Link kannst du mal nachlesen ob du die 411 Steuerelemente überschritten hast oder nicht. Codezeilen sind unbegrenzt.
Gruess
Raphael

Bild

Betrifft: AW: Kristallkugel
von: Jan
Geschrieben am: 24.07.2015 13:06:31
und die Kristallkugel funktioniert doch ! :-)
Zählen zu den Steuerelementen :
label1 = sheets ("daten") . Range usw. ? ( ich denke ja)
und
If Checkbox200 = true then usw ( ich denke ja)
und
Schleifen zählen nicht dazu riichtig ?
ich könnte insgesamt 160 einsparen wenn ich eine Schleife bastenl könnte für
label1 = sheets ("Daten"). range("a2"). value
bis
label20 = sheets ("daten").range(a21).value

Bild

Betrifft: AW: Kristallkugel
von: Raphael H
Geschrieben am: 24.07.2015 13:48:21
Hallo Jan,
1 Label ist ein Steuerelement, wir häufig du dieses ansprichst ist nicht relevant.
1 Checkbox ist ein Steuerelement....
Du müsstest eine aussergewöhnlich grosse UF haben um mehr als 411 Steuerelemente darauf zu platzieren.
Wie gesagt, ich sehe es wie Rudi, irgendwo in deinem Code ist ein Fehler welcher zum Absturz führt.
Gruess
Raphael

Bild

Betrifft: AW: Kristallkugel
von: Jan
Geschrieben am: 24.07.2015 14:39:08
nur damit ich das richtig verstehe !
ich habe 340 label und 320 checkboxen !
das sind aber nur 2 steuerelemente ?
Meine userform starte ich aus einer anderen userform!
userformy. hide
userformx.show
und dann
userform_activate
hier läuft dann die erste schleife zum einlesen der caption für die chechboxen
und eine zweite für die labels!
in der arbeitsmappe lasse ich die userform mit load userform " vorladen"
( das hatte die abstürze halbiert, darum der gedanke das es zuviel ist beim laden starten )
hier muss ja irgendwo der fehler liegen oder?

Bild

Betrifft: Bitte entschuldige...
von: Raphael H
Geschrieben am: 24.07.2015 22:42:41
ich habe deine Userform tatsächlich für wesentlich weniger Umfangreiche gehalten. In dem Fall solltest du dir das ansehen, könnte dein Problem lösen. Ist zwar für frühere Excelversionen, aber dein Fehlerbeschrieb würde darauf passen.
Dieses Problem betrifft die Microsoft Office-Programme Excel, Word und PowerPoint der Version 97 und 2000. Ob das Problem auch in den Office-Versionen 2002/XP und 2003 existiert, ist unklar, da es keine Informationen seitens Microsoft gibt. Nebenbei erwähnt gibt es weder ein Service Pack noch einen Hotfix für dieses Problem.
Wenn man ein Steuerelement, welches nach dem 411-ten Steuerelement hinzugefügt wurde, im VBA-Code direkt referenziert (z.B. UserForm1.LabelXY.Caption ="") und diese Anweisung dann ausführt, stürzt das Office-Programm sofort ab. Es spielt keine Rolle, welcher Steuerelement-Typ angesprochen wird (Schaltfläche, Bezeichnungsfeld, Textfeld etc.). Wenn Sie beispielsweise das erste der UserForm hinzugefügte Steuerelement löschen und dann das 412-te Steuerelement direkt ansprechen, erfolgt kein Programmabsturz, da durch die Löschung das 412-te hinzugefügte Steuerelement intern neu die Nummer 411 besitzt.
Dieses Problem lässt sich umgehen, indem die Controls-Auflistung benutzt wird. Das 412-te Steuerelement kann dadurch mit UserForm1.Controls(411).Caption = "" indirekt referenziert werden (der Controls-Index beginnt bei 0, daher 411). Auch For-Each-Schleifen funktionieren fehlerfrei.

Gruess
Raphael

Bild

Betrifft: AW: Bitte entschuldige...
von: Jan
Geschrieben am: 25.07.2015 00:37:05
kein Problem :-)
Das ist ganz schön kompliziert!
Nur nochmal damit ich das richtig verstehe.
Ich muss die Steuerelemente mit einem Code direkt ansprechen,
wenn ich zB 500 Elemete auf der Userform platziere ohne eine
Zeile Code dazu zu schreiben läuft alles bzw stürzt nix ab?
Die Checkboxen muss ich dirket ansprechen, aber die ganzen Labels
könnte ich mit Schleifen realisieren. Schleifen zählen ja nicht mit rein!
ich habe 20 labels welche unter commandbutton 1 aufgelistet sind und unter commandbutton 2
usw ( bis 8) es sind immer die gleichen 20 aber die muss ich addieren, richtig? oder anders
wenn label1 8 x im code der userform erscheint muss ich 8 anrechnen oder nur eine?
Wenn das alles so stimmt wie ich das denke brauch ich nur die Schleife für Labels und dann
komm ich nicht über die kritische Marke. Die Schleife vom Rudi geht
leider nich.
label1 = sheets ("Daten"). range("a2"). value
label2 = sheets ("Daten"). range("a3"). value
label3 = sheets ("Daten"). range("a4"). value
usw.
Vielen Dank für die Geduld und die Mühe die Ihr Euch macht!

Bild

Betrifft: Schleife
von: Raphael H
Geschrieben am: 25.07.2015 23:19:48
Hallo Jan,
du solltest deine Schleife etwa so gestalten, dann sollte es auch mit deiner Menge Steuerelement klappen.


    Dim i As Integer
    
    For i = 0 To Me.Controls.Count - 1
        'Debug.Print Me.Controls(i).Name
        Select Case Me.Controls(i).Name
            Case "label1"
                Sheets("Daten").Range("a2").Value
            Case "label2"
                Sheets("Daten").Range("a3").Value
        End Select
    Next i
Zu deiner anderen Frage:
Es spielt keine Rolle wie häufig du das Element im Code ansprichst, die Anzahl Elemente ist entscheidend.
Gruess
Raphael

Bild

Betrifft: AW: Schleife
von: Jan
Geschrieben am: 26.07.2015 21:42:28
Vielen Dank ! Code ist eingbaut und bis jetzt läuft es ohne Probleme.

Bild

Betrifft: AW: alternativ: Listbox
von: Daniel
Geschrieben am: 26.07.2015 00:29:28
Hi
wenn du sehr viele Labels hast, die vielleicht alle im gleichen Abstand untereinander stehen, und die auch noch alle mit einer Zelle auf einem Tabellenblatt verknüpft sind (die auch alle direkt untereinander liegen in gleicher Reihenfolge), dann solltest du darüber nachdenken, die Lables durch eine Listbox zu ersetzen.
Die Listbox kann beliebig viele Einträge enthalten, aber sie ist für VBA nur ein Steuerelement.
gleiches gilt für grössere Gruppen von Checkboxen oder Optionbuttons.
auch diese lassen sich meist problemlos durch eine Listbox ersetzen, bei Optionbuttons im Singleselect-Modus, bei Checkboxen im Multiselect-Modus.
Gruss, Daniel

Bild

Betrifft: AW: alternativ: Listbox
von: Jan
Geschrieben am: 26.07.2015 12:43:03
Danke für den Hinweis Daniel!
Die vielen Checkboxen ermöglichen einen Gesamtüberblick auf einer Ebene!

Bild

Betrifft: AW: alternativ: Listbox
von: Daniel
Geschrieben am: 26.07.2015 13:42:56
hi
mag sein.
die Listbox ist halt einfacher zu Programmieren und erhöht nicht die anzahl der Steuerelemente, wenn zusätliche Elemente hinzukkommen.
Gruss Daniel

Bild

Betrifft: AW: Kristallkugel
von: Rudi Maintaire
Geschrieben am: 24.07.2015 14:18:02
Hallo,
eine Schleife ändert doch nichts an der Anzahl der Steuerelemente auf der UF.
Die Schleife könnte so aussehen:
For i=1 to 20
controls("Label" & i+1).Caption=Sheets("Daten").cells(i+1, 1)
next i
Gruß
Rudi

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Userform startet - Excel stürzt ab "