PDA

Vollständige Version anzeigen : Kopf- und Fußzeile nicht wie vorige


ctulhu
24.06.2009, 12:25
Hallo,

wie kann ich per VBA beim Aufrufen einer dot-Datei von Anfang an festlegen, dass Kopf- und Fußzeilen in verschiedenen Abschnitten generell nicht wie vorigen sein sollen.

Gruß
ctulhu

PapaSchlumpf
24.06.2009, 13:24
Hi

IMO geht das nicht.
Du kannst dir höchstens ein Makro schreiben, das dies für dich automatisch einstellt.
Z.B.
Sub AbschnittswechselNichtWieVorherigeKopfzeile()
Dim cb As CommandBar
Dim ctl As CommandBarControl
Dim oView As Integer
Set cb = CommandBars("Header and Footer")
Set ctl = cb.FindControl(ID:=250)
Selection.Collapse Direction:=wdCollapseStart
Selection.InsertBreak Type:=wdSectionBreakEvenPage ' anpassen
oView = ActiveDocument.ActiveWindow.View.SeekView
With ActiveDocument.ActiveWindow.View
.Type = wdPrintView
.SeekView = wdSeekCurrentPageHeader
If ctl.State = msoButtonDown Then
ctl.Execute
End If
End With
ActiveDocument.ActiveWindow.View.SeekView = oView

End Sub


HTH
PS

ctulhu
24.06.2009, 14:10
Hallo,

Danke für Deine Anregungen. Ich schiebe das Ganze aus Access an.

Sub AbschnittswechselNichtWieVorherigeKopfzeile(objWrd As Object)

Dim cb As CommandBar
Dim ctl As CommandBarControl
Dim oView As Integer
Set cb = CommandBars("Header and Footer")
Set ctl = cb.FindControl(ID:=250)
objWrd.Selection.Collapse Direction:=wdCollapseStart
objWrd.Selection.InsertBreak Type:=wdSectionBreakEvenPage ' anpassen
oView = objWrd.ActiveDocument.ActiveWindow.View.SeekView
With objWrd.ActiveDocument.ActiveWindow.View
.Type = wdPrintView
.SeekView = wdSeekCurrentPageHeader
If ctl.State = msoButtonDown Then
ctl.Execute
End If
End With
objWrd.ActiveDocument.ActiveWindow.View.SeekView = oView

End Sub

Die rot markiertern Deklarationen erkennt er nicht. woran kanns liegen.

Gruß
ctulhu

PapaSchlumpf
24.06.2009, 14:14
Hi

das liegt an der Bindung von Word an Access per CreateObject/GetObject und nicht per Verweis auf Word.
Setz mal für die ersten beiden Angaben: Object
und für msoButtonDown =-1 ein.
Dann sollte es auch so klappen.

HTH
PS

ctulhu
24.06.2009, 14:26
Hallo,

Beim Debuggen in Access treten keine Fehler auf.

Allerdings beim Starten von Word aus Access heraus kommt
"Ungültiger Prozeduraufruf oder ungültiges Argument"

Gruß
ctulhu

PapaSchlumpf
24.06.2009, 14:29
Hi,
dann solltest du auch mitteilen, wie du genau Word aus Access startest und an welcher Stelle der Fehler auftritt.

Gruß
PS

ctulhu
24.06.2009, 15:18
Hallo,

ich habe mir Deinen Code noch einmal angeschaut. Richtig verstanden habe ich ihn nicht (liegt an mir).
Für mein Problem kann ich ihn aber wahrscheinlich nicht verwenden.

Ich starte von Access aus eine "leere"-dot-Datei. Abschnitte (Unterschiedliche Kopf- und Fußzeilen) und Texte werden je nach Fall von Adccess aus eingefügt.
Ab der zweiten Kopfzeile ist diese bereits "vorbelegt" (deshalb mein Wunsch: Kopf- und Fußzeile nicht wie vorige gleich nach Aufruf der dot-Datei).

Gruß
ctulhu

PapaSchlumpf
24.06.2009, 15:45
hm,
probier mal bitte folgendes:

Öffne die Vorlage direkt
füge die verschiedenen benötigten Abschnittswechselarten ein und deaktiviere die Verknüpfung zum Vorherigen.
Speicher die Vorlage und lösche dann alle Abschnittswechsel.
Speicher wieder.

Evtl. wird die Einstellung ja in der Vorlage mitgespeichert.

Ich hoffe ja, dass die basierend auf der Vorlage neue Dokument erstellst und nicht die Vorlage öffnest und als Dokument abspeichert :horror:

Gruß
PS

ctulhu
24.06.2009, 16:29
Hallo PapaSchlumpf,

Die Abschnittsanzahl ist variabel.

Die benötigten Abschnitte werden wie folgt erstellt.

Sub VorlageundAbschnitt(LOGO, Stellungnahme As String, KonzernNr As Long, objWrd, objDoc As Object)

On Error GoTo Err_VorlageundAbschnitt

Dim i As Long
Dim WordAbschnittAnzahl As Long
Dim Kopftext As String
Dim Arrayfaktor As Variant

If Stellungnahme = "AB" Then
WordAbschnittAnzahl = StandortAnzahl(KonzernNr) + 2
ElseIf Stellungnahme = "B" Then
WordAbschnittAnzahl = StandortAnzahl(KonzernNr) + 1
ElseIf Stellungnahme = "C" Then
WordAbschnittAnzahl = StandortAnzahl(KonzernNr) + 1
End If

With objWrd
For i = 1 To WordAbschnittAnzahl + 1
Call Absatzzeichen(2, objWrd, objDoc)
If i < WordAbschnittAnzahl + 1 Then .Selection.InsertBreak Type:=wdSectionBreakNextPage
Call Absatzzeichen(2, objWrd, objDoc)
.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
.Selection.WholeStory
.Selection.Delete
Call KopfzeileEinfügen(LOGO, Stellungnahme, i, objWrd, objDoc)
If i < WordAbschnittAnzahl + 1 Then .Selection.HeaderFooter.LinkToPrevious = Not .Selection.HeaderFooter.LinkToPrevious
.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
.Selection.WholeStory
.Selection.Delete
Call FußzeileEinfügen(Stellungnahme, i, objWrd, objDoc)
If i < WordAbschnittAnzahl + 1 Then .Selection.HeaderFooter.LinkToPrevious = Not .Selection.HeaderFooter.LinkToPrevious
.ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
Next i
End With

Exit_VorlageundAbschnitt:
On Error Resume Next
Exit Sub

Err_VorlageundAbschnitt:
MsgBox Err.Description
Resume Exit_VorlageundAbschnitt

End Sub


Die verschiedenen Kopfzeilen wurden "addiert". Ich habe es sol gelöst, dass sie zuerst gelöscht werden und anschließend pro Abschnitt neu definiert. Das hätte ich mir sparen können, wenn es für "Kopf- und Fußzeile nicht wie vorige " eine globale Einstellung gäbe.

Vieleicht fällt Dir an dem Code was auf. Er wurde von mir dem "Macro-Recorder" in Word aufgezeichnet und anschließend für Access adaptiert.

Wahrscheilich nur suboptimal.

Gruß
ctulhu