Anzeige
Archiv - Navigation
1764to1768
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

Prüfung beim Öffnen der Mappe

Prüfung beim Öffnen der Mappe
12.06.2020 20:52:56
Peer
Hallo.
Ich möchte beim Öffnen der Mappe prüfen lassen, ob in UF "Parameter" bestimmte Textfelder mit Werten bestückt sind. Diese Werte sind oder werden in der gleichnamigen Tabelle hinterlegt.
Dazu habe ich im Netz folgenden Code gefunden und wollte ihn anpassen, aber er funktioniert nicht, wie erhofft.

Private Sub Workbook_Open()
Dim lngMonth As Long
Dim blnFound As Boolean
Dim objName As name
Dim ctrElement As control
For Each ctrElement In frm_Parameter.Controls
If TypeName(ctrElement) = "TextBox" Then
Select Case ctrElement.name
Case Is = "txt_Name", "txt_Funktion"
Case Else
If IsNull(ctrElement) Then
MsgBox "Bitte alle Pflichtfelder ausfüllen!" & ctrElement.name
frm_Parameter.Show
Exit For
End If
End Select
End If
Next ctrElement

Ursprünglich wollte ich jedem dieser Textfelder, die geprüft werden sollen, folgendes zuordnen.. _ .

With Sheets("Parameter")
If .Cells(15, 3).Value = "" Then    'Textfeld "Name"
MsgBox "Bitte deinen Namen eingeben!", vbOKOnly + vbInformation, "Parameter Name"
frm_Parameter.Show
End If
End With

und so weiter.
Dies wollte ich aber einfacher machen und kam auf die Idee einer Schleife. An ein Array hatte ich auch schon gedacht, aber da stehe ich aktuell auf dem Schlauch.
Nun passiert beim Start der Mappe nichts, obwohl txt_Name leer ist.
Wenn ich statt

If IsNull(ctrElement) Then
nun

If ctrElement.Value = "" Then
schreibe, kommt zwar die MsgBox, aber es wird eine vollkommend andere TextBox angezeigt und sie ist nicht mal leer. Die im Case angegebenen TextBoxen sind zwar leer, werden aber nicht genannt.
  For Each ctrElement In frm_Parameter.Controls
If TypeName(ctrElement) = "TextBox" Then
Select Case ctrElement.name
Case Is = "txt_Name", "txt_Funktion"
Case Else
If ctrElement.Value = "" Then
MsgBox "Bitte alle Pflichtfelder ausfüllen!" & ctrElement.name
frm_Parameter.Show
Exit For
End If
End Select
End If
Next ctrElement

Wie kann ich die Gültigkeitsprüfung richtig machen?
Vielen Dank für eure Hilfe.
LG
Peer

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Prüfung beim Öffnen der Mappe
12.06.2020 21:03:25
ralf_b
sind zum zeitpunkt der workbook_open ereignisses überhaupt userforms schon geladen und gefüllt?
case else ist ein anderer zweig, der wird nicht durchlaufen wenn deine beiden textfelder im oberen case behandelt werden. somit keine msgbox wenn die oberen leer sind
AW: Prüfung beim Öffnen der Mappe
13.06.2020 10:30:14
Peer
Hallo ralf_B
Stimmt. Um den Code auszuführehn, muss die Uf erstmal geöffnet sein. Ich hatte hier an

Load frm_Parameter
vor der Schleife gedacht und mit

frm_Parameter.Hide
erstmal in den Hintergrund ausgeblendet und im Speicher gelassen wird, damit, wenn die Bedingung, in einer angegebenen TextBox kein Wert steht, ich dann die Uf in den Vordergrund mit

.Show
hole oder die TextBoxen haben alle einen Wert, mit

.Unload
schließe.
Aber außer, das die MsgBox mit dem falschen ctrElement angezeigt wird, passiert sonst nix.
Ich denke noch an eine zweite Möglichkeit. Wenn das Workbook geöffnet wird, lade ich die _ Tabelle "Parameter". Wenn ich jetzt den Inhalt der Zellen, die ja die Werte für die TextBoxen herausnehmen, prüfe, würde ich aber wie am Anfang mit

With Sheets("Parameter")
If IsNull(.Cells(15, 3)) Or _
IsNull(.Cells(15, 4)) Then
MsgBox "Bitte Angaben vervollständigen!", vbOKOnly + vbInformation, "Parameter  _
Eingaben"
frm_Parameter.Show
End If
End With
alles komplizierter Schreiben müssen.
Wie mache ich es richtig?
Gruß
Peer
Anzeige
AW: Prüfung beim Öffnen der Mappe
12.06.2020 21:54:25
onur

Private Sub CommandButton1_Click()
Dim ctrElement
For Each ctrElement In frm_Parameter.Controls
If TypeName(ctrElement) = "TextBox" Then
Select Case ctrElement.Name
Case "txt_Name", "txt_Funktion"
Case Else
If ctrElement.Value = "" Then
MsgBox "Bitte alle Pflichtfelder ausfüllen!" & ctrElement.Name
frm_Parameter.Show
Exit For
End If
End Select
End If
Next ctrElement
End Sub

AW: Prüfung beim Öffnen der Mappe
13.06.2020 10:40:13
Peer
Hallo onur.
Ich habe deinem Vorschlag einfach mal kopiert und eingefügt, da ich außer

Case Is =
und

If ctrElement.Value = "" Then
und

Dim ctrElement As control
scheinbar keinen Unterschied zu meinem Code sehe.
Aber auch hier passiert nichts, obwohl z.B. txt_Name leer ist.
Gruß
Peer
Anzeige
AW: Prüfung beim Öffnen der Mappe
13.06.2020 11:43:17
onur
"obwohl z.B. txt_Name leer ist" ?
ICH HATTE JA KEINE AHNUNG, DASS DU DEINEN EIGENEN CODE NICHT VERSTEHST !
Dann erkläre ICH ihn dir mal:
Case "txt_Name", "txt_Funktion"
Case Else
bedeutet:
Im Falle von "txt_Name", "txt_Funktion":
MACHE NIX (da kein Code da steht)
Case Else
bedeutet: in allen ANDEREN Fällen
MsgBox zeigen usw.
Also kann keine MsgBox bei "txt_Name" und "txt_Funktion" kommen!
AW: Prüfung beim Öffnen der Mappe
13.06.2020 12:13:41
Peer
Wenn ich den Code, der nicht mein eigener, sondern nur angepasst ist, verstehen würde, hätte ich die Frage nicht gestellt.
Aber dank dir, kann ich ihn jetzt verstehen.
Danke dir dafür.
Die ursprüngliche Frage war, wie ich es realisieren kann, dass bestimmte Textfelder in frm_Parameter nach Inhalt geprüft werden, wenn man die Mappe öffnet. Und wenn bei einer oder mehreren der bestimmten Textboxen (txt_Name, txt_Funktion) nix drin steht, dann soll die Uf frm_Parameter geöffnet oder in den Vordergrund geholt werden mit einer vorher gezeigten MsgBox unter Angabe der jeweiligen TextBox.Name(n), bei denen der Inhalt noch fehlt. Das ist der Plan.
Ich dachte hier eventuell an einen Array.

Dim ctrElement()
Dim i As Integer
ctrElement = Array("txt_Name", "txt_Funktion")
For i = 0 To UBound(ctrElement())
If ctrElement.Value = "" Then
MsgBox "Alles ausfüllen" & Chr(10), vbOKOnly + vbInformation, "Parameter"
frm_Parameter.Show
End If
Next

Aber der Debugger bemängelt "Ungültiger Bezeichner" bei ctrElement.
Gruß
Peer
Anzeige
AW: Prüfung beim Öffnen der Mappe
13.06.2020 12:20:23
onur
Du lernst aber auch gar nix.
Du weisst nicht, wie man mit Case programmiert und willst dich jetzt auch noch an Arrays versuchen?
Wenn die Prüfung nur bei den beiden Textboxen kommen soll, musst du doch nur das mit MsgBox direkt HINTER
Case "txt_Name", "txt_Funktion" schreiben.
Private Sub CommandButton1_Click()
Dim ctrElement
For Each ctrElement In frm_Parameter.Controls
If TypeName(ctrElement) = "TextBox" Then
Select Case ctrElement.Name
Case "txt_Name", "txt_Funktion"
If ctrElement.Value = "" Then
MsgBox "Bitte alle Pflichtfelder ausfüllen!" & ctrElement.Name
frm_Parameter.Show
Exit For
End If
End Select
End If
Next ctrElement
End Sub

Anzeige
AW: Prüfung beim Öffnen der Mappe
13.06.2020 12:57:10
Peer
Ich will ja lernen, aber mit Bemerkungen, bei denen man entweder das selbe Level verlangt und mit schnippischen Erläuterungen einen für doof erklärt, kann man dies nicht.
Was für dich "einfach " und logisch ist, verstehe ich noch nicht.
Ich behaupte für mich, dass ich schon ein Stück näher komme.
Ich hatte fast deine Lösung, nur die Uf war noch in der For Schleife.
Das funktioniert noch nicht richtig, da auch bei Inhalt aller TextBoxen die MsgBox kommt. Und es werden, obwohl txt_Funktion Inhalt hat, in der MsgBox trotzdem alle ctrElement.name angezeigt. So sollen aber nur fehlende inhaltliche ctrElement.name angezeigt werden.
Gruß
Peer
Anzeige
AW: Prüfung beim Öffnen der Mappe
13.06.2020 13:01:28
onur
Dann poste doch mal die (Beispiels-) Datei, damit man das mal selber sehen kanst, was du meinst.
Hast du denn die veränderte Version des Codes gesehen, die ich danach gepostet hatte?
AW: Prüfung beim Öffnen der Mappe
13.06.2020 13:27:55
Peer
Ja, ich habe sogar um sicher zu gehen, deine Code kopiert und eingefügt.
Zur Datei:
Ich habe sehr viel rausnehmen müssen. Also kann ich nicht garantieren, ob alles geht. Die Datei hat ursprünglich 750 kb, also zu groß zum Hochladen.
Ich habe mein Angesprochenes im Workbook_Open Event.
Alle Module sind teils geholfen, teils mein Anfänger-Talent.
https://www.herber.de/bbs/user/138260.xlsm
Gruß
Peer
Anzeige
AW: Prüfung beim Öffnen der Mappe
13.06.2020 14:03:56
onur
"da auch bei Inhalt aller TextBoxen die MsgBox kommt" - wie soll denn in den Textboxen was drinstehen können, wenn du die Datei gerade erst geöfnet hast?
AW: Prüfung beim Öffnen der Mappe
13.06.2020 15:02:36
Peerli
Stimmt, onur.da hast du vollkommen recht. Daran habe ich gar nicht gedacht.
Hmmm.
AW: Prüfung beim Öffnen der Mappe
14.06.2020 17:32:58
Peer
Bin jetzt wieder daheim und habe mch gleich wieder davor gesetzt.
Ich konnte auch jetzt keine andere Lösung finden, wie bei Öffnen der Mappe die Tabelle " _ Parameter" nach Zelleninhalt zu prüfen.

With Sheets("Parameter")
If .Cells(15, 3).Value = "" Or _
.Cells(15, 7).Value = "" Then
Application.ScreenUpdating = False
MsgBox "Bitte Angaben vervollständigen!", vbOKOnly + vbInformation, "Parameter  _
Eingaben"
frm_Parameter.Show
End If
End With
Application.ScreenUpdating = True

Das funktioniert soweit auch, nur habe ich das Manko, dass ich in der MsgBox nicht die fehlenden Werte anzeigen lassen kann. Oder doch?
In Cells (15, 3) steht der Name und in Cells (15, 7) die Funktion.
Hat jemand eine Lösung hierfür?
Gruß
Peer
Anzeige
AW: Prüfung beim Öffnen der Mappe
14.06.2020 17:34:45
onur
Nicht beim Öffnen der Mappe überprüfen sondern beim Schliessen der Userform.
AW: Prüfung beim Öffnen der Mappe
14.06.2020 17:45:32
Peer
Das habe ich auch gedacht, aber ich möchte den Benutzer vor dem Arbeiten mit dem Projekt das Prüfen der richtigen Daten erzwingen, weil sonst alles nicht korrekt arbeitet. Also muss ich entweder die Zelleninhalte des Sheets abfragen oder die Uf im Hintergrund beim Öffnen der Mappe laden und bei Fehler der Inhalte die Uf in den Vordergrund bringen oder bei Vollständigkeit der Inhalte die in den Hintergrund geladen Uf mit unload aus dem Speicher entlassen.
Also mein Gedanke

Load frm_Parameter
und

frm_Parameter.Hide
.
Ist das überhaupt machbar?
Gruß
Peer
Anzeige
AW: Prüfung beim Öffnen der Mappe
14.06.2020 19:41:09
Peer
Ich habe das beim Schließen der Uf so gelöst...

Private Sub UserForm_QueryClose(cancel As Integer, CloseMode As Integer)
Dim ctrElement
'Abfrage, ob alle nötigen Felder ausgefüllt sind
For Each ctrElement In frm_Parameter.Controls
If TypeName(ctrElement) = "TextBox" Then
Select Case ctrElement.name
Case "txt_Name", "txt_Funktion"
If ctrElement.Value = "" Then
MsgBox "Bitte noch das Feld " & ctrElement.Tag & " ausfüllen!"
cancel = True
End If
End Select
End If
Next ctrElement
End Sub

Und beim Öffnen der Mappe in Workbook_Open mit

With Sheets("Parameter")
If .Cells(15, 3).Value = "" Or _
.Cells(15, 7).Value = "" Or _
.Cells(15, 9).Value = "" Or _
.Cells(18, 3).Value = "" Or _
.Cells(18, 4).Value = "" Or _
.Cells(18, 5).Value = "" Or _
.Cells(18, 7).Value = "" Or _
.Cells(21, 3).Value = "" Or _
.Cells(21, 4).Value = "" Or _
.Cells(21, 5).Value = "" Or _
.Cells(21, 7).Value = "" Or _
.Cells(25, 3).Value = "" Then
Application.ScreenUpdating = False
MsgBox "Bitte Angaben vervollständigen!", vbOKOnly + vbInformation, "Parameter  _
Eingaben"
frm_Parameter.Show
End If
End With
Application.ScreenUpdating = True
vorerst so realisiert.
Ich weiß, es ist nicht schön und alles, was ich zusätzlich noch wollte, klappt noch nicht, aber vielleicht fällt mir noch etwas ein.
Oder euch. ;-)
LG
Peer
Anzeige
AW: Prüfung beim Öffnen der Mappe
13.06.2020 12:27:23
onur
So kommt die Userform erst am Ende - vorher ist der Code schon bei der ersten leeren Textbox rausgesprungen.
Private Sub CommandButton1_Click()
Dim ctrElement
For Each ctrElement In frm_Parameter.Controls
If TypeName(ctrElement) = "TextBox" Then
Select Case ctrElement.Name
Case "txt_Name", "txt_Funktion"
If ctrElement.Value = "" Then
MsgBox "Bitte alle Pflichtfelder ausfüllen!" & ctrElement.Name
End If
End Select
End If
Next ctrElement
frm_Parameter.Show
End Sub

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige