Excel - drucken WENN Zellwert

hallo zusammen!

und zwar habe ich eine excel-datei mit verschiedenen arbeitsblättern.
jetzt benötige ich ein makro, bei dem ich sagen kann, dass wenn der zellwert auf dem jeweiligen arbeitsblatt = 0 ist, das er das blatt dann nicht druckt. oder umgekehrt wäre auch möglich, wenn der wert z.b. 1 ist, das er mir dann das blatt druckt.

vielen dank schon mal im voraus!

Hallo Moon,

jetzt benötige ich ein makro, bei dem ich sagen kann,

bisschen aufwendig dafür ein Makro zu basteln was auf Spracheingaben reagiert .-))

Beschreib mal genauer wie du dir das vorgestellt hast.
Du hast in Tabelle1!A1 eine 1, in Tabelle2!A1 eine 0, Tabelle3!A1 eine 1 usw.
Und nun?

Gruß
Reinhard

Hallo,

ich gehe davon aus, daß du weißt, wie man Makros erstellt.

Es gibt dafür das Ereignis BeforePrint, welches du am Besten in den Abschnitt „DieseArbeitsmappe“ schreibst, sodaß es für alle Blätter gilt:

Private Sub Workbook\_BeforePrint(Cancel As Boolean)
 If ActiveSheet.Range("A1") = 0 Then Cancel = True
End Sub

Nachteil ist allerdings, daß der Drucken-Dialog nicht aufgerufen werden kann, solange in Zelle A1 des aktiven Blattes der Wert 0 steht.

LG

ok, also ich versuch es mal so zu beschreiben, das es auch verständlich ist.

also ich habe 1 excel datei in der ich mehrere arbeitsblätter habe.

es gibt ein „hauptblatt“, wo alle daten eingetragen werden und diese daten dann per verknüpfung, sverweis, usw. auf die anderen blätter ausgewertet werden.

im moment habe eine formular-schaltfläche mit einem makro, wo es mir dann JEDES arbeitsblatt ausdruckt - um die papierverschwendung aber etwas zu verringern, hätte ich jetzt gern gesagt, das wenn ich einen bestimmten verteiler auswähle (den ich ja dann zusätzlich mit einer nummer o. ä. festlegen könnte), er dann auch NUR die jeweiligen arbeitsblätter druckt.

möglich wäre also:

  1. ich sag im hauptformular das da ein bestimmter wert für mehrere seiten zum drucken steht und er druckt von dort aus

oder

  1. er wechselt vor dem drucken immer zum jeweiligen sheet und prüft dann in dem arbeitsblatt, ob dort ein gewisser wert steht, wenn ja druckt er oder eben nicht, und wechselt dann zum nächste, prüft, druckt oder drucht nicht, wechselt weiter, usw…

ich hoffe ich konnte es einigermaßen so erklären das man es versteht.

DANKE

hallo

danke schon mal für deine arbeit.

allerdings funktioniert es leider nicht. ich bin leider auch kein held was makros angeht… ich zeichne die immer auf, weil ich es anders nicht kann.

und irgendwie wird dieses „private sub“ nicht bei meinen makros angezeigt. was ist denn da der unterschied zu den (für mich) „normalen“ sub-makros?

bei mir wäre der zellwert in „i1“ dies habe ich angepasst, konnte das aber wie gesagt nicht auswählen und drucken konnte ich dann ganz normal.

was mach ich denn falsch?

–> habe weiter unten gerade nochmal genauer versucht zubeschreiben wie meine tabelle aussieht etc.

DANKE trotzdem schon mal!!!

  1. er wechselt vor dem drucken immer zum jeweiligen sheet und
    prüft dann in dem arbeitsblatt, ob dort ein gewisser wert
    steht, wenn ja druckt er oder eben nicht, und wechselt dann
    zum nächste, prüft, druckt oder drucht nicht, wechselt weiter,
    usw…

Hallo Moon,

weise der Schaltfläche folghendes makro zu.
Der Code gehört in ein Standardmodul, Modul1, Modul2, o.ä.
Ggfs. ein Modul erzeugen mit Einfügen—Modul.

Man wechselt im Editor mit Doppelklick auf die Modulnamen von Modul zu Modul. Der andere Code den du bekommen hast gehört in das Modul: „Diese Arbeitsmappe“.
Es ist automatischer Ereigniscode, d.h. du wählst wie gewohnt in Excel „Drucken“, das startet den Code automatisch.

Gruß
Reinhard

Option Explicit
'
Sub Drucken()
Dim wks As Worksheet
For Each wks In ThisWorkbook.Worksheets
 If wks.Range("I1").Value = 1 Then
 wks.PrintOut
 End If
Next wks
End Sub

hey reinhard

SUPER!!! das klappt mal sowas von spitze!!!

echt klasse!!!

VIELEN Dank!!!

aber eine frage hätte ich noch. also das bezieht sich jetzt nicht direkt auf die datei, aber sowas kann man ja immer mal brauchen :wink:

und zwar:
kannst du mir noch verraten wie es heißen müsste, das es das nicht automatisch auf die ganzen arbeitsblätter selbst bezieht, sondern wenn ich von mir aus sage:

Sheets(„Zusammenfassung“).Select
***prüfung und printout***
Sheets(„Zusammenfassung1“).Select
***prüfung und printout***
Sheets(„Zusammenfassung2“).Select
***prüfung und printout***

und dann soll er nur dieses eine blatt prüfen.

also so das ich selbst vorgebe welches arbeitsblatt er prüfen soll.

Vielen Dank schon nochmal.
freut mich echt das es so schnell ne lösung gab!!!

Gruß Rico

kannst du mir noch verraten wie es heißen müsste, das es das
nicht automatisch auf die ganzen arbeitsblätter selbst
bezieht, sondern wenn ich von mir aus sage:

Sheets(„Zusammenfassung“).Select
***prüfung und printout***
Sheets(„Zusammenfassung1“).Select
***prüfung und printout***
Sheets(„Zusammenfassung2“).Select
***prüfung und printout***

und dann soll er nur dieses eine blatt prüfen.

also so das ich selbst vorgebe welches arbeitsblatt er prüfen
soll.

Hallo Rico,

auch da muß ich wie fragen wie du dir das vorstellt, gibt einfach zuviel Möglichkeiten.

Nachstehend zwei Codes, wo du die namen vorgibst im Code.
Beim Array-Code mußt du nur in Array(…) die Blattnamen auflisten die geprüft werden sollen.

Beim anderen Code, der reagiert auf alle Blätter die vorne Zusammenfassung… heißen.

Gruß
Reinhard

Sub Drucken1()
Dim wks As Worksheet
For Each wks In ThisWorkbook.Worksheets
 If wks.Name Like "Zusammenfassung\*" Then
 If wks.Range("I1").Value = 1 Then
 wks.PrintOut
 End If
 End If
Next wks
End Sub
'
Sub Drucken2()
Dim wks As Worksheet, arrWks, W As Integer
arrWks = Array("Tabelle1", "Tabelle2", "Tabelle3")
For Each wks In ThisWorkbook.Worksheets
 For W = 0 To UBound(arrWks)
 If wks.Name = arrWks(W) Then
 If wks.Range("I1").Value = 1 Then
 wks.PrintOut
 End If
 End If
 Next W
Next wks
End Sub

Hi,

  • in Excel ALT+F11 drücken worauf ein neues zweigeteiltes Fenster erscheint
  • Links hast du eine Art Verzeichnisbaum. Dort auf „DieseArbeitsmappe“ doppelklicken
  • Im rechten Teil des Fensters nun den Code aus dem vorigen Beitrag eintragen und anpassen
  • speichern
  • Editor schließen

Code wirkt sofort

„Private Subs“ werden im Gegensatz zu „public subs“ nicht angezeigt, wenn du in Excel ALT-F8 drückst.

Public Subs können Modulübergreifend aufgerufen werden, private nicht, wie der Name schon sagt.

LG

Public Subs können Modulübergreifend aufgerufen werden,
private nicht, wie der Name schon sagt.

Hallo Kraftstromer,

ich weiß was du meinst, aber man kann aus einem anderen Modul heraus auch eine Private Sub starten die in einem anderen Modul steht.

Gruß
Reinhard