Im Pflicht-Bereich muss mindestens in einer Zelle was drin stehen...

Skayritares

Lt. Junior Grade
Registriert
Juli 2006
Beiträge
280
Hallo zusammen,

Nehmen wir mal folgendes Szenario an:

In einer Excel-Tabelle im Bereich von C2 bis C8 sollte mindestens was drin stehen, ansonsten kann nicht gedruckt werden, sondern es kommt eine Meldung.

Wie man ein Pflichtfeld über VBA definiert, das weiß ich, das gilt auch für die Fehlermeldung.
Hier ein Beispiel:
Code:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
If ActiveSheet.Range("C2").Value = "" _
Or ActiveSheet.Range("C3").Value = "" _
Or ActiveSheet.Range("C4").Value = "" _
Or ActiveSheet.Range("C5").Value = "" _
Or ActiveSheet.Range("C6").Value = "" _
Or ActiveSheet.Range("C7").Value = "" _
Or ActiveSheet.Range("C8").Value = ""  Then

  MsgBox "      Sie haben eine Eingabe vergessen:" _
  & vbCr & "" _
  & vbCr & "           Bitte alle Felder ausfüllen, sonst kann nicht gedruckt werden!" _
  & vbCr & "" _
  & vbCr & "",48

Cancel = True
End If
End Sub
Im diesem Beispiel müssen jedoch in alle Zellen von C2 bis C8 einen Wert (egal Buchstaben oder Zahlen) drin stehen. Aber wie mache es, das vom Excel geprüft werden soll, das mindestens in einer Zelle von C2 bis C8 ein was drin stehen muss, bevor man drucken kann?

Danke im voraus.
 
Alle Excel-Funktionen kann man auch in VBA nutzen (mit englischer Bezeichnung).
Was du suchst ist Anzahl2:Tabelle1.Application.WorksheetFunction.CountA(Range("J1:J20"))
Zählen nicht leerer Zellen in einem Bereich.
 
Sorry es klappt nicht und ich habe mich irgendwie falsch ausgedrückt.

Wenn in einer Zelle im Bereich von C2 bis C8 nichts drin steht, dann soll das Drucken unterbunden werden und eine Meldung kommen.

Code:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
If ActiveSheet.Application.WorksheetFunction.CountA(Range("C2:C8")) Then

  MsgBox "      Sie haben eine Eingabe vergessen:" _
  & vbCr & "" _
  & vbCr & "           Bitte mindestens in einer Zelle im Bereich von C2 bis C8 einen Wert eingeben!" _
  & vbCr & "" _
  & vbCr & "", 48

Cancel = True
End If
End Sub
 
Zuletzt bearbeitet:
Mal schauen, ob ich Dich richtig verstanden habe:
Zähle die Zellen in dem Bereich der nicht leer sein darf und Vergleiche den Wert mit einer Zählung der nicht leeren Zellen. Das funktioniert mit den Worksheet Formeln oder als Schleife über jede Zelle. Für die Schleife einfach eine separate Variable deklarieren, deren Wert dich ändert, wenn eine gefüllte Zeile gefunden wurde. Am Ende die Variable auslesen und Du hast Dein Ergebnis.
 
Um dein Code mal in natuerliche Sprache zu uebersetzen:
"Wenn im Bereich C2 bis C8 etwas steht, gebe Meldung X aus und breche ab."

Und genau das macht dein Code auch.
 
Scientist schrieb:
"Wenn im Bereich C2 bis C8 etwas steht, gebe Meldung X aus und breche ab."

Und genau das macht dein Code auch.
Gut aber es sollte es so machen:
"Wenn im Bereich C2 bis C8 nichts steht, gebe Meldung X aus und breche ab.
 
Dann ersetzen doch einfach deine OR alle durch AND.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Skayritares und Janush
Nanü?!?
Wir fragen doch in der ersten (offenbar missverstnadenen) Antwort (wie ich es auch missverstand) die Anzahl leerer Zellen ab. Da ich die (räumliche) Größe des Ranges kenne - C2 bis C8- muss sie für den Range bei genau Null liegen. Ist sie größer-als-Null wird der Druck gestoppt.
CN8
 
CountA zählt alle nicht leeren Zellen.
Entsprechend liefert CountA im Bereich C2 bis C8, wenn keine Eingaben getätigt wurden, eine null.

Weshalb die Abbruch-Funktion in Post #3 nicht ausgefuehrt wird.
 
Ich möchte euch noch die Rückmeldung geben, das es geklappt hat. Danke an euch allen!
 
Zurück
Oben