Microsoft Excel

Herbers Excel/VBA-Archiv

Ständig ändernde Bereiche per druc

Betrifft: Ständig ändernde Bereiche per druc von: Robert
Geschrieben am: 13.08.2020 17:33:38

Hallo Ihr lieben Exeler!

Ich hätte mal wieder ein Problem, wo ich für Eure Hilfe sehr dankbar wäre.
Ich habe ein Makro geschrieben schlicht und Einfach. Es ist jetzt statisch und der jeweilige Druckbereich der einzelnen Arbeitsblätter ist so gestaltet, das die Formulare welche ausgefüllt sind gedruckt, + 2 Leerformulare. Da diese aber jede Woche unterschiedlich sein können, wäre es schön, wenn dieses Makro dynamsich feststellt bis zu welchen Stellen in den einzelnen Arbeitsblättern gedruckt werden müsste (also die die Ausgefüllt sind). Der gesamt Druckbereich geht von A1 bis EO34.
Gibt es eine Möglichkeit, Exel beizubringen dies zu bewerkstelligen.

Sub Drucken()
    Sheets("Liefer Nord").Range("A1:CB34").PrintOut Copies:=1
    Sheets("Liefer Mitte").Range("A1:CG34").PrintOut Copies:=1
    Sheets("Liefer SO").Range("A1:DA34").PrintOut Copies:=1
    Sheets("Liefer L1A").Range("A1:DU34").PrintOut Copies:=1
    Sheets("Liefer L1B").Range("A1:DF34").PrintOut Copies:=1
    Sheets("Liefer L1B").Range("A1:DF34").PrintOut Copies:=1
    Sheets("Liefer L2").Range("A1:CL34").PrintOut Copies:=1
    Sheets("Liefer L3").Range("A1:DU34").PrintOut Copies:=1
    Sheets("Liefer L4").Range("A1:DU34").PrintOut Copies:=1
    Sheets("Liefer L5").Range("A1:CL34").PrintOut Copies:=1
    Sheets("Liefer L6 Nord").Range("A1:CV34").PrintOut Copies:=1
    Sheets("Liefer L6 Süd").Range("A1:DK34").PrintOut Copies:=1
    Sheets("Liefer Selbstabholer").Range("A1:AD34").PrintOut Copies:=1
End Sub

Betrifft: AW: Ständig ändernde Bereiche per druc
von: Werner
Geschrieben am: 13.08.2020 18:02:10

Hallo,

wenn es sich um einen zusammenhängenden Bereich handelt z.B. so:
Sheets("Liefer Nord").Range("A1").CurrentRegion.PrintOut Copies:=1
Gruß Werner

Betrifft: AW: Ständig ändernde Bereiche per druc
von: Robert
Geschrieben am: 13.08.2020 18:25:51

Hallo Werner
Danke für Deine schnelle Antwort. Aber irgendwie bringt der mir jetzt nur den Kopüf und nur das erste Blatt.


Danke für deine Mühe.



LG Robert

Betrifft: AW: Ständig ändernde Bereiche per druc
von: Werner
Geschrieben am: 13.08.2020 18:42:24

Hallo,

ich hatte geschrieben wenn es sich um einen zusammenhängenden Bereich handelt.
Zusammenhängend heißt, dass dazwischen keine komplett leeren Zeilen oder Spalten sind.

Ob das bei dir der Fall ist, weiß ich nicht. Ich kenne deine Datenstruktur nicht.

Das mußt du natürlich für alle Blätter machen.

Oder mit Schleife über alle "Liefer*" Blätter und UsedRange
Public Sub Drucken()
Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets
    If ws.Name Like "Liefer*" Then
        ws.UsedRange.PrintOut Copies:=1
    End If
Next ws
End Sub
Keine Ahnung was du mit + 2 Leerformulare meinst.

Gruß Werner

Betrifft: AW: Ständig ändernde Bereiche per druc
von: Robert
Geschrieben am: 13.08.2020 21:17:37

Hallo Werner!
Dieses Makro haut nun wieder alle Lieferscheine raus. Es sollen aber bloss die sein, welche auch mit Personen hinterlegt sind. Erkennt man daran, wie im Beispiel, das ab AY12 Tageblatt und in AZ12 0 steht. Ab da sollte nicht gedruckt werden. Das ist aber auf allen Arbeitsblättern unterschiedlich.
Es würde auch eventuell reichen wenn ich wüsste wie ich es schreiben muss wenn ich in z.B. in AY1 die Formel =wenn(AZ12=0;AY2:BC34"") (wenn AZ12 0 0 dann schreibe vonAY2 bis BC34 nichts) Wie kann ich das schreiben das es Exel kapiert.

Danke im voraus

LG Robert

Betrifft: AW: Ständig ändernde Bereiche per druc
von: Werner
Geschrieben am: 13.08.2020 21:25:54

Hallo,

Erkennt man daran, wie im Beispiel
und welches Beispiel denn bitte?

Das einzige was ich von dir habe ist ein Code, indem du Tabellebnlätter druckst, die alle mit "Liefer.." im Blattnamen beginnen.

Ich habe keine Ahnung von irgendeinem Tageblatt oder sonst was.

Entweder du lädst hier mal eine Beispieldatei mit Beispieldaten hoch in der du aufzeigst, was, wann, warum gedruckt werden soll, oder ich steig hier aus.

Hellsehen ist leider nicht so mein Ding.

Gruß Werner

Betrifft: AW: Ständig ändernde Bereiche per druc
von: Robert
Geschrieben am: 13.08.2020 21:28:21

https://www.herber.de/bbs/user/139618.xlsx Mappe vergessen anzuhängen Sorry

Betrifft: AW: Ständig ändernde Bereiche per druc
von: Robert
Geschrieben am: 13.08.2020 21:29:52

Wir haben uns überschnitten. Sorry meine Nachlässigkeit.


LG Robert

Betrifft: hast du dir....
von: Werner
Geschrieben am: 13.08.2020 21:46:59

Hallo,

...die hochgeladene Datei eigentlich slebst mal angeschaut?

Gruß Werner

Betrifft: AW: hast du dir....
von: Robert
Geschrieben am: 13.08.2020 22:21:12

Hallo Werner!
Ja ich weiß, es fehlen jegliche Bezüge. Ich dachte das es reicht wenn ab ay1 davon ausgegangen wird, das dort nicht mehr gedruckt werden soll. Oder über eine wenn Funktion und entsprechender Formel wie in ay1 alle Zellen nicht beschrieben werden wenn in aw12 eine 0 steht, was bei nichtbesetzten Lieferscheinen der Fall ist. Müsste ja nur wissen wie man exel anweist wenn die eine Bedingung erfüllt ( 0) ist in einer größeren Zellbereich ("") nichts zu schreiben. Morgen früh mach ich noch in kleinerer Form eine Beispielelmappe, wo die Daten drin stehen.

Sorry noch mal


LG Robert

Betrifft: AW: hast du dir....
von: Robert
Geschrieben am: 14.08.2020 10:04:19

Hallo Werner,
ich habe jetzt eine Beispieldatei fertig gemacht, wo ich hoffe das man erkennt was ich mit Deiner Hilfe gerne tuen möchte. Habe auch einen Erklärung mit darauf geschrieben. Ich hoffe wir kommen so den Dingen näher auf die Spur. Danke für Deine Geduld.



LG Robert

https://www.herber.de/bbs/user/139630.xlsx

Betrifft: AW: hast du dir....
von: Robert
Geschrieben am: 14.08.2020 10:09:11

Schick mal noch den Text von der Beispieldatei. Habe vergessen den Zeilenumbruch reinzuzaubern.

So sehen die Lieferlisten in der Praxis aus. In diesen Falle sollen die Lieferscheine von A1 bis Q34 gedruckt werden. Und danach der Rest sollte nicht gedruckt werden. Ist dies per Makro möglich. Ich dachte men könnte dabei immer V0 oder AA je nach der Gebenheit als Anhaltspunkt nutzen, wo in Tageblatt Stück 0 auftaucht, da ab da kein Zusteller mehr den Lieferschein erhält.

Betrifft: AW: hast du dir....
von: Werner
Geschrieben am: 14.08.2020 13:55:30

Hallo,

meinst du so?
Sub Schaltfläche1_Klicken()
Dim ws As Worksheet, i As Long, loZeile As Long, loSpalte As Long

For Each ws In ThisWorkbook.Worksheets
    If ws.Name Like "Liefer*" Then
        With ws
            loZeile = .Cells(.Rows.Count, "A").End(xlUp).Row
            For i = 2 To .Cells(12, .Columns.Count).End(xlToLeft).Column Step 5
                If .Cells(12, i) = 0 Then
                    loSpalte = i - 2
                    Exit For
                End If
            Next i
            .Range(.Cells(1, "A"), .Cells(loZeile, loSpalte)).PrintPreview
        End With
    End If
Next ws

End Sub
Für den tatsächlichen Ausdruck musst du im Code .PrintPreview durch .PrintOut ersetzen.

Gruß Werner

Betrifft: AW: hast du dir....
von: Robert
Geschrieben am: 14.08.2020 17:15:25

Hallo Werner!
Vielen herzlichen Dank. Genauso sollte es sein. Du bist nicht mit Geld zu bezahlen. Ich dachte mir so, wenn ich ein Beispiel habe, dann könnte ich einen zweiten Sachverhalt selbst entsprechend anpassen. Musste aber feststellen, das doch nicht ganz so einfach ist. Deshalb bereite ich noch mal eine vernünftige Beispielmappe vor, das Du noch einmal darüber schauen würdest. Wäre sehr nett von Dir wenn Du nix dagegen hast.

Für Deine Mühe und Geduld danke ich Dir im voraus.


LG Robert

Betrifft: AW: hast du dir....
von: Robert
Geschrieben am: 14.08.2020 18:26:45

Ich würde jetzt mal die Beispieldatei einstellen. Eigentlich fast das gleiche wie in dem anderen Projekt. Es soll nur gedruckt bis wohin Zahlen über 0 stehen. Da wohl null steht, soll aus dem Druckbereich raus. Ich hoffe Du kannst mir noch mal helfen.
Vielen lieben Dank im voraus.


LG Robert

Betrifft: AW: hast du dir....
von: Robert
Geschrieben am: 14.08.2020 18:31:20

Ich würde jetzt mal die Beispieldatei einstellen. Eigentlich fast das gleiche wie in dem anderen Projekt. Es soll nur gedruckt bis wohin Zahlen über 0 stehen. Da wohl null steht, soll aus dem Druckbereich raus. Ich hoffe Du kannst mir noch mal helfen.
Vielen lieben Dank im voraus.


LG Robert
https://www.herber.de/bbs/user/139643.xlsx

Betrifft: AW: hast du dir....
von: Werner
Geschrieben am: 14.08.2020 19:26:13

Hallo,

du hälst wohl nicht wirklich viel davon Infos mit zu geben?

Sprechen wir hier auch wieder um diverse Blätter, die alle mit "Zentral??" beginnen und die alle gedruckt werden sollen?

Davon bin ich jetzt mal ausgegangen - das darf man aber auch gerne mitteilen. Ständiges Nachfragen macht nicht wirklich Spaß.
Option Explicit

Public Sub Drucken_Zentral()
Dim loZeile As Long, loSpalte As Long, ws As Worksheet

For Each ws In ThisWorkbook.Worksheets
    If ws.Name Like "Zentral*" Then
        With ws
            loZeile = .Cells(.Cells.Rows.Count, "A").End(xlUp).Row + 2
            loSpalte = .Cells(5, .Columns.Count).End(xlToLeft).Column - 1
            .Range(.Cells(1, "A"), .Cells(loZeile, loSpalte)).PrintPreview
        End With
    End If
Next ws
End Sub
Das funktioniert aber nur dann zuverlässig, solange immer in Spalte A ein Name erfasst ist und solange in Zeile 5 die 0 das Tabellenende markiert.

Gruß Werner

Betrifft: AW: hast du dir....
von: Robert
Geschrieben am: 14.08.2020 20:27:25

JHallo Werner
Da hast Du recht. War aber jetzt unterwegs und wollte genau die Info noch nachreichen. Aber Du warst schneller. Es funktioniert genau so wie es sein soll
Vielen lieben Dank.
Ein schönes Wochenende wünsche ich Dir.


LG Robert

Betrifft: Gerne u. Danke für die Rückmeldung. o.w.T.
von: Werner
Geschrieben am: 14.08.2020 21:21:33



Betrifft: AW: Gerne u. Danke für die Rückmeldung. o.w.T.
von: Robert
Geschrieben am: 17.08.2020 16:46:27

Hallo Werner!
Ich wende mich heute noch mal über diesen Kanal an Dich mit einer Bitte. In meiner Arbeitsmappe gibt es jede Woche Packzettel auszudrucken. Es wäre nicht schlecht wenn dies über ein Makro gehen könnte. Es sollen nur die Ausgedruckt werden, wo in E4, L4, in 7er Schritten bis CR4 E20 bis CR20 analogmehr als 0 oder nichts steht.Dadurch das die Namen relativ statisch sind kann die 0 auch mal dazwischen auftauchen (also E4 oder L4 usw.).Ich habe mal ein Beispielmappe gemacht wo ich hoffe das es gut zu ersehen ist. Das Feld CU1 bis FF26 müsste immer ausgedruckt werden. Von diesen Packlisten gibt es insgesamt je Tour 22 Arbeitsblätter. Diese sind alle gleich aufgebaut wie im Bespiel. Ich hoffe, das ich alle Infos erfasst habe. Habe mir zumindest Mühe gegeben.

Für Deine Mühe danke ich im voraus!
Danke noch mal für das Schaltflächenmakro.
LG Robert


https://www.herber.de/bbs/user/139666.xlsx

Betrifft: AW: Gerne u. Danke für die Rückmeldung. o.w.T.
von: Werner
Geschrieben am: 17.08.2020 18:40:41

Hallo,

ist mir noch unklar.

Nur ausdrucken wenn E4 und E20 beide ungleich Leer und beide ungleich 0 sind?

Also bezogen auf deine Beispielmappe:

Packzettel für beimer nicht ausdrucken weil AU4 zwar größer 0 aber AU20 gleich 0
gleiches für den Packzettel für f und j
die beiden letzten Packzettel werden auch nicht gedruckt, weil jeweisl beide Werte gleich 0

Wie sieht es andersrum aus (keine Ahnung ob das vorkommen kann):
Beispiel: L4 ist 0 - L20 ist 100 ausdrucken oder nicht?

Gruß Werner

Betrifft: AW: Gerne u. Danke für die Rückmeldung. o.w.T.
von: Robert
Geschrieben am: 17.08.2020 19:31:15

Danke für Deine schnelle Antwort. Ja es sollte in alle Richtungen funktionieren. zB. bei deinem Beispiel Au4 bildet am Ende einen Packzettel und AU20 einen separaten. Die werden dann geteilt. Es macht aber nichts wenn z.B AU20 0 Und AU4 45 also größer 0 als DIN a 4 gedruckt werden. Werden dann händisch geschnitten. Wichtig wäre wenn beim letzten im Beispiel CK4 und CK21 wo bei beiden 0 steht als letztes Gedruckt in dem Fall dann CD4 und CD 21 wird. Und wie gesagt immer die Seite CU1:FF26. Also beides wenn Bei x 4 oder 20 eine Zahl größer 0 steht. Hoffe das war schlüssig.
Danke


LG Robert

Betrifft: AW: Gerne u. Danke für die Rückmeldung. o.w.T.
von: Werner
Geschrieben am: 17.08.2020 22:50:53

Hallo,

hab mir deine Beispielmappe jetzt mal genauer angeschaut.
Da hast du ja einige "Seiten" drin die ausgeblendet sind. Was ist denn mit denen?

Und eine verbundene Zellen reicht über mehrere Seiten bis rein in die letzte Seite (die, die immer mit gedruckt werden soll). Was bitte soll das denn?

Gruß Werner

Betrifft: AW: Gerne u. Danke für die Rückmeldung. o.w.T.
von: Robert
Geschrieben am: 18.08.2020 09:54:19

Hallo Werner Guten Morgen!
Es sollen nur die Packzettel gedruckt werden. Die versteckten Zellen werkeln im Hintergrund und bringen in den Eingeblendeten Zellen die entsprechenden Ergebnisse. Hoffe das ist kein Problem. Da ich mich Autodidakt mit Exel erst seit 12/19 beschäftige habe ich auf solche Dinge wie die Kennzeichnung der Zeile bis zum Ende nie groß Wert gelegt. Konnte es ja manuell mit dem Druckbereich regulieren. Auf dem Packzettel ABG Nord ist das ja aber nicht der Fall. Die ganze Arbeitsmappe hochladen geht nicht da zu groß und ausserdem hätte ich da Bauchschmerzen mit Datenschutz usw.. Manuell klappt das mit der Druckerei. Hätte es aber gern über ein Makrowenn möglich. Die 0 in E4, usw und E20 oder ebend AU 4 und 20 habe ich als gängisten Anhaltspunkt gedacht um Exel über Makro den Befehl für den Druckbereich zu gegeben und wie gesagt, das letzte Blatt immer.
Hoffe ich konnte ein wenig zur Aufklärung beitragen und hoffe es könnte eine Lösung geben.


Vielen Dank im voraus


LG Robert

Betrifft: AW: Gerne u. Danke für die Rückmeldung. o.w.T.
von: Werner
Geschrieben am: 18.08.2020 10:25:31

Hallo,

geht das jetzt schon wieder los.
Mich interessiert nicht, was die ausgeblendeten Seiten "im Hintergrund werkeln".
Beantworte einfach die Fragen.

Schau dir deine Beispielmappe mal an. Ich habe alle Spalten eingeblendet.

1. Was ist mit den ausgeblendeten Seiten 15-21 ?
-kann es sein, dass die Anzahl der ausgefüllten Seiten, die dann auch gedruckt werden müssen, variiert? Sprich: können da weitere Seiten die geprüft und ausgedruckt werden sollen dazu kommen?

2. Schau dir mal die Zeilen 6, 7 und 20 an. Da sind verbundene Zellen drin. Die reichen von Seite 15 bis in die letzte Seite (die immer gedruckt werden soll) rein. Was soll das?

3. Die Daten der letzten zu druckenden Seite, hier Seite 22, ist auf zwei Seiten (21 und 22) verteilt. Siehe Zellen FA3, FA10, FA22, FA23, FA24 und FA 26. Was soll das?

Vielleicht solltest du dein Tabellenblatt mal entsprechend bereinigen.

https://www.herber.de/bbs/user/139683.xlsx

Gruß Werner

Betrifft: AW: Gerne u. Danke für die Rückmeldung. o.w.T.
von: Robert
Geschrieben am: 18.08.2020 11:05:37

Hallo Werner!

Sieht man doch was ein Fachmann wert ist. Ich bin halt nach wie vor Laie. Das sind Dinge, die waren für mich bis jetzt nicht relevant. Das was Du mir vor Augen geführt hast, war in meinen Überlegungen garnicht vorhanden. Aber und das macht den Profi aus, Du hast Recht. Deshalb habe ich die Seite 21 auf 15 Verlegt (das was tasächlich gedruckt werden soll und würde diese als die letzte zu druckende Seite deklarieren. Diese Seiten gibt es dann 22 mal pro tour und 12 touren sind es. Dashalb denk ich mal das das mit Packzettel* zu machen gehen müsste. Ich hoffe echt, das das so funktionieren kann, ich scheine es nicht besser zu Wissen, deshalb sorry.

LG Robert


https://www.herber.de/bbs/user/139685.xlsx

Betrifft: AW: Gerne u. Danke für die Rückmeldung. o.w.T.
von: Werner
Geschrieben am: 18.08.2020 12:44:20

Hallo,

teste mal.

Voraussetzung ist aber, dass der Aufbau aller Packzettel Blätter exakt identisch ist.

https://www.herber.de/bbs/user/139687.xlsm

Gruß Werner

Betrifft: AW: Gerne u. Danke für die Rückmeldung. o.w.T.
von: Robert
Geschrieben am: 18.08.2020 12:52:01

Hallo Werner!

Vielen Dank für Deine Mühe. In der Beispieldatei geht es ja top, genau wie gewollt. Ich muss jetzt in der eigentlichen Arbeitsmappe, die Packzettel umgestalten. Das wird eine gewisse Zeit in Anspruch nehmen. Wundere Dich nicht, ich gebe Dir dann eine Rückmeldung. Nicht das Du denkst es wird nicht daran gearbeitet.
Vielen Dank


LG Robert.

Betrifft: AW: Gerne u. Danke für die Rückmeldung. o.w.T.
von: Robert
Geschrieben am: 18.08.2020 21:08:05

Jetzt habe ich doch noch ein paar Fragen.
1. exakt identisch heißt das jede Zellenhöhe muss vom ersten bis letzten Packzettel gleich sein, genauso die Spaltenbreite,
2. oder reicht es wenn alles genau exakt in den jeweiligen Zellen steckt z.b. Formel in B3 vom ersten bis zum letzten Packzettel.
3.Wie muss ich es im Code schreiben wenn ich zB. Abg Nord und Abg Mitte Packzettel 1 gesondert abrufen und drucken möchte. Es gibt nähmlich 22 die nicht immer alle besetzt sind.
Ich hoffe Du fühlst Dich nicht genervt von mir.
Danke für Deine Mühe

LG Robert

Option Explicit

Public Sub Packzettel_drucken_Version1()
Dim i As Long, ws As Worksheet, raWeg As Range

For Each ws In ThisWorkbook.Worksheets
    If ws.Name Like "Packzettel1 Nord 1 .Packzettel1 Mitte 1*" Then
        With ws
            For i = 5 To 96 Step 7
                If WorksheetFunction.Sum(.Cells(4, i), .Cells(20, i)) > 0 Then
                    If raWeg Is Nothing Then
                        Set raWeg = .Cells(4, i).Offset(-3, -4).Resize(26, 7)
                    Else
                        Set raWeg = Union(raWeg, .Cells(4, i).Offset(-3, -4).Resize(26, 7))
                    End If
                End If
            Next i
            If Not raWeg Is Nothing Then
                Union(raWeg, .Range("CU1:CZ26")).PrintPreview
            End If
        End With
    End If
Next ws
        
Set raWeg = Nothing
End Sub


Betrifft: AW: Gerne u. Danke für die Rückmeldung. o.w.T.
von: Robert
Geschrieben am: 19.08.2020 13:02:44

Hallo Werner,Ich habe jetzt in der Beispieldatei das Arbeitsblatt Packzettel Nord 1 zweimal kopiert. So das ich drei identische exakt gleiche Packzettel habe. Jetzt kommt die Fehlermeldung Die Methode 'Union' für das Objekts '_Global' ist fehlgeschlagen. Ich weiss nicht was ich tun soll. Die erste Seite geht immer wie gewünscht und dann kommt die Fehlermeldung. Ich Danke Dir im voraus. Hoffe man kann was tun. Die Fragen habe ich mnir damit selbst beantwortet von oben, es muss galles Haargenau gleich sein, da sonst Fehler 400 kommt..


LG Robert


Option Explicit

Public Sub Packzettel_drucken_Version1()
Dim i As Long, ws As Worksheet, raWeg As Range

For Each ws In ThisWorkbook.Worksheets
    If ws.Name Like "Packzettel*" Then
        With ws
            For i = 5 To 96 Step 7
                If WorksheetFunction.Sum(.Cells(4, i), .Cells(20, i)) > 0 Then
                    If raWeg Is Nothing Then
                        Set raWeg = .Cells(4, i).Offset(-3, -4).Resize(26, 7)
                    Else
                        Set raWeg = Union(raWeg, .Cells(4, i).Offset(-3, -4).Resize(26, 7))
                    End If
                End If
            Next i
            If Not raWeg Is Nothing Then
                Union(raWeg, .Range("CU1:CZ26")).PrintPreview
            End If
        End With
    End If
Next ws
        
Set raWeg = Nothing
End Sub


Betrifft: AW: Gerne u. Danke für die Rückmeldung. o.w.T.
von: Werner
Geschrieben am: 19.08.2020 13:32:07

Hallo,

habe vergessen in der Schleife über die verschiedenen Worksheets die Variable raWeg wieder zu leeren.

Hier zwischen End With und Next ws die Variable raWeg wieder leeren.
    End If
    Set raWeg = Nothing
Next ws
Gruß Werner

Betrifft: AW: Gerne u. Danke für die Rückmeldung. o.w.T.
von: Robert
Geschrieben am: 19.08.2020 16:12:42

Hallo Werner,

jetzt funktioniert es einwandfrei im Bespiel wie in der Liste. Wenn doch noch ein Problem geben sollte, dann würde ich mich noch einmal melden.
Ich Danke Dir von ganzen Herzen für Deine Mühen.



LG Robert