Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1436to1440
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

Userform startet - Excel stürzt ab

Userform startet - Excel stürzt ab
21.07.2015 12:20:30
Jan
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.

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform startet - Excel stürzt ab
21.07.2015 12:46:05
Rudi
Hallo,
Habt Ihr eine Idee woran es liegen kann?
am Code.
Gruß
Rudi

AW: Userform startet - Excel stürzt ab
23.07.2015 21:04:20
Jan
:-) 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?

Kristallkugel
23.07.2015 23:20:46
Raphael
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

Anzeige
AW: Kristallkugel
24.07.2015 13:06:31
Jan
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

AW: Kristallkugel
24.07.2015 13:48:21
Raphael
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

Anzeige
AW: Kristallkugel
24.07.2015 14:39:08
Jan
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?

Anzeige
Bitte entschuldige...
24.07.2015 22:42:41
Raphael
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

Anzeige
AW: Bitte entschuldige...
25.07.2015 00:37:05
Jan
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!

Anzeige
Schleife
25.07.2015 23:19:48
Raphael
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

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

Anzeige
AW: alternativ: Listbox
26.07.2015 00:29:28
Daniel
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

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

AW: alternativ: Listbox
26.07.2015 13:42:56
Daniel
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

AW: Kristallkugel
24.07.2015 14:18:02
Rudi
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

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige