Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1632to1636
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

Pflichtfelder

Pflichtfelder
12.07.2018 09:52:44
Gerald
Hallo,
habe folgendes Makro in meine Arbeitsmappe hineinkopiert:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim rngPflicht As Range, rngBereich As Range
Dim intLeere As Integer
Set rngPflicht = [B5:I5]
For Each rngBereich In rngPflicht.Areas
intLeere = intLeere + Application.WorksheetFunction.CountBlank(rngBereich)
Next
If intLeere > 0 Then
Cancel = True
MsgBox "Bitte zuerst alle Pflicht-Felder ausfüllen !"
End If
End Sub
Funktioniert alles auch soweit bestens. Das Makro soll aber jetzt nicht nur im Bereich B5:I5 die Pflichtfelder prüfen, sondern auch in den Bereichen B6:I6 bis B500:I500, also in jeder darunter befindlichen Zeile separat. Ist sehr wahrscheinlich nur eine Kleinigkeit, für mich bescheidenen Anwender aber zu hoch. Im Forum konnte ich leider nicht fündig werden (vielleicht habe ich auch falsch gesucht). Kann mir jemand einen Tip geben? Danke.

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pflichtfelder
12.07.2018 09:57:21
Hajo_Zi
set rngpflicht =Range("B5:I6, B500:I500")

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
AW: Pflichtfelder
12.07.2018 10:49:57
Gerald
Hallo Hajo,
vielen Dank für die schnelle Auskunft. Makro sieht nun wie folgt aus:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim rngPflicht As Range, rngBereich As Range
Dim intLeere As Integer
Set rngPflicht = Range("B5:I5, B500:I500")
For Each rngBereich In rngPflicht.Areas
intLeere = intLeere + Application.WorksheetFunction.CountBlank(rngBereich)
Next
If intLeere > 0 Then
Cancel = True
MsgBox "Bitte zuerst alle Pflicht-Felder ausfüllen !"
End If
End Sub
Leider bekomme ich beim Speichern die Fehlermeldung: "Bitte zuerst alle Pflicht-Felder ausfüllen !", obwohl noch keine Daten in den Zellen eingegeben sind.
Anzeige
AW: Pflichtfelder
12.07.2018 10:52:04
Hajo_Zi
nur wenige schauen auf Deinen Rechner und sehen die Datei.
Ich möchte gerne den Fehler im Original sehen.
Ich baue keine Datei nach. Die Zeit hat schon jemand investiert.
Ein Nachbau sieht meist anders aus als das Original. Darum sollte das Original verlinkt werden.
Wenn du an Stelle einer Demomappe deine Originalmappe hochladen willst, diese aber sensible Daten enthält, kannst du diese Daten anonymisieren bzw. pseudonymisieren.
Benutze hier im Forum die Funktion zum hochladen. Falls Du die nicht benutzen möchtest beachte, von unsicheren Servern wie z.B. www.file-upload.net lade ich keine Datei runter. (lt. Einschätzung meines Virenprogramms)
vielleicht
For Each rngBereich In rngPflicht
Gruß Hajo
Anzeige
AW: Pflichtfelder
12.07.2018 11:33:54
Gerald
Hallo Hajo,
Link zur Tabelle:
https://www.herber.de/bbs/user/122630.xlsm
Es soll immer eine Zeile nach der Anderen überprüft werden. Ist also in B5 ein Wert eingetragen, dann sollen auch die Zellen C5:I5 mit Werten befüllt werden müssen. Anschließend soll die nächste Zeile geprüft werden. Die Tabelle wird nach und nach befüllt, also Zeile für Zeile und nicht gleich sofort alle Felder im Bereich B5:I500. Hoffe es ist einigermaßen verständlich.
Danke
Gerald
AW: Pflichtfelder
12.07.2018 11:42:07
Hajo_Zi
Gut ich kann Dir leider nicht helfen, da ich das Makro nicht sehe.
Ich bin dann raus.
Vielleicht sieht jemand anderes das Makro.
Gruß Hajo
Anzeige
AW: Pflichtfelder
12.07.2018 10:59:07
Oberschlumpf
Hi Gerald
Zitat: Leider bekomme ich beim Speichern die Fehlermeldung: "Bitte zuerst alle Pflicht-Felder ausfüllen !", obwohl noch keine Daten in den Zellen eingegeben sind.
Aber genau DAS willst du doch. Speichern erst + nur dann möglich, wenn alle Zellen im Bereich nicht leer sind.
Dieser Code wirkt sich natürlich auch schon während der Testphase aus.
Also musst du
- im Direktfenster (VBE) erst mal Application.EnabledEvents = False eingeben
- JETZT die Datei mit geändertem Code oder sonstigen Änderungen speichern
- dann wieder im Direktfenster (VBE) Application.EnabledEvents = True eingeben
Hilfts?
Ciao
Thorsten
Anzeige
AW: Pflichtfelder
12.07.2018 10:42:58
Oberschlumpf
Hi Gerald,
meinst du das wirklich ernst?
Jede Zelle in B5:I500 MUSS ausgefüllt sein?
(an Zeilen sind das schon 495 Zeilen!; die Anzahl an zu prüfenden Zellen will ich gar nicht ausrechnen :-) )
HaJos Vorschlag finde ich suboptimal, da nach seiner Idee nur 2 Zeilen geprüft werden, nämlich Zeile 5 + 500.
Die Pflichtzellen zu kontrollieren ist wirklich eine Kleinigkeit; aber die, die das ausfüllen MÜSSEN, werden sich bei dir..ähh..."bedanken".
Versuch das hier:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim rngPflicht As Range, rngBereich As Range
Dim intLeere As Integer
'du willst ja JEDE ZEiLE von 5-500, also JEDE ZELLE im Bereich prüfen; also B5 bis B500, I5  _
bis I500 und alles dazwischen
Set rngPflicht = [B5:I500]
For Each rngBereich In rngPflicht.Areas
intLeere = intLeere + Application.WorksheetFunction.CountBlank(rngBereich)
'da schon bei der ersten Zelle ohne Inhalt das "Ziel" gefunden wurde, müssen  _
weitere Zellen nicht geprüft werden
'somit kann die For/Next-Schleife mit Exit For verlassen werden; das spart Rechen- + _
Wartezeit
Exit For
Next
If intLeere > 0 Then
Cancel = True
MsgBox "Bitte zuerst alle Pflicht-Felder ausfüllen !"
End If
End Sub

Hilfts?
Ciao
Thorsten
Anzeige
AW: Pflichtfelder
12.07.2018 11:55:00
Gerald
Hallo Hajo,
sorry, habe falsche Tabelle erwischt. Hier sollte nun die Tabelle mit dem alten Code (nur für die Zeile 5) sein:
https://www.herber.de/bbs/user/122631.xlsm
Vielen Dank
Gerald
AW: Pflichtfelder
12.07.2018 12:43:07
Gerald
Hallo Hajo,
haben soeben von meinem Mailprogramm mitgeteilt bekommen, dass aus Sicherheitsgründen VBA aus meiner Mail gelöscht wurde. Das bereits erwähnte Makro hatte sich im VBA-Projekt "Diese Arbeitsmappe" befunden.
Gruß
Gerald
AW: Pflichtfelder
12.07.2018 13:22:38
Oberschlumpf
Was hindert dich daran, auf meine Ideen zu antworten?
AW: Pflichtfelder
12.07.2018 14:56:02
Gerald
Hallo,
habe mich jetzt einige Zeit mit Hajo Zi in der Sache unterhalten, der mir eine Lösung anbieten wollte. Von daher habe ich noch keine Rückmeldung geben können. Sorry.
Zu Deinem Vorschlag:
Ich habe es noch nicht ausprobiert, glaube aber nicht das es das ist was ich möchte. Mein Ziel ist folgendes:
Dateneingabe in die Zellen B5:I5 (stellt einen Datensatz dar). Sobald in der Zelle B5 ein Wert eingetragen ist müssen in den Zellen C5:I5 ebenfalls Werte eingetragen werden. Sollte in einer der Zellen ein Wert fehlen soll beim Abspeichern die besagte Fehlermeldung erscheinen.
Das Gleiche gilt dann für die Bereiche B6:I6, B7:I7 usw., also jede Zeile für sich.
Die Tabelle wird nach und nach weiter befüllt werden, also nicht alles auf einmal. Konnte ich mich einigermaßen verständlich ausdrücken?
Habe im Moment keine Zeit Deinen Vorschlag zu testen. Melde mich Freitag noch einmal. Aber vielleicht kannst Du mir ja auch mit meinen jetzt gemachten Angaben helfen. Im Voraus schon einmal vielen Dank für Deine Mühe.
Gruß Gerald
Anzeige
AW: Pflichtfelder
12.07.2018 16:04:15
Oberschlumpf
Hi Gerald,
die Einschränkung, dass eine "Zeile" nur dann vollständig geprüft werden soll, wenn in Spalte B etwas eingetragen ist, habe ich in deinen vorherigen Beschreibungen nicht erkennen können.
In dem Fall würde ich es so versuchen:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim lloRow As Long, lloCol As Long, lboEmpty As Boolean
'diese For/Next durchläuft alle Zeilen von 5 bis 500
For lloRow = 5 To 500
'nur, wenn in Spalte B, Zeile (von 5-500) ein Eintrag vorhanden, ...
If Range("B" & lloRow).Value  "" Then
'...dann überprüf wieder mit For/Next die Einträge in den Nachbarspalten 3 bis  _
9, bzw C bis I
For lloCol = 3 To 9
'wenn eine Zelle in den Spalten C bis I ohne Eintrag, ...
If Cells(lloRow, lloCol).Value = "" Then
'...setz lboEmpty auf WAHR und verlasse dieses innere For/Next
lboEmpty = True
Exit For
End If
Next
'nur wenn lboEmpty = WAHR (dann wurde eine leere Pflichtzelle gefunden)...
If lboEmpty = True Then
'...dann verhindere das Speichern
Cancel = True
'...weise mit einem Hinweis darauf hin
MsgBox "Bitte zuerst alle Pflicht-Felder in Zeile " & lloRow & " ausfüllen ! _
'...und verlasse auch das äußere For/Next
Exit For
End If
End If
Next
End Sub

Dieser Code fängt aber auch wirklich erst dann an, die Spalten C bis I zu prüfen, wenn in B etwas eingetragen wurde.
Wenn es die Situation "Einträge in einer Zeile z Bsp in C, G und I, aber NICHT in B vorhanden" nicht gibt, dann sollte mein Code ausreichen.
Hilfts?
Ciao
Thorsten
P.S. deine vorherige Code-Konstruktion überprüft jede Zelle auf "leer"; also auch dann, wenn in Spalte B nichts eingetragen ist. Solche Zeilen wolltest du ja überspringen.
Anzeige
AW: Pflichtfelder
13.07.2018 07:18:24
Gerald
Hallo Thorsten,
vielen Dank für Deine Mühe. Leider will es nicht so richtig funktionieren. Beim Abspeichern bekomme ich die Meldung Laufzeitfehler 1004 und die Zeile
If Cells(lloRow, lloCol).Value = "" Then
wird gelb markiert.
Außerdem habe ich die Zeile
For lloCol = 3 To 9
geändert in
For lloCol = C To I
und die Zeile
MsgBox "Bitte zuerst alle Pflicht-Felder in Zeile " & lloRow & " ausfüllen ! _
"
geändert in
MsgBox "Bitte zuerst alle Pflicht-Felder ausfüllen !"
Denke daran sollte es aber nicht gelegen haben. Kannst Du mir vielleicht noch einen Rat geben, wie ich das Makro zum Laufen bekomme? Vielen Dank.
Grüße
Gerald
Anzeige
AW: Pflichtfelder
13.07.2018 08:21:08
Oberschlumpf
Hi Gerald,
eine Bsp-Datei per Upload und einigen Bsp-Datenzeilen könnte helfen, denke ich.
Ciao
Thorsten
ach ja...
13.07.2018 08:33:09
Oberschlumpf
Hi nochmal
...und deine Änderung
For lloCol = C To I
dürfte mind. zu einem zusätzlichen Fehler führen.
Eine For-Zeile erwartet nach dem = 2 numerische Werte. Mit Buchstaben wird das nix.
Es sei denn, dass du C und I als Variablennamen verwendest und diesen Variablen vor der For...-Zeile jeweils die Werte 3 und 9 zugewiesen hast.
Wenn dem so ist, dann funktioniert es zwar, aber dann hattest du in der Auflistung deiner Änderungen vergessen, zu erwähnen, dass du auch Code hinzugefügt hast wie eben:
Dim C As Integer, I As Integer
C = 3
I = 9
Oder?
Ciao
Thorsten
Anzeige
AW: ach ja...
13.07.2018 09:33:34
Gerald
Hallo Thorsten,
perfekt. Tausend Dank. Funktioniert bestens. Hast mir sehr geholfen.
Gruß Gerald
AW: ach ja...
13.07.2018 09:35:27
Gerald
....kannst Du mir vielleicht noch mitteilen wie der Beitrag geschlossen wird?
AW: ach ja...
13.07.2018 09:51:34
Bernd
Hi,
indem Du das Kontrollkästchen nicht mehr aktivierst.
MfG Bernd
womit...
13.07.2018 09:56:35
Oberschlumpf
...genau...
Hi Gerald,
...habe ich dir denn geholfen?
In diesem Forum gibt es keinen "erledigt"-Button oder Ähnliches.
Ein Problem wird von allen als "erledigt" angesehen, wenn Derjenige, der die Erstfrage (Problem) gestellt hat, am Ende einfach mitteilt, dass ihm vollumfänglich geholfen wurde.
Sollte aus allen Teil-Antworten nicht klar erkennbar sein, wie dem Fragenden geholfen wird, wird es gern gesehen, wenn Derjenige, dem geholfen wurde, genau beshcreibt, wie ihm denn geholfen wurde.
Denn Gerald, du glaubst gar nicht, WIE OFT viele Fragenden das gleiche Problem haben :-)
Und da ist es dann hilfreich, wenn z Bsp jemand irgdwann genau "deine Frage" erneut stellen will, vorher aber deine Fragen/meine Antworten findet.
Und wenn du jetzt noch genau beshcreibst, wie ich dir denn helfen konnte, wird sich auch der Nächste mit deinem Ex-Problem ;-) freuen :-)
Ciao
Thorsten
AW: womit...
13.07.2018 19:29:37
Gerald
Hallo Thorsten,
ja, Du hast meine Problemstellung zu 100% gelöst. Ich bin überaus glücklich und zufrieden und werde heute Abend ein Bierchen für Dich mittrinken. Nochmal vielen Dank.
Liebe Grüße Gerald
Was hast du...
13.07.2018 19:35:18
Oberschlumpf
Hi Gerald,
...an meiner Frage: "WOMIT habe ich geholfen?" ...nicht verstanden?
Ich wollte von dir nicht noch mal ein Dankeschön, DASS ich helfen konnte, sondern ich möchte wissen, WIE ich helfen konnte.
Vielleicht klappt es ja diesmal ;-)
Ciao
Thorsten

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige