Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1352to1356
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

Check Routine vor Druck

Check Routine vor Druck
01.04.2014 15:42:44
Bernd
Hallo liebe Excelianer!
Lange ist es her, aber nun benötige ich wieder mal Eure
professionelle VBA Hilfe.
Habe mit dem Makrorekorder folgendes aufgezeichnet:
Sub Drucken()
' Drucken Makro
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
Range("AW7").Select
End Sub
Ich hätte nun aber gerne, dass bevor gedruckt wird, so eine Art Checkroutine über
ein von mir erstelltest Formular läuft, ob alle notwendigen Felder ausgefüllt worden
sind.
Das heisst, sollte auf eines vergessen werden, so sollte vor einem Ausdruck eine
Fehlermeldung kommen, dass auf das Feld vergessen wurde und dieses zwingend augefüllt
werden muss, um zu drucken.
Meine Felder wären:
Feld BK3 muss grösser als 0 sein (dann ist es OK)sonst "Halt, zuerst ausfüllen von Feld A"
Entweder muss BD7 oder BD9 mit einem X versehen sein sonst "Halt, zuerst ausfüllen von Feld B"
Entweder muss B30 oder M30 mit einem X versehen sein sonst "Halt, zuerst ausfüllen von Feld C"
Entweder muss B37 oder B39 oder B41 mit einem X versehen sein sonst "Halt, zuerst ausfüllen von Feld D"
Sollte es nur zu einem fehlenden X kommen bzw. der Wert von Feld A kleiner oder gleich ist, dann seine Fehlermeldung erscheinen. Die Reihenfolge der Prüfung sollte auch so wie oben angeführt (A,B,C,D)statt finden.
Ich hoffe ich habe mich Verständlich ausgedrückt und warte sehnlich wieder auf Eure
Super Hilfe.
Leider kann ich Heute nicht mehr hier rein sehen um es zu Probieren und auch ein Feedback zu geben, werde dies aber morgen nachholen.
Dann Danke ich all jenen die mir Helfen, und wünsche noch einen schönen Dienstag,
lg Bernd

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Check Routine vor Druck
03.04.2014 04:32:33
Bernd
Guten Morgen liebe Leute!
Da es nun mitlerweile 2 Tage her sind, dass ich Euch um Hilfe gebten habe, aber bis dato keine
Antwort kam, stelle ich mir die Frage, ob mein Anliegen auch zu lösen ist?
Sollte dies nicht realisierbar sein, so bin ich keinem böse, bitte aber nur darum, mir dies
auch mitzuteilen, damit ich nicht umsonst warte.
Dan Danke erstmal und liebe Grüße,
Bernd

AW: Check Routine vor Druck
04.04.2014 12:11:56
fcs
Hallo Bernd,
eine entsprechende Prüfung vor dem Drucken ist kein Problem.
Am besten baust du sie in das Workbook_BeforePrint-Ereignismakro ein. Dort kann man auch ggf. den Druck/die Seitenvorschau abbrechen.
Alternativ kannst du dein Drucken-Makro entsprechend ausbauen.
Gruß
Franz
'Code im VBA-Editor unter DieseArbeitsmappe der Datei
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim strMsgText As String, bolDrucken As Boolean
If ActiveSheet.Name = "Eingabe" Then 'Name des zu druckenden Blatts
bolDrucken = True
'Eingaben in Zellen prüfen
With Me.Worksheets("Eingabe") 'Name des Eingabeformulars
If Not .Range("BK3") > 0 Then
bolDrucken = False
strMsgText = "Halt, zuerst ausfüllen von Feld A"
ElseIf Not (UCase(.Range("BD7")) = "X" Or UCase(.Range("BD9")) = "X") Then
bolDrucken = False
strMsgText = "Halt, zuerst ausfüllen von Feld B"
ElseIf Not (UCase(.Range("B30")) = "X" Or UCase(.Range("M30")) = "X") Then
bolDrucken = False
strMsgText = "Halt, zuerst ausfüllen von Feld C"
ElseIf Not (UCase(.Range("B37")) = "X" Or UCase(.Range("B39")) = "X") Then
bolDrucken = False
strMsgText = "Halt, zuerst ausfüllen von Feld D"
End If
If bolDrucken = False Then
Cancel = True
MsgBox strMsgText, vbOKOnly, "Prüfung der Eingaben vor dem Drucken"
End If
End With
End If
End Sub
Sub Drucken()
' Drucken Makro
Dim strMsgText As String, bolDrucken As Boolean
bolDrucken = True
'Eingaben in Zellen prüfen
With Me.Worksheets("Eingabe") 'Name des Eingabeformulars
If Not .Range("BK3") > 0 Then
bolDrucken = False
strMsgText = "Halt, zuerst ausfüllen von Feld A"
ElseIf Not (UCase(.Range("BD7")) = "X" Or UCase(.Range("BD9")) = "X") Then
bolDrucken = False
strMsgText = "Halt, zuerst ausfüllen von Feld B"
ElseIf Not (UCase(.Range("B30")) = "X" Or UCase(.Range("M30")) = "X") Then
bolDrucken = False
strMsgText = "Halt, zuerst ausfüllen von Feld C"
ElseIf Not (UCase(.Range("B37")) = "X" Or UCase(.Range("B39")) = "X") Then
bolDrucken = False
strMsgText = "Halt, zuerst ausfüllen von Feld D"
End If
If bolDrucken = False Then
MsgBox strMsgText, vbOKOnly, "Prüfung der Eingaben vor dem Drucken"
Else
With ActiveWorkbook.Sheets("TabelleABC") 'zu druckendes Blatt
.Activate
.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
.Range("AW7").Select
End With
End If
End With
End Sub

Anzeige
AW: Check Routine vor Druck
05.04.2014 05:24:56
Bernd
Hallo Franz!
Recht herzlichen Dank für Deine Bemühungen.
Habe beide VBA Codes, soweit ich mächtig war, probiert und stellte folgendes fest:
In meinem Excelfile werden immer extra Formulare erstellt, die Blattnamen lauten also unterschiedlich, beginnen tun sie mit 001 und gehen bis zur Nummer 500.
Wenn ich es richtig deute, sind die Codes für immer nur ein Blatt ausgerichtet. Der Code "Private Sub Workbook_BeforePrint(Cancel As Boolean)...." funktioniert zwar, aber eben nur wenn ich das Tabellenblatt immer umbenenne.
Beim Makrocode kommt es zu einer Fehlermeldung:
'Eingaben in Zellen prüfen
With Me.Worksheets("Eingabe")
Im Fenster erscheint: Unzulässige Verwendung des Schlüsselwortes Me
Das heisst ich würde weiter um Deine Hilfe bitten mit folgenden Anliegen:
Die VBA Codes müssten so umgeschrieben sein, das der Name vom Tabellenblatt egal ist bzw. zwischen 001-500 liegt.
Da ich ja ein Makro habe sollte es dort aber auch über die normale Druckfunktion (über Datei...) funktionieren. Also so wie Dein Vorschlag war. Hoffe nur, dass es mit beiden auch funzt?
Dann Sorry das ich nicht von vorneherein klar sagte, dass es unterschiedliche Tabellennamen sind.
Thx und ein schönes Wochenende wünscht
Bernd

Anzeige
AW: Check Routine vor Druck
05.04.2014 10:21:21
fcs
Hallo Bernd,
das "Me" war ein Flüchtigkeitsfehler von mir und muss in der Druckenprozedur jeweils durch ActiveWorkbook ersetzt werden.
Ich hab das Ganze jetzt mal so umgestellt, dass alle Blätter, die im Namen mit 001 bis 500 beginnen vor dem Drucken geprüft werden.
Die Prüfung erfolgt sowohl im speziellen Drucken-Makro als auch wenn das Drucken über die verschiedenen Druckersymbole oder die Seitenvorschau gestartet wird.
Gruß
Franz
Beispieldatei:

Die Datei https://www.herber.de/bbs/user/90000.xlsm wurde aus Datenschutzgründen gelöscht


Anzeige
@ Franz --> Danke
06.04.2014 04:21:27
Bernd
Hallo und guten Morgen Franz!
Genau so hatte ich es mir Vorgestellt. Werde es nun verarbeiten und wünsche
Dir einen schönen, warmen und vor allem, ruhigen Sonntag.
lg Bernd

Problem aufgetaucht!
06.04.2014 06:15:05
Bernd
Hallo und guten Morgen Franz und Excelianer!
Habe nun alles nach meinem Wissen getestet und festgestellt, dass nicht alles klappt bei mir und
bitte Dich / Euch nochmals um kurze Hilfe.
Um es leichter zu verstehen habe ich eine Besipieldatei bereit gestellt. Das Blatt "Leer" ist geschützt, habe aber kein Passwort vergeben.
https://www.herber.de/bbs/user/90006.xlsm
Folgende Probleme habe ich noch:
Bei der Prüfung des steuerlichen Tatbestandes ist der VBA Code nur für die Zellen B37 und B39. Es fehlt B41. Dass heißt, ein "X" muss in einem der drei Zellen stehen, sonst eben Fehlermeldung. Wie muss der VBA Code dementsprechend erweiter werden?
Aus irgendeinem Grund funktioniert die Checkroutine nicht wenn man ins normale Menü zum Drucken geht, nur über die Schaltfläche geht es. In der Datei vom Franz geht sie, wo ist der Fehler?
Wenn man nun ein neues Blatt anlegt, bläht sich Excel Wahnsinnig auf, ist das normal?
Habe selbst versucht die Probleme zu lösen, aber mein Wissen reicht leider nicht aus. Habe zu Voreilig meinen Thread beendet da ja in der Datei vom Franz alles Super klappt, aber eben nur, bis ich es in meine Datei einfügte, da hats angefangen.
Hoffe es wird sich jemand meiner Sache annehmen, wünsche einen schönen Sonntag,
lg Bernd

Anzeige
AW: Noch ein Problem aufgetaucht!
06.04.2014 06:19:14
Bernd
Sorry, hab drauf vergessen:
Wenn ich z.B.: einem Dienstauftrag die Nummer 1 vergebe, danach einen neuen anlege und ebenfalls die 1 vergebe, kommt immer "debuggen...".
Wäre es möglich das hiebei ein Fenster kommt mit dem Hinweis: Dienstreisenummer bereits vergeben wähle eine neu aus.
Thx nochmals, Ciao

AW: Noch ein Problem aufgetaucht!
06.04.2014 06:19:18
Bernd
Sorry, hab drauf vergessen:
Wenn ich z.B.: einem Dienstauftrag die Nummer 1 vergebe, danach einen neuen anlege und ebenfalls die 1 vergebe, kommt immer "debuggen...".
Wäre es möglich das hiebei ein Fenster kommt mit dem Hinweis: Dienstreisenummer bereits vergeben wähle eine neu aus.
Thx nochmals, Ciao

Anzeige
AW: Noch ein Problem aufgetaucht!
06.04.2014 15:39:34
fcs
Hallo Bernd,
ich hab die Makros deiner Datei angepasst, um deine Probleme zu beseitigen/reduzieren:
Im Modul1:
- beim Anlegen eines neuen Auftrags wird automatisch die höchste vergebene Blatt-Nummer + 1 als Dienstauftragsnummer vergeben.
- Ist eine Function angelegt, mit der geprüft wird, ob eine Auftragsnummer schon angelegt ist.
Diese Function wird genutzt, wenn der Wert in Zelle CT5 geändert wird.
Im Modul 3 und 5:
Die unnötigen Select/Selection-Anweisungen beseitigt. Hatte aber nichts mit deinen Problmen zu tun.
Unter DieseArbeitsmappe:
Workbook_SheetChange-Makro hab ich komplett umgestrickt.
- Dienstauftragsnummer 0 ist nicht mehr zulässig
- Bei nicht zulässiger Eingabe wird die Nummer des Blattes wieder eingetragen.
BeforePrint-Makro hab ich angepasst, so dass das Blatt "Leer" nicht mehr gedruckt wird.
Modul_Drucken:
Meldungstext für Blatt "Leer" (Case Else) geändert
Prüfung Or UCase(.Range("B41")) = "X" ergänzt
Wenn man nun ein neues Blatt anlegt, bläht sich Excel Wahnsinnig auf, ist das normal?
Was bedeutet "wahnsinnig"? Bei mir sind es 40 bis 50 kByte pro Tabellenblatt, um die sich die Datei vergrößert. Das ist eigentlich normal, insbesondere in deinem Fall da du in relativ wenigen Zellen eine Vielzahl an Formatierungen verbaut hast, was extrem auf den Speicherbedarf durchschlägt.
Von der Dateigröße kommst du nur weg, wenn du die Einabedaten als Liste/Datenbank in einem Tabellenblatt erfasst (1 Zeile je Dienstauftrag) und ein zweites Tabellenblatt (ähnlich wie jetzt Blatt "Leer") für die Eingabe und den Ausdruck nutzt.
Gruß
Franz
https://www.herber.de/bbs/user/90015.xlsm

Anzeige
@ Franz
07.04.2014 04:47:22
Bernd
Hallo Franz!
Ich Danke Dir dass Du Dich meiner angenommen hast und einen Teil Deiner Sonntagsstunden
mit meinem Problem beschäftigste, ist ja nicht Selbstverständlich in heutiger Zeit.
Auf alle Fälle, habe ich es mir kurz angesehen,und es scheint so, dass alles so ist bzw. funktioniert so wie ich es mir Vorgestellt habe (bis auf zwei kleine Schönheitsfehler mit denen ich aber Leben kann).
Zum einen wird für jedes Monat ein eigenes Excelfile angelegt, somit muss man die Dienstauftragsnummer beim ersten Blatt manuell wählen obwohl ich Deine Lösung mit der +1 Vergabe einfach Weltklasse finde.
Zum anderen, wenn ein neuer Dienstauftrag angelegt wurde und man diesen über das Menü vom Excel ausdrucken möchte, wird keine Checkroutine ausgeführt.
Wie gesagt, beides sind Kleinigkeiten welche man auch nicht ändern muss.
Werde mir heute alles zurecht richten damit mit 01.05. die Datei so starten kann, wie ich es mir Vorstelle.
Dann wünsche ich Dir alles gute und Bedanke mich nochmals für die ausgzeichnet professionelle Hilfe.
lg Bernd

Anzeige
@ Franz
07.04.2014 04:47:28
Bernd
Hallo Franz!
Ich Danke Dir dass Du Dich meiner angenommen hast und einen Teil Deiner Sonntagsstunden
mit meinem Problem beschäftigste, ist ja nicht Selbstverständlich in heutiger Zeit.
Auf alle Fälle, habe ich es mir kurz angesehen,und es scheint so, dass alles so ist bzw. funktioniert so wie ich es mir Vorgestellt habe (bis auf zwei kleine Schönheitsfehler mit denen ich aber Leben kann).
Zum einen wird für jedes Monat ein eigenes Excelfile angelegt, somit muss man die Dienstauftragsnummer beim ersten Blatt manuell wählen obwohl ich Deine Lösung mit der +1 Vergabe einfach Weltklasse finde.
Zum anderen, wenn ein neuer Dienstauftrag angelegt wurde und man diesen über das Menü vom Excel ausdrucken möchte, wird keine Checkroutine ausgeführt.
Wie gesagt, beides sind Kleinigkeiten welche man auch nicht ändern muss.
Werde mir heute alles zurecht richten damit mit 01.05. die Datei so starten kann, wie ich es mir Vorstelle.
Dann wünsche ich Dir alles gute und Bedanke mich nochmals für die ausgzeichnet professionelle Hilfe.
lg Bernd

Anzeige
AW: @ Franz
07.04.2014 07:57:33
fcs
Hallo Bernd,
Zum einen wird für jedes Monat ein eigenes Excelfile angelegt, somit muss man die Dienstauftragsnummer beim ersten Blatt manuell wählen obwohl ich Deine Lösung mit der +1 Vergabe einfach Weltklasse finde.Theoretisch könnte man natürlich die letzte Nummer in der Datei des Vormonats ermitteln und dann weiterzählen statt die Blattnummer nach dem Anlegen des 1. Blattes manuell zu korrigieren.
Zum anderen, wenn ein neuer Dienstauftrag angelegt wurde und man diesen über das Menü vom Excel ausdrucken möchte, wird keine Checkroutine ausgeführt.
Das hat bei mir beim Testen funktioniert!
Gruß
Franz
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige