WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 05.04.2003, 23:01   #1
3k1
Newbie
 
Registriert seit: 05.04.2003
Beiträge: 1


Standard 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!
3k1 ist offline   Mit Zitat antworten
Alt 06.04.2003, 15:43   #2
Seidl
Veteran
 
Registriert seit: 10.01.2001
Beiträge: 478


Standard

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
------------------------------------------------------
Seidl ist offline   Mit Zitat antworten
Alt 06.04.2003, 21:10   #3
johann.kreil
Jr. Member
 
Registriert seit: 20.01.2002
Alter: 65
Beiträge: 45


Standard 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
johann.kreil ist offline   Mit Zitat antworten
Alt 07.04.2003, 07:52   #4
Seidl
Veteran
 
Registriert seit: 10.01.2001
Beiträge: 478


Standard

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.
Seidl ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:11 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag