Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1952to1956
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üfen, ob Nachbarzelle leer ist mit VBA

Prüfen, ob Nachbarzelle leer ist mit VBA
15.11.2023 17:26:04
Peer
Hallo zusammen.
Leider finde ich auch nach langen herumprobieren und mit meinen bescheidenen VBA-Kenntnissen nicht die Lösung für folgendes Problem.
Ich habe einen Jahreskalender unterteilt in mehrere Blätter. In diesen trage ich für jeden Tag Angaben in eine Zeile ein.
In Spalte B ist der Tag (Format TT), in Spalte C steht der dazugehörige Monat (MMM). In Spalte D soll ein Eintrag enthalten sein, der zeitnah eingetragen wird, zB. "Urlaub".
Der Bereich beginnt bei Zeile 12 und endet bei Zeile 42 (31 Tage).
Am Monatsende wird alles ausgedruckt. Dafür habe ich ein Sub für den Ausdruck erstellt (bzw. erstellen lassen).
Bis jetzt wird der Ausdruck gestartet, egal wie die Einträge aussehen und ob sie vollständig sind.

Jetzt habe ich folgendes in den Sub zum Ausdrucken erstellt...
Dim c As Variant


' Abfrage, das alle Zellen in Spalte D (Verwendung) ausgefüllt sind
For Each c In ActiveSheet.Range("D12:D42")
If c.Value = "" Then MsgBox "Mindestens ein Verwendungseintrag fehlt!" _
& vbNewLine & vbNewLine & "Der Ausdruck wird nur bei vollständig ausgefüllten Monat gestartet." _
, vbInformation + vbOKOnly, "Ein Eintrag fehlt": Exit Sub
Next

Nun hat nicht jeder Monat gleich 31 Tage und der Februar noch zusätzlich das Schaltjahr.
Meine Idee war, dass ich mit einer For each-Schleife einmal die Einträge der Spalte B12:B42 durchlaufen lasse und wenn in selber Zeile die Spalte D12:D42 (ebenfalls eine For Each-Schleife? oder mit c.offset(,2)?) leer ist, eine Meldung erscheint und der Ausdruck verhindert wird. Wenn aber beide Spalten ausgefüllt sind und auch ausgefüllt sein müssen, soll der Ausdruck starten.

Derzeitige Version würde den Ausdruck nur bei den Monaten mit 31 Tagen zulassen. Alle anderen Monate und auch der Monat, der unvollständig ist, die Meldung erzeugen.

Ich glaube, mein Ansatz ist nicht richtig. Vielleicht ist es auch die falsche Schleife.

Wie kann muss ich da vorgehen?

Anbei eine stark reduzierte Original-Datei. Im Tab "Erfassungsbelege" ist im Ribbon "eTime" der Button zum Ausdruck des aktive Sheet. Die Sub ist "con_druckenGrau"
https://www.herber.de/bbs/user/164310.xlsm
LG
Peer

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Prüfen, ob Nachbarzelle leer ist mit VBA
15.11.2023 17:38:46
daniel
Hi
for each c in Range("B12:B42").SpecialCells(xlcelltypeconstants, 1).Offset(0, 2)


hier wird erstmal die Spalte B mit den Datumswerten genommen und die Schleife läuft über alle Zellen, die eine Zahl bzw ein Datum enthalten (1 für Zahl, 2 für Text, 3 für Zahl oder Text).
somit werden die leeren Zellen am Ende bei Monaten mit weniger als 31 Tagen nicht mehr von der Schleife berücksichtigt.
über das Offset mit 2 Spalten kommst du dann von Spalte B nach Spalte C.




Gruß Daniel
AW: Prüfen, ob Nachbarzelle leer ist mit VBA
15.11.2023 17:39:09
daniel
Hi
for each c in Range("B12:B42").SpecialCells(xlcelltypeconstants, 1).Offset(0, 2)


hier wird erstmal die Spalte B mit den Datumswerten genommen und die Schleife läuft über alle Zellen, die eine Zahl bzw ein Datum enthalten (1 für Zahl, 2 für Text, 3 für Zahl oder Text).
somit werden die leeren Zellen am Ende bei Monaten mit weniger als 31 Tagen nicht mehr von der Schleife berücksichtigt.
über das Offset mit 2 Spalten kommst du dann von Spalte B nach Spalte D.




Gruß Daniel
Anzeige
AW: Prüfen, ob Nachbarzelle leer ist mit VBA
15.11.2023 17:58:54
Peer
Hallo Daniel.

Vielen Dank für deinen Lösungsvorschlag und eine andere Variante, als die von onur.
Wie soll es deiner Meinung im Code aussehen?

Gruß Peer
AW: Prüfen, ob Nachbarzelle leer ist mit VBA
15.11.2023 18:26:51
daniel
du musst nur diese Zeile austauschen.
die Schleife läuft dann über alle Zellen der Spalte D, für die in der Spalte B in der gleichen Zeile ein Datum oder eine Zahl steht.
damit ist die Prüfung, ob in Spalte B ein Wert steht, nicht mehr notwendig.
Gruß Daniel
AW: Prüfen, ob Nachbarzelle leer ist mit VBA
15.11.2023 18:54:31
Peer
Danke, Daniel.

Ebenfalls interessant deine Variante.
Hier deine Lösung...
' Abfrage, das alle Zellen in Spalte D (Verwendung) ausgefüllt sind

Dim c As Variant

ActiveSheet.Unprotect Password:=""
For Each c In ActiveSheet.Range("B12:B42").SpecialCells(xlCellTypeConstants, 1).Offset(0, 2)
If c = "" Then MsgBox "Mindestens ein Verwendungseintrag fehlt!" _
& vbNewLine & vbNewLine & "Der Audruck wird nur bei vollständig ausgefüllten Monat gestartet." _
, vbInformation + vbOKOnly, "Ein Eintrag fehlt": Exit Sub
Next
ActiveSheet.Protect Password:=""

Funktioniert auch!!!

Gruß Peer
Anzeige
AW: Prüfen, ob Nachbarzelle leer ist mit VBA
15.11.2023 19:28:02
daniel
Hi
wenns dich nur interessiert, ob irgendein Verwendungsnachweis fehlt und du nicht weiter nachforschen willst, wieviele und welche, dann geht das auch einfacher mit Zählen.

If Worksheetfunction.CountIf(Range("B12:B42"), ">", Range("D12:D42"), "=") > 0 Then

Msgbox "....."
End if


dieses ZählenWenn zählt, in wievielen Zeilen in Spalte B ein Wert steht und gleichzeitig in Spalte D die Zelle leer ist.

Schleifen sind lästig, wenn man den Code im Einzelstepmodus testen muss.

Gruß Daniel
AW: Prüfen, ob Nachbarzelle leer ist mit VBA
15.11.2023 17:40:13
onur
If c = "" and c.offset(0,-2)>"" then ....
Anzeige
AW: Prüfen, ob Nachbarzelle leer ist mit VBA
15.11.2023 17:56:52
Peer
Danke, onur.
Eigentlich einfach... ;-)

Damit es am Ende auch das richtige Ergebnis muss es nur
' Abfrage, das alle Zellen in Spalte D (Verwendung) ausgefüllt sind

For Each c In ActiveSheet.Range("B12:B42") '.SpecialCells(xlcelltypecontants, 1)
If c > "" And c.Offset(0, 2) = "" Then MsgBox "Mindestens ein Verwendungseintrag fehlt!" _
& vbNewLine & vbNewLine & "Der Audruck wird nur bei vollständig ausgefüllten Monat gestartet." _
, vbInformation + vbOKOnly, "Ein Eintrag fehlt": Exit Sub
Next

heissen.

Gruß Peer
Anzeige
Gerne !
15.11.2023 17:59:38
onur

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige