![]() |
excelmakro
servus!
folgendes problem: habe mir für eine exceltabelle mit vielen blättern ein makro für eine druckfunktion aufgezeichnet. allerdings sollen nur jene blätter gedruckt werden, bei denen sich etwas geändert hat. kennt jemand eine passende befehlszeile? vielen dank im voraus! |
Ich bin mir nicht sicher ob ich deine Fragestellung so interpretieren soll, wie sie geschrieben steht. Falls du wirklich EINE TABELLE (Worksheet) hast, die eben beim Drucken über mehrere Seiten geht weil sie so viele Daten enthält, so hast du ein dezentes Problem.
Da im Objektmodell von Excel, zumindest in diesem Zusammenhang, keine Seiten vorkommen, kannst du auch keine Änderungen an Seiten abfragen. Allerdings kenne ich auch für die vorhandenen Objekte in Excel keine Möglichkeit, eine Änderung seit dem letzten Öffnen abzufragen. Man könnte sich in diesem Fall am ehesten damit behelfen, die Zeilennummern von geänderten Zellen mitzuloggen. Beim Ausdrucken müsste man dann allerdings wieder mit den PageBreaks herumhantieren um die zu den geänderten Zeilen gehörigen Seiten herauszubekommen. Dann könnte man diese als Druckbereich definieren und den Druck starten. Falls du allerdings EINE ARBEITSMAPPE (Workbook) mit mehreren Tabellen (Worksheets) hast, so ist das Problem eher nicht so aufregend. In diesem Fall musst du nur die geänderten Sheets mitloggen und dann für diese das Drucken auslösen. Das liesse sich mit folgendem Code in der Arbeitsmappe (Workbook) bewerkstelligen: --------------------------------------------------------------- Private DirtySheets() As String Private Sub Workbook_BeforeClose(Cancel As Boolean) PrintDirtySheets End Sub Private Sub Workbook_Open() ReDim DirtySheets(Me.Worksheets.Count - 1) End Sub Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Source As Range) DirtySheets(Sh.Index - 1) = Sh.Name End Sub Public Sub PrintDirtySheets() Dim Names As String Dim Answer As Integer Dim Wsh As Worksheet For Each SheetName In DirtySheets If SheetName <> "" Then If Names <> "" Then Names = Names & ", " & SheetName Else Names = Names & SheetName End If End If Next If Names <> "" Then Answer = MsgBox("Die Druckfunktion hat Änderungen in folgenden Sheets festgehalten:" & vbNewLine & vbNewLine & _ Names & vbNewLine & vbNewLine & _ "Sollen diese Sheets gedruckt werden?", _ vbQuestion + vbYesNo, _ "Druckfunktion") If Answer = vbYes Then For Each SheetName In DirtySheets If SheetName <> "" Then Set Wsh = Worksheets(SheetName) ' Wsh.PrintPreview ' zeigt Druckvorschau Wsh.PrintOut ' druckt sofort End If Next End If Else MsgBox "Die Druckfunktion hat keine Änderungen an Sheets festgehalten.", _ vbInformation + vbOKOnly, _ "Druckfunktion" End If End Sub ------------------------------------------------------ |
recht schönen dank an seidl
servus!
ich antworte hier für meinen bruder (3k1), wir haben nämlich gemeinsam an dieser sache herumgebastelt. für die unklare fragestellung bitte ich um entschuldigung, es geht nicht um "seiten", der angeführte vba-code (ich hoffe das ist der richtige ausdruck)sollte eigentlich zu unserem problem passen. vorerst vielen dank für die mühe, einer von uns beiden rührt sich noch mal, wird aber einige zeit dauern. ciao hans kreil:) |
Never mind. You're welcome.
Allerdings muss ich noch was zu dem Script anmerken. Wenn sich der Name eines Worksheets ändert oder ein neues dazukommt, so wird die Funktion mit ziemlicher Sicherheit aus dem Tritt geraten. Es liesse sich zwar bestimmt auch bewerkstelligen sowas zu meistern aber das wäre dann sicher mit einigem Mehraufwand verbunden. |
Alle Zeitangaben in WEZ +2. Es ist jetzt 18:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag