Clever-Excel-Forum

Normale Version: VBA - Pflichtfeld Abfrage vorm Drucken
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Nabend,

nachdem ich durch Euch mein erstes Problem lösen konnte kommt nun meine nächste und wahrscheinlich auch erstmal letzte Baustelle.

Ich habe mir nun schon so einige Threads angeschaut und Versucht die dort vorhandenen Codes in meine Tabelle zu übernehmen,
leider ohne Erfolg (Nutze übrigens Excel 2007). Und da ich in den letzten Tagen mal irgendwo gelesen haben das verbundene Zellen
nicht die größte Erfindung sein soll wollte ich nun mal Nachfragen wie sich dies auf VBA Codes auswirkt?

Ich habe nämlich 5 Zeilen (Name, Adresse usw.) die jeweils mit 6 oder 7 Spalten verbunden sind. Da diese Zeilen per Active-X DropDown
gefüllt werden würde es, denke ich zumindest, ausreichen wenn nur die erste Zeile (also der Name) auf Inhalt vor dem Druck geprüft wird.

Ist das Möglich? oder kann man einen Bereich für die Prüfung angeben? ... Also z.b.: A5F5

Und was ich auch noch nicht ganz verstehe ist wohin bzw. in welche Mappe der Code muss?
Bei mehreren Tabellen dann nur auf die wo die Prüfung stattfindet? oder auf die gesamte Mappe also Globe für alle Tabellen?

Wäre schön wenn mir da jemand weiterhelfen könnte...
Eventuell sogar mit nem Grundgerüst vom Code für eine Zellen abfrage o. für einen Bereich.


Vg
Hallöchen,

ob sich verbundene zellen auswirken oder nicht muss man von Fall zu Fall prüfen.

Eine Abfrage vor dem Drucken könnt man im Codemodul von DieseArbeitsmappe unterbringen:

Code:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
'Gibt den Inhalt von A1 des aktiven Blattes aus
'Bringt Fehler, wenn es sich z.B. um ein Diagrammblatt handelt
MsgBox Range("A1").Value
End Sub
Hallo,

Zitat:Und da ich in den letzten Tagen mal irgendwo gelesen haben das verbundene Zellen
nicht die größte Erfindung sein soll wollte ich nun mal Nachfragen wie sich dies auf VBA Codes auswirkt?

ich will mich mal so ausdrücken:
Einen Anfänger können "Verbundene Zellen" in den Wahnsinn treiben und ist man kein Anfänger, so braucht man diesen Kram nicht.
Da der für den Einsatz von "Verbundenen Zellen"  ständig angegebene Grund das optische Aussehen ist, so etwas läßt sich auch anders lösen.

Im Übrigen ist meine private Meinung die, daß man den "Erfinder der Verbundenen Zellen" mit dem Rasenmäher rasieren sollte. Und das
nötigenfalls drei Mal täglich.
Ich sehe das etwas differenzierter.
Verbundene Zellen haben in Datenlisten nichts zu suchen.
Schließlich kann man nicht sortieren, filtern, …

In Eingabe- oder Ausgabeformularen (also Tabellenblättern, die optisch aufgehübscht sind) ist imo nichts dagegen einzuwenden.
Man muss halt nur wissen, dass ein Zellenverbund immer über die TopLeftCell angesprochen wird.

So etwas ist mir persönlich erheblich lieber, als wenn ein VBA-Beginner "krampfhaft" versucht, ein UserForm zum Laufen zu bringen.

Gruß Ralf
Hallo Ralf,

das ist ok.
Aber irgendwann schreibt jeder mal sein erstes Userform. Habe ich auch mal gemacht.
Man muß dann nur wissen, daß man  dafür großzügig Zeit einplanen sollte.
Hab hier noch mal ein wenig Gesucht und folgendes gefunden was ich letztendlich auch zum Laufen bekommen habe.


Code:
Private Sub Workbook_BeforePrint(Cancel As Boolean)

boVar = False

'Prüfen ob alle notwendigen Felder ausgefüllt sind, erst wenn diese ausgefüllt sind wird die Datei zum Drucken/Speichern freigegeben
'-----------------------------------------------------------------------------------------------------------------------------------

If ActiveSheet.Range("B3").Value = "" Then
 MsgBox "                   Das Formular wurde nicht vollständig ausgefüllt.:" _
 & vbCr & "" _
 & vbCr & " Es müssen alle DropDown Felder sowie die folgenden Nr. ausgefüllt sein " _
 & vbCr & "" _
 & vbCr & "                                              1, 2, 3, 16, 22, 23" _
 & vbCr & "" _
 & vbCr & "                              Überprüfen Sie bitte deine Eingaben" _
 & vbCr & "" _
 & vbCr & "              Ansonsten kann nicht gedruckt / gespeichert werden." _
 & vbCr & "" _
 & vbCr & "" _
 & vbCr & "" _
 & vbCr & "" _
 & vbCr & "  Gruß..", 54
 Cancel = True
 Exit Sub
End If
End Sub

Wie gesagt, es klappt. Ist B3 leer kommt die Meldung.
Ist B3 mit Text gefüllt gehts zum Druckmenü.

Kann mir jeman sagen wie ich es nun hinbekomme das mehrere Abfragen eingebaut werden?


Code:
If ActiveSheet.Range("B3").Value = "" Or ActiveSheet.Range("B10").Value = "" Then

Klappt leider nicht Sad
Nabend,

mittlerweile habe ich es wie folgt hinbekommen:


Code:
Private Sub Workbook_BeforePrint(Cancel As Boolean)

'Prüfen ob alle notwendigen Felder ausgefüllt sind, erst wenn diese ausgefüllt sind wird die Datei zum Drucken/Speichern freigegeben
'-----------------------------------------------------------------------------------------------------------------------------------
If ActiveSheet.Range("B3").Value = "" Or ActiveSheet.Range("F8").Value = "" _
Or ActiveSheet.Range("L10").Value = "" Then
 MsgBox "                   Das Formular wurde nicht vollständig ausgefüllt.:" _
 & vbCr & "" _
 & vbCr & "                    Es müssen alle DropDown Felder ausgefüllt sein " _
 & vbCr & "" _
 & vbCr & "                             Überprüfe Formular Feld_Nr. 1, 2, 3, 16, 22, 23" _
 & vbCr & "" _
 & vbCr & "                                      auf den richtigen Inhalt " _
 & vbCr & "" _
 & vbCr & "" _
 & vbCr & "                 Ansonsten kann der Frachtbrief nicht gedruckt werden." _
 & vbCr & "" _
 & vbCr & "" _
 & vbCr & "" _
 & vbCr & "" _
 & vbCr & "  Gruß ", 54
 Cancel = True
 Exit Sub
End If


Ist der Code vom Aufbau her okay?
Oder könnte man ihn noch optimieren?

Die andere Sache ist die das ich den Code gerne mit der Möglichkeit erweitern möchte,
dass alle vorhandenen Activx Comboboxen vorm schließen der Excel Datei resettet werden.

Wie setze ich das am Besten um?
Und wie genau baue ich den neue Code in den alten ein?

Habe z.b diesen Code hier gefunden:

Code:
Sub ResetCB()
Dim oComBox As OLEObject

Application.EnableEvents = False

For Each oComBox In ActiveSheet.OLEObjects
   If oComBox.Name Like "ComboBox*" Then
       oComBox.Object.Text = ""
   End If
Next

Application.EnableEvents = True

End Sub


Nur wenn der Funktionier zum resetten der Comboboxen müsste er ja so geändert werden das "befor.close" greift
und in dem anderen mit Eingebaut werden kann.

Wäre schön wenn mir jemanden Sagen kann wie ich ne Combobox vorm Dokument schließen resette und wie der gesamte Code dann aussehen muss.

Danke schon mal an alle.




VG
Hallöchen,

wenn Du das resetten in das before_close einbaust, müsstest Du dabei auch nochmal saven.
Also einfach im BeforeSave
...
Call ResetCB
ActiveWorkbook.Save
...