Discussion:
Drucken mit Abschnitten
(zu alt für eine Antwort)
Peter Haider
2007-09-19 06:31:52 UTC
Permalink
Hallo Leute,

Ich möchte das Word(2003 SP2)-Dok. per Code ausdrucken.
Soweit an sich kein Problem.
Nur, falls das Dokument in Abschnitten (Neue Seite) unterteilt ist gibts
Probleme
mit wdPrintFromTo und den Seitenzahlen.
Beispiel:
Dokument hat 4 Seiten,
1. Abschnitt 2 Seiten
2. Abschnitt 2 Seiten
mit der Abfrage
Seiten = ActiveDocument.ComputeStatistics(Statistic:=wdStatisticPages)
erhalte ich die korrekte Seitenanzahl (4)
Nun möchte ich z.B. die Seiten 2-3 ausdrucken.
Wie könnte man das am elegantesten lösen?

Danke für Tips, Peer
Thomas Gahler
2007-09-19 08:54:04 UTC
Permalink
Hallo Peter
Post by Peter Haider
Nun möchte ich z.B. die Seiten 2-3 ausdrucken.
Wie könnte man das am elegantesten lösen?
Schau dir mal die Wordhilfe an (nicht VBA-Hilfe).
im Frage Fester 'Drucken Abschnitt' eingeben
Thema 'Drucken eines Dokuments'
Drucken bestimmter Seiten und Abschnitte / Seitenbereich über
mehrer Abschnitte

oder ganz kurz du kannst im Feld Seiten den Wert 'P2S1-P1S2' eingeben
(P=page / Seite, S=section / Abschnitt)
--
Thomas Gahler
MVP für WordVBA
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)


- Windows XP (SP2), Office XP (SP3)
Peter Haider
2007-09-19 09:07:52 UTC
Permalink
Servus Thomas,

Das ist mir klar, nur heisst das, dass vor dem Druckbefehl bereits
analysieren muss, welche Seite sich in welchem Abschnitt befindet?
Der User sieht und kennt die Abschnitte nicht, sondern möchte
nur laut dem Beispiel ausdrucken.

Dafür möchte ich ihm nun ein Druckmenü mit der entsprechenden Auswahl zur
Verfügung stellen.

Danke vorerst, Peter
Post by Thomas Gahler
Hallo Peter
Post by Peter Haider
Nun möchte ich z.B. die Seiten 2-3 ausdrucken.
Wie könnte man das am elegantesten lösen?
Schau dir mal die Wordhilfe an (nicht VBA-Hilfe).
im Frage Fester 'Drucken Abschnitt' eingeben
Thema 'Drucken eines Dokuments'
Drucken bestimmter Seiten und Abschnitte / Seitenbereich über
mehrer Abschnitte
oder ganz kurz du kannst im Feld Seiten den Wert 'P2S1-P1S2' eingeben
(P=page / Seite, S=section / Abschnitt)
--
Thomas Gahler
MVP für WordVBA
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)
- Windows XP (SP2), Office XP (SP3)
Thomas Gahler
2007-09-19 09:43:02 UTC
Permalink
Hallo Peter
Post by Peter Haider
Das ist mir klar, nur heisst das, dass vor dem Druckbefehl bereits
analysieren muss, welche Seite sich in welchem Abschnitt befindet?
Gibt es einen Aufhänger, dass die Seiten erkannt werden können? (zB.
Textmarken, x-te Tabelle, bestimmte Vormatvorlagen oder sonst was). Dann
geht es einfacher.
Post by Peter Haider
Der User sieht und kennt die Abschnitte nicht, sondern möchte
nur laut dem Beispiel ausdrucken.
Stimmt nicht ganz, er sieht die Informationen in der Statuszeile
Post by Peter Haider
Dafür möchte ich ihm nun ein Druckmenü mit der entsprechenden Auswahl zur
Verfügung stellen.
Was soll denn die Auswahl schlussendlich können?
--
Thomas Gahler
MVP für WordVBA
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)


- Windows XP (SP2), Office XP (SP3)
Peter Haider
2007-09-19 09:58:04 UTC
Permalink
Hallo Thomas,
Post by Thomas Gahler
Gibt es einen Aufhänger, dass die Seiten erkannt werden können? (zB.
Textmarken, x-te Tabelle, bestimmte Vormatvorlagen oder sonst was). Dann
geht es einfacher.
Eindeutige Textmarken sind in den jeweiligen Abschnitten tatsächlich
vorhanden,
bzw. könnten für den jeweiligen Abschnitt eingebaut werden.
Post by Thomas Gahler
Post by Peter Haider
Der User sieht und kennt die Abschnitte nicht, sondern möchte
nur laut dem Beispiel ausdrucken.
Stimmt nicht ganz, er sieht die Informationen in der Statuszeile
Korrekt, nur leider muss ich von Benutzern ausgehn, die sich darum nicht
kümmern.
Der weiss auch nichts über Abschnitte und so.
Post by Thomas Gahler
Post by Peter Haider
Dafür möchte ich ihm nun ein Druckmenü mit der entsprechenden Auswahl zur
Verfügung stellen.
Was soll denn die Auswahl schlussendlich können?
Ua. wird hier angezeigt, das Dokument besteht aus x-Seiten, welche (z.B.
von-bis) möchtest ausdrucken?
Wählt er dann 2-3 sollte das auch wie beschrieben Abschnitts-übergreifend
funktionieren, ohne dass er
P2P1-P1S1 eingeben muss. Damit ist er leider überfordert.

Danke für Deine Mühe, Peter
Christian Freßdorf
2007-09-19 10:30:01 UTC
Permalink
Hallo Peter,

teste mal folgenden Code, ob der die aktuelle Seite bei Dir korrekt angibt
und ausdruckt:

Sub DocInformation()
Dim oDoc As Document
Set oDoc = ActiveDocument
Dim iSec As Integer
Dim iPage As Integer, sPrint As String
iSec = Selection.Information(wdActiveEndSectionNumber)
iPage = Selection.Information(wdActiveEndAdjustedPageNumber)
MsgBox "Aktuelle Seite ist:" & vbCrLf & "P" & iPage & "S" & iSec,
vbInformation
sPrint = "P" & iPage & "S" & iSec & "-P" '& iPage + 2 & "S" & iSec
oDoc.PrintOut Background:=False, Range:=wdPrintRangeOfPages, Pages:=sPrint
End Sub

wenn das klappt, kann man damit vielleicht weiterarbeiten.
--
Gruß Christian
~~~~~~~~~~~~
Antworten / Rückmeldungen nur in die NG!
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)
Christian Freßdorf
2007-09-19 10:46:58 UTC
Permalink
Hallo Peter

wenn Du noch die Seiteneingabe einbaust, teste mal folgendes Makro:

Sub PrintDocumentPages()
Dim c_PageS As Integer, c_PageE As Integer
c_PageS = 2
c_PageE = 6
Dim oDoc As Document
Set oDoc = ActiveDocument
Dim iSecS As Integer, iPageS As Integer
Dim iSecE As Integer, iPageE As Integer
Dim sPrint As String
Dim rngS As Range, rngE As Range
Set rngS = oDoc.GoTo(wdGoToPage, wdGoToAbsolute, c_PageS)
iSecS = rngS.Information(wdActiveEndSectionNumber)
iPageS = rngS.Information(wdActiveEndAdjustedPageNumber)
sPrint = "P" & iPageS & "S" & iSecS
If c_PageE > c_PageS Then
Set rngS = oDoc.GoTo(wdGoToPage, wdGoToAbsolute, c_PageE)
iSecE = rngS.Information(wdActiveEndSectionNumber)
iPageE = rngS.Information(wdActiveEndAdjustedPageNumber)
sPrint = sPrint & "-P" & iPageE & "S" & iSecE
ElseIf c_PageE < c_PageS Then
Set rngS = oDoc.GoTo(wdGoToPage, wdGoToAbsolute, c_PageE)
iSecE = rngS.Information(wdActiveEndSectionNumber)
iPageE = rngS.Information(wdActiveEndAdjustedPageNumber)
sPrint = "P" & iPageE & "S" & iSecE & "-" & sPrint
End If
MsgBox "Druckinformationen zum Seitenbereich " & c_PageS & "-" & c_PageE & _
":" & vbCrLf & sPrint, vbInformation
oDoc.PrintOut Background:=False, Range:=wdPrintRangeOfPages, Pages:=sPrint
End Sub

Klappt in meinem Dokument mit 7 Abschnitten gut.
Es könnte Probleme geben, wenn die Abschnittsnummerierung neu beginnt (was
ich nicht verwende)
--
Gruß Christian
~~~~~~~~~~~~
Antworten / Rückmeldungen nur in die NG!
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)
Peter Haider
2007-09-19 12:13:22 UTC
Permalink
Servus Christian,

Perfekt!!!

Dankeauchrechtschön, Peter
Post by Thomas Gahler
Hallo Peter
Sub PrintDocumentPages()
Dim c_PageS As Integer, c_PageE As Integer
c_PageS = 2
c_PageE = 6
Dim oDoc As Document
Set oDoc = ActiveDocument
Dim iSecS As Integer, iPageS As Integer
Dim iSecE As Integer, iPageE As Integer
Dim sPrint As String
Dim rngS As Range, rngE As Range
Set rngS = oDoc.GoTo(wdGoToPage, wdGoToAbsolute, c_PageS)
iSecS = rngS.Information(wdActiveEndSectionNumber)
iPageS = rngS.Information(wdActiveEndAdjustedPageNumber)
sPrint = "P" & iPageS & "S" & iSecS
If c_PageE > c_PageS Then
Set rngS = oDoc.GoTo(wdGoToPage, wdGoToAbsolute, c_PageE)
iSecE = rngS.Information(wdActiveEndSectionNumber)
iPageE = rngS.Information(wdActiveEndAdjustedPageNumber)
sPrint = sPrint & "-P" & iPageE & "S" & iSecE
ElseIf c_PageE < c_PageS Then
Set rngS = oDoc.GoTo(wdGoToPage, wdGoToAbsolute, c_PageE)
iSecE = rngS.Information(wdActiveEndSectionNumber)
iPageE = rngS.Information(wdActiveEndAdjustedPageNumber)
sPrint = "P" & iPageE & "S" & iSecE & "-" & sPrint
End If
MsgBox "Druckinformationen zum Seitenbereich " & c_PageS & "-" & c_PageE & _
":" & vbCrLf & sPrint, vbInformation
oDoc.PrintOut Background:=False, Range:=wdPrintRangeOfPages, Pages:=sPrint
End Sub
Klappt in meinem Dokument mit 7 Abschnitten gut.
Es könnte Probleme geben, wenn die Abschnittsnummerierung neu beginnt (was
ich nicht verwende)
--
Gruß Christian
~~~~~~~~~~~~
Antworten / Rückmeldungen nur in die NG!
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)
Loading...