UserForm Eintrag bringt doppelte Meldung

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

Betrifft: UserForm Eintrag bringt doppelte Meldung von: Gabi
Geschrieben am: 05.02.2005 12:08:50

Hallo Excelgemeinde,

Zunächst erst einmal vielen Dank an die fleißigen Helfer hier im Forum.

Nach vielen Stunden suchen und lesen im Forum habe ich jetzt mein erstes UserForm fertig. Mit einer Einschränkung.
Ich hoffe, Ihr könnt mir helfen und evtl. auch noch ein paar Verbesserungsvorschläge einbringen. Vielen Dank schon einmal.

Also mein Problem. Das Userform hat 13 Textfelder.

Fülle ich die Felder 8 und 9 nicht aus und gehe auch mit dem Tab oder der Mouse nicht dort rein, kommt die Meldung "Ort und PLZ müssen ausgefüllt sein".

Ist alles *richtig* ausgefüllt, werden die Werte der Textfelder in das Tabellenblatt in die nächste freie Zeile übernommen.
Das Userform wird geleert, für den nächsten Eintrag.


Leider kommt dann auch sofort die Meldung "PLZ und Ort müssen ausgefüllt sein". Diese Meldung muss bestätigt werden.

Weshalb kommt diese Meldung? Wie oder wo muss ich folgenden Code anordnen, daß die Meldung sofort nach erfolgten "Eintrag" und leeren der Felder *nicht* mehr erscheint?
Komisccher Weise erscheint nur die Meldung "Ort" nicht die ueber die "Postleitzahl"


' ----- Die 2 Textboxen (8 und 9) muessen Werte enthalten Anfang -----
' auch wenn sie unten auf die "richtigen" Werte geprueft werden soll an dieser Stelle
' sichergestellt werden, das bei Klick auf "Eintragen" auch Werte in den Boxen stehen
If TextBox8.Value = "" Or TextBox9.Value = "" Then
MsgBox "Bitte PLZ und Ort ausfuellen!"
Exit Sub
'dieses Teil verlassen, ohne Userform zu schliessen.
' ----- Textboxen muessen Werte enthalten Ende -----

Gleich noch eine Frage. Wie kann ich prüfen lassen, ob eine gültige E-Mail Adresse in Feld13 eingegeben wurde?


Hier nun mein UserForm.
Sicherlich sind noch viele andere Verbesserungen möglich?

Mit freundliche Grüßen
Gabi



Private Sub CommandButton1_Click()
' ----- Der "Eintragebuttom" Anfang -----
' ----- Die 2 Textboxen (8 und 9) muessen Werte enthalten Anfang -----
' auch wenn sie unten auf die "richtigen" Werte geprueft werden soll an dieser Stelle
' sichergestellt werden, das bei Klick auf "Eintragen" auch Werte in den Boxen stehen
If TextBox8.Value = "" Or TextBox9.Value = "" Then
    MsgBox "Bitte PLZ und Ort ausfuellen!"
    Exit Sub
'dieses Teil verlassen, ohne Userform zu schliessen.
' ----- Textboxen muessen Werte enthalten Ende -----
End If
'UserForm1.Hide
'------ Ueernahme der Werte aus den Textboxen in die Exceltabelle -----
z = Range("A1").End(xlDown).Row + 1
If z > 65000 Then z = 2
    Cells(z, 1) = TextBox1
    Cells(z, 2) = TextBox2
    Cells(z, 3) = TextBox3
    Cells(z, 4) = TextBox4
    Cells(z, 5) = TextBox5
    Cells(z, 6) = TextBox6
    Cells(z, 7) = TextBox7
    Cells(z, 8) = TextBox8
    Cells(z, 9) = TextBox9
    Cells(z, 10) = TextBox10
    Cells(z, 11) = TextBox11
    Cells(z, 12) = TextBox12
    Cells(z, 13) = TextBox13
' ----- Textbox1 bis Textbox 13 leeren nach dem Uebertragen -----
' nun sollen alle Textfelder geleert werden
' Es erfolgt beim "Eintragen" jedoch noch eine laetige Meldung, das Ort und Postleitzahl keine Werte enthalten :( :( :(
Dim Tb As Integer
On Error Resume Next
For Tb = 1 To 13
    Me.Controls("TextBox" & Tb) = ""
Next Tb
End Sub



' ----- Der "Eintragebuttom" Ende -----


Private Sub Label7_Click()
End Sub


Private Sub TextBox1_Change()
End Sub


Private Sub TextBox13_Change()
    Dim I As Integer
    Dim At As Integer
    Dim Punkt As Integer
    For I = 1 To Len(Cells(1, 1))
    'MsgBox Mid(Cells(1, 1), I, 1)
      If Mid(Cells(1, 1), I, 1) = "@" Then
        At = At + 1
        Punkt = 0
      End If
      If Mid(Cells(1, 1), I, 1) = "." Then Punkt = Punkt + 1
    Next I
    If At <> 1 Then MsgBox "Fehler"
    If Punkt < 1 Then MsgBox "Fehler"
End Sub

' es muss eine "richtige" PLZ eingetragen werden, in Textfeld 8 bevor das Feld verlassen wird
Private Sub TextBox8_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim Wert As Variant
Wert = TextBox8.Value
    If Not (Wert >= 1000 And Wert <= 99999 And Len(Wert) >= 4 And Len(Wert) <= 5) Then
        MsgBox "Fehlerhafte Eingabe! Bitte PLZ eingeben, Danke!", vbInformation
        TextBox8.SetFocus
        TextBox8.SelStart = 0
        TextBox8.SelLength = Len(TextBox8.Value)
        Cancel = True
    Else
        TextBox8.Value = Format(Int(Wert), "00000")
    End If
End Sub

' Im Textfeld "Ort" (Textfeld 9) muss etwas stehen, vor Verlassen des Feldes
Private Sub TextBox9_Change()
If UserForm1.TextBox9.Value = "" Then
MsgBox "Bitte einen Eintrag machen! Der Ort muss angegeben sein!", vbOKOnly, "Pflichteingaben"
Exit Sub
End If
End Sub

Bild


Betrifft: AW: UserForm Eintrag bringt doppelte Meldung von: Jens_Pu
Geschrieben am: 05.02.2005 12:16:16

Hallo Gabi,

ohne alles nachvollzogen zu haben,
das Change-Ereignis tritt auch ein, wenn Du alle Felder leerst!
Deswegen kommt die Meldung, weil die ja in der Change-Procedure steht.

Gruß Jens


Bild


Betrifft: AW: UserForm Eintrag bringt doppelte Meldung von: Gabi
Geschrieben am: 05.02.2005 12:36:16

Hallo Jens,

danke für die schnelle Antwort.

Das ist mir nun klar, das Ereignis "alle Felder leeren" existiert ja nun einmal. Nach dem Eintrag in das Tabellenblatt, möchte ich ja nicht jedes Textfeld per Hand leeren um einen neuen Datensatz anlegen zu können. Zumal ja nicht immer alle oder die gleichen Textfelder ausgefüllt werden.

Wie bringe ich es nun unter einen Hut?:
- Es sollen 2 Felder Inhalte haben. Erst dann dürfen die Werte eingefügt werden.
- Nach dem Einfügen der Inhalte soll im UserForm alle Textfelder geleert werden.
- das UserForm soll nicht geschlossen werden

Ich bin schon recht am Zweifeln, ob das überhaupt machbar ist.

Mit freundlichen Grüßen
Gabi


Bild


Betrifft: AW: UserForm Eintrag bringt doppelte Meldung von: Jens_Pu
Geschrieben am: 05.02.2005 12:55:08

Hallo Gabi,

schon mal an eine Variable gedacht, die Du entsprechend setzt und abprüfst?

Gruß Jens


Bild


Betrifft: AW: UserForm Eintrag bringt doppelte Meldung von: Josef Ehrensberger
Geschrieben am: 05.02.2005 13:39:45

Hallo Gabi!

Mit Prüfvariable zB. so!


      
Option Explicit
Dim putData As Boolean

Private Sub CommandButton1_Click()
Dim z As Long
Dim Tb As Integer

putData = 
False   'Prüfvariable auf Falsch setzen

' ----- Der "Eintragebuttom" Anfang -----

' ----- Die 2 Textboxen (8 und 9) muessen Werte enthalten Anfang -----
' auch wenn sie unten auf die "richtigen" Werte geprueft werden soll an dieser Stelle
' sichergestellt werden, das bei Klick auf "Eintragen" auch Werte in den Boxen stehen
If TextBox8.Value = "" Or TextBox9.Value = "" Then
    MsgBox 
"Bitte PLZ und Ort ausfuellen!"
    
Exit Sub
'dieses Teil verlassen, ohne Userform zu schliessen.
' ----- Textboxen muessen Werte enthalten Ende -----
End If
'UserForm1.Hide

'------ Ueernahme der Werte aus den Textboxen in die Exceltabelle -----

putData = 
True    'Prüfvariable auf Wahr setzen weil Eintrag
                  'vorgenommen wird!

z = Range(
"A1").End(xlDown).Row + 1
If z > 65000 Then z = 2
For Tb = 1 To 13
    Cells(z, Tb) = Controls(
"TextBox" & Tb)
Next

' ----- Textbox1 bis Textbox 13 leeren nach dem Uebertragen -----
' nun sollen alle Textfelder geleert werden
' Es erfolgt beim "Eintragen" jedoch noch eine laetige Meldung, das Ort und Postleitzahl keine Werte enthalten :( :( :(

On Error Resume Next
For Tb = 1 To 13
    Me.Controls(
"TextBox" & Tb) = ""
Next Tb
putData = 
False      'Prüfvariable nach dem Löschen auf Falsch setzen
End Sub




' ----- Der "Eintragebuttom" Ende -----

Private Sub TextBox13_Change()
Dim I As Integer
Dim At As Integer
Dim Punkt As Integer
    
If putData Then Exit Sub   'Wenn Prüfvariable auf Wahr, dann Sub verlassen

    
For I = 1 To Len(Cells(1, 1))
    
'MsgBox Mid(Cells(1, 1), I, 1)
      If Mid(Cells(1, 1), I, 1) = "@" Then
        At = At + 1
        Punkt = 0
      
End If
      
If Mid(Cells(1, 1), I, 1) = "." Then Punkt = Punkt + 1
    
Next I
    
If At <> 1 Then MsgBox "Fehler"
    
If Punkt < 1 Then MsgBox "Fehler"


End Sub


' es muss eine "richtige" PLZ eingetragen werden, in Textfeld 8 bevor das Feld verlassen wird

Private Sub TextBox8_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim Wert As Variant

If putData Then Exit Sub      'Wenn Prüfvariable auf Wahr, dann Sub verlassen

Wert = TextBox8.Value
    
If Not (Wert >= 1000 And Wert <= 99999 And Len(Wert) >= 4 And Len(Wert) <= 5) Then
        MsgBox 
"Fehlerhafte Eingabe! Bitte PLZ eingeben, Danke!", vbInformation
        TextBox8.SetFocus
        TextBox8.SelStart = 0
        TextBox8.SelLength = Len(TextBox8.Value)
        Cancel = 
True
    
Else
        TextBox8.Value = Format(Int(Wert), 
"00000")
    
End If
End Sub


' Im Textfeld "Ort" (Textfeld 9) muss etwas stehen, vor Verlassen des Feldes

Private Sub TextBox9_Change()

If putData Then Exit Sub      'Wenn Prüfvariable auf Wahr, dann Sub verlassen

If UserForm1.TextBox9.Value = "" Then
MsgBox 
"Bitte einen Eintrag machen! Der Ort muss angegeben sein!", vbOKOnly, "Pflichteingaben"
Exit Sub
End If

End Sub 


     Code eingefügt mit Syntaxhighlighter 3.0



Gruß Sepp

P.S.: Rückmeldung nicht vergessen!


Bild


Betrifft: AW: UserForm Eintrag bringt doppelte Meldung von: Gabi
Geschrieben am: 05.02.2005 15:01:39

Hallo Sepp,

DANKE!!

3x in die Luft gesprungen - in die Hände klatsch!

Es scheint anstandslos zu funktionieren.

Liebe Grüße
Gabi


Bild


Betrifft: Sepp ist der Beste! von: Kurt
Geschrieben am: 05.02.2005 15:15:27

o


Bild


Betrifft: AW: UserForm Eintrag bringt doppelte Meldung von: Gabi
Geschrieben am: 06.02.2005 09:22:14

Hallo Sepp,

die Variablen für TextBox13 liefern bei der Eingabe eines *jeden* Zeichens und beim "Betreten" der TextBox die zu bestätigende Meldung "Fehler" :(


' ----- Die Mailadresse eintragen Beginn -----

Private Sub TextBox13_Change()
Dim I As Integer
Dim At As Integer
Dim Punkt As Integer
    
If putData Then Exit Sub   'Wenn Prüfvariable auf Wahr, dann Sub verlassen
    For I = 1 To Len(Cells(1, 1))
    'MsgBox Mid(Cells(1, 1), I, 1)
      If Mid(Cells(1, 1), I, 1) = "@" Then
        At = At + 1
        Punkt = 0
      End If
      If Mid(Cells(1, 1), I, 1) = "." Then Punkt = Punkt + 1
    Next I
    If At <> 1 Then MsgBox "Fehler"
    If Punkt < 1 Then MsgBox "Fehler"
End Sub


' ----- Die Mailadresse eintragen Ende -----

Liebe Grüße
Gabi


Bild


Betrifft: AW: UserForm Eintrag bringt doppelte Meldung von: Josef Ehrensberger
Geschrieben am: 06.02.2005 09:54:56

Hallo Gabi!

Deien Code hab' ich natürlich nicht überprüft!

Ich würde das "Exit" Ereignis nutzen, um die Mailadresse zu überprüfen.

Private Sub TextBox13_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If putData Then Exit Sub   'Wenn Prüfvariable auf Wahr, dann Sub verlassen
   If TextBox13 Like "*@*.*" And Len(TextBox13) - Len(Replace(TextBox13, "@", "")) = 1 Then
   Else
   MsgBox "Fehler"
   Cancel = True
   TextBox13.SelStart = 0
   TextBox13.SelLength = Len(TextBox13)
   End If
End Sub



Gruß Sepp

P.S.: Rückmeldung nicht vergessen!


Bild


Betrifft: AW: UserForm Eintrag bringt doppelte Meldung von: Gabi
Geschrieben am: 06.02.2005 10:16:33

Hallo Sepp,

Du bist ein Schatz! DANKE!

Das funktioniert prima!

Liebe Grüße
Gabi


 Bild

Beiträge aus den Excel-Beispielen zum Thema "UserForm Eintrag bringt doppelte Meldung"