WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   excelmakro (http://www.wcm.at/forum/showthread.php?t=93278)

3k1 05.04.2003 23:01

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!

Seidl 06.04.2003 15:43

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
------------------------------------------------------

johann.kreil 06.04.2003 21:10

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:)

Seidl 07.04.2003 07:52

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