Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: UserForm Initialize

UserForm Initialize
04.06.2002 13:26:00
Daniele
Hallo

brauche mal wieder hilfe

Ich habe mehrere UserForm die ich entsprechend inizialisieren möchte. nun hat sich herausgestellt, dass beim 2. und folgende UF die mit UserForm_Initialize() überhaupt nicht starten ("Laufzeitfehler 424: Objekt erforderlich"), und wenn ich ändere zu: UserForm4_Initialize(), dann erscheint die UF ohne Fehlermeldungen, jedoch rein gar nicht initialisiert.

was ist mein fehler?
(habe auch versucht dem UF ein eigener Name zu geben, nützt nichts).

Danke, Daniele

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: UserForm Initialize
04.06.2002 13:36:05
guenter
hallo
starten must die userform mit

als beispiel initialze wird dann beim start automatisch ausgeführt
mfg guenter
Re: UserForm Initialize
04.06.2002 13:40:37
Michael Scheffler
Hallo,

besser ist - wenn auch "veraltet" - wenn Du etwas intialisieren möchtest, erst:

Load UserForm1
Load UserForm2

etc.

und dann

UserForm1.Show
UserForm2.Show
etc.

Gruß

Micha


Anzeige
Re: UserForm Initialize
04.06.2002 14:23:50
Daniele
Hallo Michael und Guenter

Sub Start()
Userform1.Show
End Sub

mache ich bereits und

mit Load klappt es auch nicht.

Erklährung: Private Sub UserForm_Initialize() steht im Code der UserFormX
Ich wiederhohle: bei der ersten UserForm klappt es, bei den anderen nicht. könnte es sein dass der Grund dafür ist das ich die Elemente (und Codes, natürlich angepasst) von einer UF in die andere kopiert habe (einige Elemente und Formate sollen gleich bleiben). Wenn ich eine grundlegend neue UF erstelle wiederholen sich die Bezeichnungen der Elemente ja auch immer wieder, zb. TextBox1 usw.

Anzeige
Re: UserForm Initialize
04.06.2002 14:33:45
Michael Scheffler
Hallo,

das ist schietegal, wie die Controls heißen. Da sie nicht öffentlich deklariert sind, werden ihre Bezeichnungen und Daten in der jeweiligen Form "gekapselt" .

Kann es sein, dass die Form1 stehen beleint und damit auch der Code? Und Du letzten Endes nichts anderse lädst?

Poste doch mal den Code!

Gruß

Micha

Anzeige
Re: UserForm Initialize
04.06.2002 15:03:31
Daniele
Hi Micha

hier der Code, hoffe du siehst durch. dieser Gleiche code mit anderen Datenbankverweise funktioniert einwandfrei in der ersten UF.
Wie kann es sein dass die andere Form stehen bleibt, sie ist gar nicht geladen!

'abbrechen
Private Sub CommandButton3_Click()
Unload Me
Tabelle3.Select
End Sub
'neuerfassung lieferant
Private Sub CommandButton1_Click()
Unload Me
UserForm4.Show
End Sub
'zurück
Private Sub CommandButton2_Click()
Unload Me
SortReag
Tabelle3.ListBox1.ListFillRange = Intersect(Sheets("DB_Reag").[A1:C1].CurrentRegion, Sheets("DB_Reag").[a2:c1000]).Address(external:=True)
Tabelle3.Select
End Sub
'Produkt auswählen & Textboxen füllen
Private Sub ComboBox2_Change()
Dim r%
r = ComboBox2.ListIndex + 2
Me.TextBox1.Text = Sheets("DB_Reag").Cells(r, 2)
Me.TextBox2.Text = Sheets("DB_Reag").Cells(r, 3)
Me.TextBox4.Text = Sheets("DB_Reag").Cells(r, 5)
Me.TextBox5.Text = Sheets("DB_Reag").Cells(r, 6)
Me.TextBox6.Text = Sheets("DB_Reag").Cells(r, 7)
Me.ComboBox3.Text = Sheets("DB_Reag").Cells(r, 4)
If Range("sel_4") = Sheets("DB_Reag").Cells(r, 8) Then CheckBox1.Value = True
If Range("sel_20") = Sheets("DB_Reag").Cells(r, 8) Then CheckBox2.Value = True
If Range("sel_RT") = Sheets("DB_Reag").Cells(r, 8) Then CheckBox3.Value = True

End Sub
'Firma auswählen
Private Sub ComboBox3_Change()
End Sub
'änderungen speichern
Private Sub CommandButton4_Click()
Dim mldg, stil, titel, grc
Dim r&
If ComboBox2.Value = "" Then
MsgBox "Dies ist keine Änderung, sie haben kein Produkt ausgewählt"
Call UserForm_Initialize
Exit Sub
Else:
mldg = "Sollen die Änderungen angenommen werden ?"
stil = vbYesNo
titel = "Frage"
grc = MsgBox(mldg, stil, titel)
If grc = vbYes Then
Else
Exit Sub
End If
r = ComboBox2.ListIndex + 2
Sheets("DB_Reag").Cells(r, 2) = TextBox1.Text
Sheets("DB_Reag").Cells(r, 3) = TextBox2.Text
Sheets("DB_Reag").Cells(r, 5) = TextBox4.Text
Sheets("DB_Reag").Cells(r, 6) = TextBox5.Text
Sheets("DB_Reag").Cells(r, 7) = TextBox6.Text
Sheets("DB_Reag").Cells(r, 8) = TextBox8.Text
Sheets("DB_Reag").Cells(r, 4) = ComboBox3.Text
If CheckBox1.Value = True Then Sheets("DB_Reag").Cells(r, 8) = Range("sel_4")
If CheckBox2.Value = True Then Sheets("DB_Reag").Cells(r, 8) = Range("sel_20")
If CheckBox1.Value = True Then Sheets("DB_Reag").Cells(r, 8) = Range("sel_RT")
End If
Call UserForm_Initialize
End Sub
'Neuerfassung speichern
Private Sub CommandButton6_Click()
If ComboBox2.Value <> "" Then
MsgBox "Dies ist keine Neuerfassung, sie haben ein Produkt ausgewählt"
Call UserForm_Initialize
Exit Sub
Else:
Call Eintrag
Call UserForm_Initialize
End If
End Sub
'eintrag vornehmen
Sub Eintrag()
Set anchor_cell = Range("R_neu").End(xlDown).Offset(1, 0)
anchor_cell.Offset(0, 1).Value = TextBox1.Text
anchor_cell.Offset(0, 2).Value = TextBox2.Text
anchor_cell.Offset(0, 3).Value = ComboBox3.Text
anchor_cell.Offset(0, 4).Value = TextBox4.Text
anchor_cell.Offset(0, 5).Value = TextBox5.Text
anchor_cell.Offset(0, 6).Value = TextBox6.Text
anchor_cell.Offset(0, 7).Value = TextBox8.Text
If CheckBox1.Value = True Then anchor_cell.Offset(0, 8).Value = Range("sel_4")
If CheckBox2.Value = True Then anchor_cell.Offset(0, 8).Value = Range("sel_20")
If CheckBox1.Value = True Then anchor_cell.Offset(0, 8).Value = Range("sel_RT")

' ID-Nummer eintragen
Ro = 5000
Co = 30
Erg = Sheets("DB_Reag").Cells(Ro, Co).Value
LZe = Sheets("DB_Reag").Range("A:A").End(xlDown).Row
NEintrag = Sheets("DB_Reag").Cells(LZe + 1, 2).Value
If NEintrag <> "" Then
With Sheets("DB_Reag").Cells(LZe + 1, 1)
.Value = Erg + 1
.NumberFormat = """V""0000"
End With
End If
Sheets("DB_Reag").Cells(Ro, Co).Value = Erg + 1

End Sub
'Löschen
Private Sub CommandButton5_Click()
Dim mldg, stil, titel, grc
mldg = "soll dieser Artikel wirklich gelöscht werden ?"
stil = vbYesNo
titel = "Obligate Frage:"
grc = MsgBox(mldg, stil, titel)
If grc = vbYes Then
Else
Exit Sub
End If
Dim r%
r = ComboBox2.ListIndex + 2
Sheets("DB_Reag").Cells(r, 1).EntireRow.Delete
Call UserForm_Initialize
End Sub
'initalisieren
Private Sub UserForm_Initialize()

CommandButton5.Caption = "Ausgewählten Datensatz" & vbNewLine & "Löschen"
CheckBox1.Value = False
CheckBox2.Value = False
CheckBox3.Value = False

ComboBox2.Clear
ComboBox3.Clear

TextBox1.Value = ""
TextBox2.Value = ""
TextBox4.Value = ""
TextBox5.Value = ""
TextBox6.Value = ""
TextBox8.Value = ""
ComboBox3.Value = ""
ComboBox2.Value = ""

Dim i%
i = 2
Do Until IsEmpty(Sheets("DB_Reag").Cells(i, 1))
ComboBox2.AddItem Sheets("DB_Reag").Cells(i, 2) & " " & Sheets("DB_Reag").Cells(i, 3)
i = i + 1
Loop
i = 2
Do Until IsEmpty(Sheets("DB_Namen").Cells(i, 1))
ComboBox3.AddItem Sheets("DB_Namen").Cells(i, 2)
i = i + 1
Loop

End Sub


Anzeige
Re: UserForm Initialize
04.06.2002 15:20:29
Daniele
Stopp!

Problem hat sich gelöst. Die TextBox8 existiert nicht in diesem UF.

... das hat jetzt lange gedauert. dachte auch nicht das das etwas ausmachen würde beim laden.

trotzdem vielen dank für deine Hilfe. ohne dich hätte ich es nicht nochmals so genau angeschaut.

vielleicht hast du mir aber noch ein tipp für ein wirklich ungelöstes problem:

suche ein methode (code) um bei jedem neueintrag eine einmalige! Zufallszahl in der ersten spalte zu generieren. das verfahren wie im code das ich gesendet habe ist nicht allzu verlässlich da es vorkommt dass aus irgenwelchem grund auch immer eine zahl generiert wird die schon in der spalte existiert. (es muss nicht zufallszahl sein (auch fortlaufend) jedenfalls einmalig.

danke, daniele

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

UserForm Initialisierung in Excel VBA


Schritt-für-Schritt-Anleitung

Um eine UserForm in Excel VBA korrekt zu initialisieren, befolge diese Schritte:

  1. Erstelle eine UserForm:

    • Öffne den VBA-Editor (ALT + F11).
    • Füge eine neue UserForm hinzu (Einfügen > UserForm).
  2. Füge Controls hinzu:

    • Platziere Steuerelemente wie TextBoxen, ComboBoxen und Buttons auf der UserForm.
  3. Verwende die Private Sub UserForm_Initialize():

    • Füge den folgenden Code in die Code-Ansicht der UserForm ein:
    Private Sub UserForm_Initialize()
       ' Beispiel: ComboBox initialisieren
       ComboBox1.Clear
       ComboBox1.AddItem "Option 1"
       ComboBox1.AddItem "Option 2"
    End Sub
  4. Lade die UserForm in einem anderen Sub:

    • Verwende den folgenden Code in einem Modul, um die UserForm zu laden:
    Sub ShowUserForm()
       Load UserForm1
       UserForm1.Show
    End Sub
  5. Teste die UserForm:

    • Führe ShowUserForm aus, um sicherzustellen, dass die UserForm wie gewünscht initialisiert wird.

Häufige Fehler und Lösungen

  • Laufzeitfehler 424: Objekt erforderlich:

    • Dieser Fehler tritt häufig auf, wenn die UserForm nicht korrekt geladen wurde. Stelle sicher, dass du Load UserForm1 vor UserForm1.Show verwendest.
  • UserForm wird nicht initialisiert:

    • Wenn die UserForm ohne Initialisierung angezeigt wird, überprüfe, ob das UserForm_Initialize() korrekt definiert ist und keine Fehler im Code vorhanden sind.
  • Falsche Control-Namen:

    • Achte darauf, dass die Namen der Controls in der UserForm übereinstimmen. Wenn du Controls von einer anderen UserForm kopiert hast, kann es zu Namenskonflikten kommen.

Alternative Methoden

  • Verwendung von Load:

    • Anstatt UserForm.Show direkt zu verwenden, kannst du zuerst die UserForm laden und dann anzeigen. Dies sorgt dafür, dass die Initialize-Routinen korrekt ausgeführt werden.
  • Initialisierung im Hauptmodul:

    • Du kannst auch die Initialisierung der UserForm in einem Hauptmodul durchführen, bevor du sie zeigst:
    Sub InitAndShowUserForm()
       Load UserForm1
       UserForm1.UserForm_Initialize
       UserForm1.Show
    End Sub

Praktische Beispiele

Hier ist ein einfaches Beispiel für die Initialisierung einer ComboBox in einer UserForm:

Private Sub UserForm_Initialize()
    ' ComboBox initialisieren
    ComboBox1.Clear
    ComboBox1.AddItem "Option 1"
    ComboBox1.AddItem "Option 2"
    ComboBox1.AddItem "Option 3"
End Sub

Wenn du ein zusätzliches Kontrollkästchen hinzufügen möchtest, kannst du den Code entsprechend erweitern:

Private Sub UserForm_Initialize()
    CheckBox1.Value = False ' Kontrollkästchen zurücksetzen
    ' Weitere Initialisierungen...
End Sub

Tipps für Profis

  • Nutze With-Anweisungen, um den Code zu optimieren und lesbarer zu gestalten:
With Me
    .TextBox1.Value = "Hallo"
    .ComboBox1.AddItem "Beispiel"
End With
  • Überprüfe nach dem Laden der UserForm, ob alle Controls vorhanden sind, um Fehler beim Zugriff zu vermeiden.

FAQ: Häufige Fragen

1. Warum funktioniert UserForm_Initialize nicht bei meiner UserForm? Es kann sein, dass die UserForm nicht korrekt geladen wurde. Verwende Load UserForm1 vor UserForm1.Show.

2. Wie kann ich sicherstellen, dass meine UserForm immer korrekt initialisiert wird? Verwende die Methode Load UserForm und rufe dann UserForm_Initialize explizit auf, um sicherzustellen, dass alle Initialisierungen durchgeführt werden.

3. Kann ich eine Zufallszahl in meiner UserForm generieren? Ja, du kannst die Funktion Rnd verwenden, um eine Zufallszahl zu generieren. Stelle sicher, dass du die Zufallszahl überprüfst, um doppelte Werte zu vermeiden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige