Hallo Jorge,
die Datei: http://www.hostarea.de/server-04/April-c1851f939f.xls
hat nachfolgenden Code.
Ich habe 2 zusätzliche Blätter angelegt,
„AssessmentChange“
„Druck“
Zum Ausdrucken muß man nur das Makro „Drucken“ starten.
Die Codes machen folgendes, wenn das Makro "Drucken gestartet wird.
Im Blatt „Assessment“ wird geprüft wieviele Druckseiten es gibt, deren Zellenbereiche (z.B. A1:I25 für das erste Druckblatt usw.) werden in dem Array rngSeite() gespeichert.
Im Blatt „AssessmentChange“ wird ab Dateiöffnung vollautomatisch all das Zellengenau mitprotokolliert was im Hauptblatt „Assessment“ eingegeben/geändert wurde.
Nun wird in einer Schleife das Array rngSeite durchlaufen und dabei geprüft ob im jeweiligen Zellenbereich eine NICHTleere Zelle existiert. Ist das so, so soll ja diese Druckseite auch gedruckt werden.
Dazu dient das Blatt Druck, dorthin werden die beiden Wiederholungszeilen oben hinkopiert, darunter das die zu druckende Druckseite, dann wird das ausgedruckt.
Derzeit nur in der Seitenansicht, aber das kriegste leicht selbst hin das auf richtiges Drucken umzustellen, mußt nur das Hochkomma vor dem Druckbefehl (printOut) wegmachen.
Dies alles geschieht dann auch für alle anderen Druckseiten innerhalb der Schleife.
Und, schalte unbedingt Option Explicit ein (Extras–Editor–Variablendeklaration notwendig) Ich und sicher auch andere habe keine Lust wegen diesem mangel stundenlang einen Fehler zu suchen der absolut unnötig wäre.
Das eine Makro von Rakon habe ich gelöscht, stand sowieso im falschen Modul, das andere sah identisch aus, falls nicht mußte dann das zweite auch löschen und das erste wieder einfügen.
Überprüfen mußt du auch ie horizontalen Seitenumbrüche, kann sein daß ich da paar verschoben/gelöscht habe.
Und, du brauchst deinen Mädels erst gar nix von den beiden neuen Blättern zu sagen, sie werden süäter sowieso unsichtbar für reine Excelbenutzer.
Und eine Schaltfläche fürs Drucken kannst du ja selbst einbauen, Tipp, positioniere es in den beiden fixierten Zeilen, dann ist es immer sichtbar. Genau wie deine andere Schaltfläche da.
Wenn alles klappt, ist es ein leichtes die dann ganz oben in der Symbolleiste als Symbol zu platzieren, so mit Icon vom Drucker o.ä.
Wenn du im Blatt "Assessment etwas am eigentlichen Formular ändern willst, noch mehr Farbe rein oder noch mehr Zellen verbinden *seufz*
)
so mußt du das tun wenn Makros deaktiviert sind, ansonsten wird das als Eingabe von Daten ins Blatt gewertet.
Bei meiner Variante spielt es keine Rolle ob Zellen geschützt sind oder nicht.
Gruß
Reinhard
In einem Standardmodul „mdlDruck“:
Option Explicit
Option Base 1
Public rngSeite() As Range ', bolNichtleer() As Boolean
'
Sub Seiten()
Dim SW As HPageBreak, Anz As Byte, Von As Long, Bis As Long, Mldg As String
Von = 1
With Worksheets("Assessment")
For Each SW In .HPageBreaks
Bis = SW.Location.Row - 1
Anz = Anz + 1
ReDim Preserve rngSeite(Anz)
Set rngSeite(Anz) = .Range("A" & Von & ":I" & Bis)
Mldg = Mldg & "Blatt " & Format(Anz, "00") & " umfasst den Bereich " & rngSeite(Anz).Address & Chr(13)
Von = Bis + 1
Next SW
Bis = .Range("A" & Rows.Count).End(xlUp).Row
If Bis \>= Von Then
Anz = Anz + 1
ReDim Preserve rngSeite(Anz)
Set rngSeite(Anz) = .Range("A" & Von & ":I" & Bis)
Mldg = Mldg & "Blatt " & Format(Anz, "00") & " umfasst den Bereich " & rngSeite(Anz).Address
End If
'ReDim bolNichtleer(Anz)
End With
'MsgBox Mldg
End Sub
'
Sub Drucken()
Dim Anz As Long
Call Seiten
With Worksheets("AssessmentChange")
For Anz = 1 To UBound(rngSeite)
If Application.WorksheetFunction.CountA(.Range(rngSeite(Anz).Address)) 0 Then
Worksheets("Druck").Cells.Clear
Worksheets("Assessment").Range("A1:I2").Copy Destination:=Worksheets("Druck").Range("a1")
rngSeite(Anz).Copy Destination:=Worksheets("Druck").Range("a3")
Worksheets("Druck").PrintPreview
'Worksheets("Druck").PrintOut
End If
Next Anz
End With
End Sub
Im Dokumentmodul des Blattes „Assessment“:
Private Sub Worksheet_Change(ByVal Target As Range)
Target.Copy Destination:=Worksheets(„AssessmentChange“).Range(Target.Address)
End Sub