folgendes Problem: Ich habe eine Tabelle mit insgesamt 27 Reitern.
Die Reiter 1 bis 3 benötige ich je einmal ausgedruckt. Die Reiter 4 bis 7 benötige ich nur in ausgedruckter Form, wenn entweder im Bereich D3:D19 oder im Bereich A23:D44 oder im Bereich A122:C143 auf dem jeweiligen Reiter etwas geschrieben steht. Die Reiter 8 bis 27 sollen ausgedruckt werden, wenn im Bereich A23:D44 oder im Bereich A122:C143 auf dem jeweiligen Reiter etwas geschrieben steht.
Ich würde dies gerne über ein Makro lösen, welches mir auf Knopfdruck alle entsprechenden Reiter auf einmal ausdruckt.
Darüber hinaus befindet sich in einem anderen Bereich ein Wasserzeichen. Dadurch, dass in manche Zellen sehr viele Zeichen stehen und Textumbruch aktiviert ist, wird dieses Wasserzeichen mitunter sehr klein. Gibt es eine Möglichkeit die Größe des Wasserzeichens an die Größe eines Bereichs zu koppeln?
Zu guter Letzt: Gibt es eine Möglichkeit Reiternamen sowie das hinzufügen neuer Reiter für Benutzer zu sperren?
Vielen Dank im Voraus für jeden Lösungsvorschlag bzw. Tipp.
... zum Einstieg biete ich Dir mal so etwas an. Mir ist klar, daß das erst mal nur eine Teillösung Deiner Wünsche darstellt. Schließlich wurde die Datei ja auch nicht für Dich gemacht :19: Aber schau'n wir mal, dann seh'n wir schon.
zunächst vielen Dank. Das sieht grundsätzlich ganz gut aus. Finde die Idee vorher anzeigen zu lassen welche Seiten erkannt wurden ziemlich gut. Leider kann ich an dem Bild keinen VBA Code ersehen. Falls du mir da was zur Verfügung stellen kannst würde ich mal schauen ob ich es ggf. auf meine Bedürfnisse abändern kann.
Puh, da hab ich mir ja schön was eingebrockt, hätte vielleicht erwähnen sollen, dass ich mit meinen VBA Kenntnissen noch ganz am Anfang stehe und durch deine Makros so gar nicht durchsteige. :69: Aktuell sieht es bei mir so aus:
Code:
Sub Drucken()
With ActiveSheet.PageSetup .Orientation = xlPortrait .FitToPagesWide = 1 .Zoom = False .PrintArea = "$A$1:$D$51" End With
ActiveWindow.SelectedSheets.PrintOut Copies:=2
With ActiveSheet.PageSetup .Orientation = xlPortrait .FitToPagesWide = 1 .Zoom = False .PrintArea = "$A$100:$D$151" End With
ActiveWindow.SelectedSheets.PrintOut Copies:=1
End Sub
damit hab ich zumindest schonmal meine Druckbereiche definiert, wenn auch nur auf dem jeweils aktiven Reiter. Wie inkludiere ich da jetzt am besten die Prüfung der Bereiche und drucke nicht, wenn dort nichts steht? Sorry aber bin VBA technisch wirklich noch nicht gut aufgestellt.
For lngC = 1 To 27 With Worksheets(lngC) Select Case lngC Case 1 To 3 .PrintOut Case 4 To 7 If WorksheetFunction.CountA(.Range("D3:D19"), .Range("A23:D44"), .Range("A122:C143")) Then .PrintOut Case Else If WorksheetFunction.CountA(.Range("A23:D44"), .Range("A122:C143")) Then .PrintOut End Select End With Next lngC
End Sub
Gruß Stefan Win 10 / Office 2016
Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:1 Nutzer sagt Danke an Steffl für diesen Beitrag 28 • Stoffo
wenn Du willst, daß ich Dir helfe, dann zeige Deine Datei. Ohne Datei und genauen Infos darüber, was jeweils passieren soll, kann zumindest ich Dir nicht helfen.
Übrigens: Ich hatte Dich ja in den obigen Post's schon vorgewarnt, daß die von mir gelieferte Datei nicht auf Deine Wünsche zugeschnitten und der Umbau entsprechend nötig ist. Da Du aber der Meinung warst, es selbst versuchen zu wollen ... Nun, Versuch macht kluch :19:
24.07.2019, 22:01 (Dieser Beitrag wurde zuletzt bearbeitet: 24.07.2019, 22:01 von Stoffo.)
Hallo Stefan, Hallo Peter,
erstmal vielen Dank für die bisherige Unterstützung. Habe mir Stefans Code mal vorgenommen und ein bisschen probiert meine Einstellungen einzubetten.
Code:
Sub prcDrucken() Dim lngC As Long
For lngC = 1 To 28 With Worksheets(lngC) Select Case lngC Case 2 To 4 .Orientation = xlPortrait .FitToPagesWide = 1 .Zoom = False .PrintArea = "$A$1:$E$43" .PrintOut Copies:=1 Case 5 To 8 If WorksheetFunction.CountA(.Range("D3:D19"), .Range("A23:D44")) Then .Orientation = xlPortrait .FitToPagesWide = 1 .Zoom = False .PrintArea = "$A$1:$D$51" .PrintOut Copies:=2 .PrintArea = "$A$100:$D$151" .PrintOut Copies:=1 Case 9 To 28 If WorksheetFunction.CountA(.Range("A23:D44")) Then .Orientation = xlPortrait .FitToPagesWide = 1 .Zoom = False .PrintArea = "$A$1:$D$51" .PrintOut Copies:=2 .PrintArea = "$A$100:$D$151" .PrintOut Copies:=1 End Select End With Next lngC
End Sub
das ist das Ergebnis bisher, leider funktioniert es so noch nicht da meine unterschiedlichen Druckbereiche nicht akzeptiert werden. Ich habe mal exemplarisch eine Datei angefügt, was ich drucken will und was nicht, habe jetzt nicht alle tabellenreiter eingefügt, da 5-8 bzw. 9-28 jeweils identisch sind. Bei den Druckeinstellungen ist mir Hochformat, sowie alle Spalten auf einer Seite wichtig. Hoffe es wird so klarer. Wie gesagt, vielen Dank für eure Unterstützung.
25.07.2019, 01:18 (Dieser Beitrag wurde zuletzt bearbeitet: 25.07.2019, 01:19 von Käpt'n Blaubär.)
Hallo,
einmal mehr ...
Du hast uns in Deinem Post eine *.xlsx-Datei gezeigt.
Man kann keine Makros in einer *.xlsx-Datei nutzen. Diese Datei kennt keine Makros!!!! und weil sie damit nicht umgehen kann, schickt sie diese Fremdkörper umgehend und ohne Warnung in den Excel-Himmel.
Eine Datei mit Makros muß zwingend als *.xlsb-Datei oder als *.xlsm-Datei gespeichert werden. Sonst wird das bis zum "Jüngsten Tag" nichts.
Hallo Peter, guten Morgen. Mein Fehler, habe die Beispielmappe im falschen Format hochgeladen, meine originaldatei ist natürlich eine Mappe mit Makros. Die hochgeladene soll lediglich zur Erklärung dienen.