Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Makro zum Seiten Drucken, wenn in Zellen Zahl enthalten

Makro zum Seiten Drucken, wenn in Zellen Zahl enthalten
14.10.2024 09:37:05
sebastian
Hallo zusammen,
ich hab leider keine so guten VBA Kenntnisse, deswegen übersteigt mein "Problem" meine Kenntnisse, hoff jemand kann mir da weiter helfen.
In meiner Exceltabelle möchte ich auf ein Piktogramm ein Makro legen, welches folgendes abfragt.
- das erste Tabellenblatt soll nicht gedruckt werden
- das zweite Tabellenblatt ist das Deckblatt sozusagen und soll immer gedruckt werden
- ab dem dritten Tabellenblatt soll geprüft werden, wenn in Zelle B7 ein Text steht sollte dies gedruckt werden, aber in jedem Tabellenblatt sind auf der zweiten Druckseite auch formatierungen, da soll geschaut werden, wenn in Zelle B36 ein Text steht, soll die zweite Seite auch gedruckt werden

In den Zellen B7 und B36 stehen Formeln, hoff diese können ignoriert werden.
Wenn ich auf das Piktogramm klicke bzw. das Makro ausführe, möchte ich, dass die Bedingungen abgefragt werden und nur die Seiten mit Inhalt ausgewählt werden und mir dann das Fenster mit der Druckvorschau geöffnet wir, wo ich selber dann nochmal drüber schauen kann und auf Drucken oder abbrechen gehen kann.

Schon mal vielen herzlichen Dank im voraus :D
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro zum Seiten Drucken, wenn in Zellen Zahl enthalten
14.10.2024 16:21:21
UweD
Hallo

Die Druckbereiche für einblättrigen- und zweiblättrigen Druck musst du noch abpassen

Der Code in ein normales Modul einfügen und dann deinem Piktogramm zuweisen

Sub Drucken()

Dim RNG1 As String, RNG2 As String, DruckRNG1 As String, DruckRNG2 As String, i As Integer

'Zellen, die geprüft werden
RNG1 = "B7"
RNG2 = "B36"

'Druckbereiche festlegen
DruckRNG1 = "A1:D30" 'Beispiel
DruckRNG2 = "A1:D50"

'Deckblatt immer drucken
Sheets(2).PrintOut

For i = 3 To ThisWorkbook.Sheets.Count
With Sheets(i)
If WorksheetFunction.IsText(.Range(RNG1)) Then

'Druckbereiche einstellen
If WorksheetFunction.IsText(.Range(RNG2)) Then
.PageSetup.PrintArea = DruckRNG2
Else
.PageSetup.PrintArea = DruckRNG1
End If

'Restliche Blätter drucken
.PrintOut IgnorePrintAreas:=False

End If
End With
Next
End Sub


LG UweD
Anzeige
AW: Makro zum Seiten Drucken, wenn in Zellen Zahl enthalten
14.10.2024 17:05:15
UweD
Hallo

Das mit der Druckvorschau hatte ich nicht beachtet.
- Dann so...

Ebenso, Wenn auch Zahlen in den Prüfzellen stehen können erfolgt jetzt der Vergleich auf >"" (ungleich leer)

Sub Drucken()

Dim RNG1 As String, RNG2 As String, DruckRNG1 As String, DruckRNG2 As String
Dim Arr() As String, i As Integer, BlattIndex As Integer

' Zellen, die geprüft werden
RNG1 = "B7"
RNG2 = "B36"

' Druckbereiche festlegen
DruckRNG1 = "A1:D30" ' Beispiel
DruckRNG2 = "A1:D50"

' Deckblatt immer drucken
ReDim Arr(0) ' Initialisiere Array und füge das Deckblatt hinzu
Arr(0) = Sheets(2).Name

BlattIndex = 1 ' Startindex für weitere Blätter

For i = 3 To ThisWorkbook.Sheets.Count
With Sheets(i)
'If WorksheetFunction.IsText(.Range(RNG1)) Then
If .Range(RNG1) > "" Then
'If WorksheetFunction.IsText(.Range(RNG2)) Then
If .Range(RNG2) > "" Then
.PageSetup.PrintArea = DruckRNG2
Else
.PageSetup.PrintArea = DruckRNG1
End If

' Restliche Blätter hinzufügen
ReDim Preserve Arr(BlattIndex)
Arr(BlattIndex) = .Name
BlattIndex = BlattIndex + 1
End If
End With
Next i

' Blätter in der Druckvorschau anzeigen
Sheets(Arr).PrintPreview
End Sub

LG UweD
Anzeige
AW: Makro zum Seiten Drucken, wenn in Zellen Zahl enthalten
14.10.2024 17:20:31
snb
For each it in Sheets

if it.range("B7")>"" then it.pagesetup.printarea="A1:D" & 30+20*abs(it.range("B36")>"")
Next
AW: Makro zum Seiten Drucken, wenn in Zellen Zahl enthalten
17.10.2024 13:46:04
sebastian
Vielen Dank schon mal für die schnellen Antworten.
Kann man die Zellabfrage auf Inhalt und den Druckbereich auf jedes Tabellenblatt individuell anpassen?
Hab meine Datei mal hochgeladen, dass ihr euch mehr darunter vorstellen könnt:
https://www.herber.de/bbs/user/172954.xlsm

Das erste Tabellenblatt (Pytha Import) soll wie gesagt nie gedruckt werden.
Das zweite Tabellenblatt (Innentüren) sollte immer alles gedruckt werden.
Das dritte Tabellenblatt (Stückliste HDF) sollte abgefragt werden, wenn in einer der Zellen von A7:A22 eine Zahl, dann sollte der Bereich A1:R33 gedruckt werden.
Das vierte Tabellenblatt (Stückliste Kiefer) sollte ebenfallst abgefragt werden, wenn in einer der Zellen von A7:A22 eine Zahl, dann sollte der Bereich A1:S33 gedruckt werden.
Das fünfte Tabellenblatt (Stückliste Verkleidungen) sollte abgefragt werden, wenn in Zelle A7 eine Zahl, dann sollte der Bereich A1:O33 gedruckt werden, wenn aber zusätlich in Zelle B39 ein Text oder in M39 eine Zahl steht, dann sollte der Bereich A1:O65 gedruckt werden.
Das sechste Tabellenblatt (Stückliste Zarge) sollte abgefragt werden, wenn in Zelle A8 eine Zahl, dann sollte der Bereich A1:O33 gedruckt werden, wenn aber zusätlich in Zelle B40 ein Text, dann sollte der Bereich A1:O65 gedruckt werden.
Das siebte und letzte Tabellenblatt (Stückliste Stockstücke) sollte abgefragt werden, wenn in Zelle A7 eine Zahl, dann sollte der Bereich A1:R33 gedruckt werden, wenn aber zusätzlich in Zelle B39 ein Text oder in Zelle O39 eine Zahl, dann sollte der Bereich A1:R65 gedruckt werden.

Vielen Dank nochmal.
Beste Grüße Sebastian
Anzeige
AW: Makro zum Seiten Drucken, wenn in Zellen Zahl enthalten
17.10.2024 15:21:25
UweD
Hallo nochmal


So?

Public BlattIndex As Integer

Public Arr() As String

Sub Drucken()
Dim i As Integer, WF

Set WF = WorksheetFunction
'Info: IsText() gibt es nur als Worksheetfunction, während IsNumeric() als VBA Funktion existiert

'Deckblatt immer drucken
ReDim Arr(0) ' Initialisiere Array und füge das Deckblatt hinzu
Arr(0) = Sheets("Innentüren").Name

BlattIndex = 1 ' Startindex für weitere Blätter

For i = 3 To ThisWorkbook.Sheets.Count
With Sheets(i)
Select Case .Name
Case "Stückliste HDF"
'wenn in einer der Zellen von A7:A22 eine Zahl, dann sollte der Bereich A1:R33 gedruckt werden.
If WF.Count(.Range("A7:A22")) > 0 Then
.PageSetup.PrintArea = "A1:R33"
AddArr (.Name)
End If


Case "Stückliste Kiefer"
'wenn in einer der Zellen von A7:A22 eine Zahl, dann sollte der Bereich A1:S33 gedruckt werden.
If WF.Count(.Range("A7:A22")) > 0 Then
.PageSetup.PrintArea = "A1:S33"
AddArr (.Name)

End If

Case "Stückliste Verkleidungen"
'wenn in Zelle A7 eine Zahl, dann sollte der Bereich A1:O33 gedruckt werden,
'wenn aber zusätlich in Zelle B39 ein Text
'oder in M39 eine Zahl steht, dann sollte der Bereich A1:O65 gedruckt werden.
If IsNumeric(.Range("B7")) Then
.PageSetup.PrintArea = "A1:O33"

If WF.IsText(.Range("B39")) Or IsNumeric(.Range("M39")) Then
.PageSetup.PrintArea = "A1:O65"
End If
AddArr (.Name)

End If

Case "Stückliste Zarge"
'wenn in Zelle A8 eine Zahl, dann sollte der Bereich A1:O33 gedruckt werden,
'wenn aber zusätlich in Zelle B40 ein Text, dann sollte der Bereich A1:O65 gedruckt werden.
If IsNumeric(.Range("B8")) Then
.PageSetup.PrintArea = "A1:O33"

If WF.IsText(.Range("B40")) Then
.PageSetup.PrintArea = "A1:O65"
End If
AddArr (.Name)

End If

Case "Stückliste Stockstücke"
'wenn in Zelle A7 eine Zahl, dann sollte der Bereich A1:R33 gedruckt werden,
'wenn aber zusätzlich in Zelle B39 ein Text
'oder in Zelle O39 eine Zahl, dann sollte der Bereich A1:R65 gedruckt werden.
If IsNumeric(.Range("A7")) Then
.PageSetup.PrintArea = "A1:R33"

If WF.IsText(.Range("B39")) Or WF.IsNumeric(.Range("O39")) Then
.PageSetup.PrintArea = "A1:R65"
End If
AddArr (.Name)

End If

Case Else
'mach nix

End Select

End With
Next i

' Blätter in der Druckvorschau anzeigen
Sheets(Arr).PrintPreview
End Sub

Private Sub AddArr(BLName)
ReDim Preserve Arr(BlattIndex)
Arr(BlattIndex) = BLName
BlattIndex = BlattIndex + 1
End Sub



LG UweD
Anzeige
AW: Makro zum Seiten Drucken, wenn in Zellen Zahl enthalten
18.10.2024 08:18:33
sebastian
Funktioniert fast perfekt, ein problem gibt es.
Auf den Tabellenblättern, wo variabel die zweite Seite gedruckt werden soll, wird IMMER die zweite Seite gedruckt.
Kann es sein, dass er bei der Abfrage, auf den Tabellenblättern Stückliste Verkleidungen, Stückliste Zarge und Stückliste Stockstücke für die zweite Seite meint, dass die in der Zelle befindende Formel auch ein Text ist?

Gruß Sebastian
Anzeige
AW: Makro zum Seiten Drucken, wenn in Zellen Zahl enthalten
18.10.2024 09:22:33
UweD
Hallo

2 Sachen sind mir jetzt noch aufgefallen

  • Ich habe dort B7 abgefragt und du wolltest aber A7 ( hab ich geändert )

  • Wenn eine Formel in der Zelle Leer liefert, wird die Prüfung IsText() als Wahr ausgegeben; ich prüfe nun auf >""


  • Option Explicit
    

    Public BlattIndex As Integer
    Public Arr() As String

    Sub Drucken()
    Dim i As Integer, WF

    Set WF = WorksheetFunction
    'Info: IsText() gibt es nur als Worksheetfunction, während IsNumeric() als VBA Funktion existiert

    'Deckblatt immer drucken
    ReDim Arr(0) ' Initialisiere Array und füge das Deckblatt hinzu
    Arr(0) = Sheets("Innentüren").Name

    BlattIndex = 1 ' Startindex für weitere Blätter

    For i = 3 To ThisWorkbook.Sheets.Count
    With Sheets(i)
    Select Case .Name
    Case "Stückliste HDF"
    'wenn in einer der Zellen von A7:A22 eine Zahl, dann sollte der Bereich A1:R33 gedruckt werden.
    If WF.Count(.Range("A7:A22")) > 0 Then
    .PageSetup.PrintArea = "A1:R33"
    AddArr (.Name)
    End If


    Case "Stückliste Kiefer"
    'wenn in einer der Zellen von A7:A22 eine Zahl, dann sollte der Bereich A1:S33 gedruckt werden.
    If WF.Count(.Range("A7:A22")) > 0 Then
    .PageSetup.PrintArea = "A1:S33"
    AddArr (.Name)

    End If

    Case "Stückliste Verkleidungen"
    'wenn in Zelle A7 eine Zahl, dann sollte der Bereich A1:O33 gedruckt werden,
    'wenn aber zusätlich in Zelle B39 ein Text
    'oder in M39 eine Zahl steht, dann sollte der Bereich A1:O65 gedruckt werden.
    If IsNumeric(.Range("A7")) Then
    .PageSetup.PrintArea = "A1:O33"

    If .Range("B39") > "" Or IsNumeric(.Range("M39")) Then
    .PageSetup.PrintArea = "A1:O65"
    End If
    AddArr (.Name)

    End If

    Case "Stückliste Zarge"
    'wenn in Zelle A8 eine Zahl, dann sollte der Bereich A1:O33 gedruckt werden,
    'wenn aber zusätlich in Zelle B40 ein Text, dann sollte der Bereich A1:O65 gedruckt werden.
    If IsNumeric(.Range("A8")) Then
    .PageSetup.PrintArea = "A1:O33"

    If .Range("B40") > "" Then
    .PageSetup.PrintArea = "A1:O65"
    End If
    AddArr (.Name)

    End If

    Case "Stückliste Stockstücke"
    'wenn in Zelle A7 eine Zahl, dann sollte der Bereich A1:R33 gedruckt werden,
    'wenn aber zusätzlich in Zelle B39 ein Text
    'oder in Zelle O39 eine Zahl, dann sollte der Bereich A1:R65 gedruckt werden.
    If IsNumeric(.Range("A7")) Then
    .PageSetup.PrintArea = "A1:R33"

    If .Range("B39") > "" Or WF.IsNumeric(.Range("O39")) Then
    .PageSetup.PrintArea = "A1:R65"
    End If
    AddArr (.Name)

    End If

    Case Else
    'mach nix

    End Select

    End With
    Next i

    ' Blätter in der Druckvorschau anzeigen
    Sheets(Arr).PrintPreview
    End Sub

    Private Sub AddArr(BLName)
    ReDim Preserve Arr(BlattIndex)
    Arr(BlattIndex) = BLName
    BlattIndex = BlattIndex + 1
    End Sub

    LG UweD
    Anzeige
    AW: Makro zum Seiten Drucken, wenn in Zellen Zahl enthalten
    18.10.2024 09:41:50
    sebastian
    Funktioniert super. Vielen herzlichen Dank :D
    ;

    Forumthreads zu verwandten Themen

    Anzeige
    Anzeige
    Entdecke relevante Threads

    Schau dir verwandte Threads basierend auf dem aktuellen Thema an

    Alle relevanten Threads mit Inhaltsvorschau entdecken
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Entdecke mehr
    Finde genau, was du suchst

    Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

    Suche nach den besten Antworten
    Unsere beliebtesten Threads

    Entdecke unsere meistgeklickten Beiträge in der Google Suche

    Top 100 Threads jetzt ansehen
    Anzeige