Hallo zusammen,
wie kann ich mit Word 365 an den Anfang des Briefes springen, wenn ein Positionsrahmen platziert ist?
Ich habe ein leeres Worddokument und füge mit
Spoiler anzeigen
Einen Positionsrahmen ein. Dieser enthält Formularfelder, die dann mit Werten gefüllt werden. (soweit klappt da auch alles)
Jetzt möchte ich aber auch noch ein Firmenlogo einfügen und positionieren. Dies soll mit dieser Sub erledigt werden
Spoiler anzeigen
Leider wird die Grafik immer in den Positionsrahmen eingefügt und ist mit den Werten natürlich nicht mehr sichtbar.
Daher suche ich eine Möglichkeit, wirklich an den Anfang des Dokumentes zu gehen um somit das Logo positionieren zu können.
Die beiden Aktionen (Positionsrahmen und Logo) können einzeln aufgerufen werden und sind somit unabhängig von einander).
Hoffe, dass mir jemand von Euch helfen kann (und ich keine Sub vergessen habe, damit Ihr das gleich so ausprobiert könnt).
Vielen Dank schon einmal.
Gruß
Volker
wie kann ich mit Word 365 an den Anfang des Briefes springen, wenn ein Positionsrahmen platziert ist?
Ich habe ein leeres Worddokument und füge mit
VB.NET-Quellcode
- Sub Positionsrahmen_einfuegen_KSE()
- ' PositionMargin = Seitenrand
- ' PositionParagraph = Absatz
- ' PositionOuterMarginArea = Spalte
- ' PositionOuterCharacter = Seitenrand
- ' PositionPage = Seite
- Dim myFrame As Word.Frame
- ActiveDocument.Frames.Add Range:=Selection.Range
- For Each myFrame In ActiveDocument.Frames
- With myFrame
- ' Textumbruch
- .TextWrap = True ' False = ohne, True = umgebend
- ' Die einzelnen Werte für die Position und Größe des Positionsrahmens einstellen
- .RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
- .HorizontalPosition = CentimetersToPoints(12.7) 'wdFrameLeft
- .RelativeVerticalPosition = wdRelativeVerticalPositionPage
- .VerticalPosition = CentimetersToPoints(5.1)
- ' Höhe und Breite des Rahmens festlegen
- .Height = CentimetersToPoints(4.5)
- .Width = CentimetersToPoints(7)
- ' Breite = Genau
- .WidthRule = wdFrameExact
- .HeightRule = wdFrameExact
- ' Abstände zum Text für horizontal und vertial einstellen
- .VerticalDistanceFromText = CentimetersToPoints(0)
- .HorizontalDistanceFromText = CentimetersToPoints(0.25)
- ' Rahmen sichtbar?
- .Borders.Enable = True ' false
- ' verankern
- .LockAnchor = True
- End With
- Next myFrame
- ' Rahmen und Schattierungen einstellen
- With Selection.Frames(1)
- .Borders(wdBorderLeft).LineStyle = wdLineStyleNone
- .Borders(wdBorderRight).LineStyle = wdLineStyleNone
- .Borders(wdBorderTop).LineStyle = wdLineStyleNone
- .Borders(wdBorderBottom).LineStyle = wdLineStyleNone
- .Borders(wdBorderHorizontal).LineStyle = wdLineStyleNone
- .Borders.shadow = False
- End With
- With OPTIONS
- .DefaultBorderLineStyle = wdLineStyleSingle
- .DefaultBorderLineWidth = wdLineWidth075pt
- .DefaultBorderColor = wdColorAutomatic
- End With
- With Selection.Font
- .name = "Times New Roman"
- .size = 10
- End With
- ' Die Absätze formatieren
- With Selection.ParagraphFormat
- .LeftIndent = CentimetersToPoints(0)
- .RightIndent = CentimetersToPoints(0)
- .SpaceBefore = 0
- .SpaceBeforeAuto = False
- .SpaceAfter = 0
- .SpaceAfterAuto = False
- .LineSpacingRule = wdLineSpaceSingle
- .Alignment = wdAlignParagraphLeft
- .WidowControl = True
- .KeepWithNext = False
- .KeepTogether = False
- .PageBreakBefore = False
- .NoLineNumber = False
- .Hyphenation = True
- .FirstLineIndent = CentimetersToPoints(0)
- .OutlineLevel = wdOutlineLevelBodyText
- .CharacterUnitLeftIndent = 0
- .CharacterUnitRightIndent = 0
- .CharacterUnitFirstLineIndent = 0
- .LineUnitBefore = 0
- .LineUnitAfter = 0
- .MirrorIndents = False
- .TextboxTightWrap = wdTightNone
- .CollapsedByDefault = False
- End With
- ' Texte einfügen
- Selection.TypeText Text:="Ihr" 'Ansprechpartner:" & vbCrLf
- Call formfield_einfügen("Ansprechpartner")
- Selection.TypeText Text:=vbCrLf
- Call formfield_einfügen("Mitarbeiter")
- Selection.TypeText Text:=vbCrLf
- Selection.TypeText Text:="Telefon:" & vbTab & "02332 73-"
- Call formfield_einfügen("Telefon")
- Selection.TypeText Text:=vbCrLf
- Selection.TypeText Text:="Telefax:" & vbTab & "02332 73-"
- Call formfield_einfügen("Fax")
- Selection.TypeText Text:=vbCrLf
- Selection.TypeText Text:="E-Mail:" & vbTab
- Call formfield_einfügen("Email")
- Selection.TypeText Text:=vbCrLf
- Selection.TypeText Text:=vbCrLf
- Selection.TypeText Text:="Kunden-Nummer:" & vbTab
- Call formfield_einfügen("SAP_Kundennr")
- Selection.TypeText Text:=vbCrLf
- Selection.TypeText Text:="Vertragskonto-Nummer:" & vbTab
- Call formfield_einfügen("SAP_Vertragskontonr")
- Selection.TypeText Text:=vbCrLf
- Selection.TypeText Text:="Vertrags-Nummer:" & vbTab
- Call formfield_einfügen("SAP_VertragsNr")
- Selection.TypeText Text:=vbCrLf
- Selection.TypeText Text:=vbCrLf
- With Selection.Font
- .name = "Times New Roman"
- .size = 12
- End With
- Selection.TypeText Text:=vbTab
- Call formfield_einfügen("AktDatum")
- Call TabLinks(1.5)
- Call TabLinks(3.75)
- End Sub
- Sub Formfield_einfügen(NameDesFeldes As String)
- Dim myField As Word.FormField
- Selection.Collapse Direction:=wdCollapseEnd
- Set myField = Selection.FormFields.Add(Range:=Selection.Range, type:=wdFieldFormTextInput)
- With myField
- '.CalculateOnExit = True ' Nach dem Verlassen neu berechnen
- .name = NameDesFeldes
- End With
- End Sub
Einen Positionsrahmen ein. Dieser enthält Formularfelder, die dann mit Werten gefüllt werden. (soweit klappt da auch alles)
Jetzt möchte ich aber auch noch ein Firmenlogo einfügen und positionieren. Dies soll mit dieser Sub erledigt werden
VB.NET-Quellcode
- Enum SchreibschutzStatus_ENUM
- Umschalten = 0
- Aus = 1
- Ein = 2
- End Enum
- Sub Logo_einfügen()
- Const dlgSchliessen As Integer = -2
- Const dlgOK As Integer = -1
- Const dlgAbbrechen As Integer = 0
- Dim doc As Word.Document
- Dim shp As Word.Shape
- Dim dlg As Word.Dialog
- Dim bild As InlineShape
- Dim intButton As Integer
- Dim strGrafikdatei As String
- Call Schreibschutz_Ein_Aus(Aus)
- ' Aktualisierungsanzeige ausschalten
- Application.ScreenUpdating = False
- Call Grafiken_Löschen("Logo")
- strGrafikdatei = "C:\Temp\Logo.jpg"
- 'Grafik im Dokument einfügen
- 'If intButton = dlgOK Then
- Set doc = ActiveDocument
- With doc
- ' Das Logo im 20 Absatz einfügen
- ' Den Startpunkt (Anfang des Dokumentes) festlegen
- ' Selection.EndKey Unit:=wdStory ' Ende des Dokumentens
- ' Selection.HomeKey Unit:=wdStory ' Anfang des Dokumentes
- Dim rng As Range
- Set rng = Selection.Bookmarks("\Page").Range
- rng.SetRange rng.Start, rng.Start
- rng.Select
- Set rng = Nothing
- 'Set shp = .Shapes.AddPicture(FileName:=strGrafikdatei, Anchor:=doc.Paragraphs(20).Range)
- Set shp = .Shapes.AddPicture(FileName:=strGrafikdatei) ', Anchor:=doc.Selection)
- With shp
- 'Verankern
- .LockAnchor = True
- 'Seitenverhältnis fixieren
- .LockAspectRatio = msoTrue
- 'Ausrichtung am Seitenrand
- .RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
- .RelativeVerticalPosition = wdRelativeVerticalPositionPage
- 'Obere Linke Ecke
- .Left = CentimetersToPoints(13.34)
- .Top = CentimetersToPoints(-5.53)
- .Height = CentimetersToPoints(6) ' PixelToCM(833, 96)
- .Width = CentimetersToPoints(5) ' PixelToCM(933, 96)
- 'Hinter den Text setzen
- .ZOrder msoSendBehindText
- .name = "Firmen_Logo" & Replace(Time, ":", "")
- End With
- End With
- 'End If
- DoEvents
- ' Aktualisierungsanzeige ausschalten
- Application.ScreenUpdating = True
- Call Schreibschutz_Ein_Aus(Ein)
- End Sub
- Sub Logos_Löschen()
- Call Schreibschutz_Ein_Aus(Aus)
- ' Aktualisierungsanzeige ausschalten
- Application.ScreenUpdating = False
- Call Grafiken_Löschen("Logo")
- ' Aktualisierungsanzeige einschalten
- Application.ScreenUpdating = True
- End Sub
- Sub Schreibschutz_Ein_Aus(Optional Status As SchreibschutzStatus_ENUM = 0)
- Select Case Status
- Case 0 '"Umschalten"
- If ActiveDocument.ProtectionType <> wdNoProtection Then
- Call Abschnitt_Schützen(False)
- ActiveDocument.Unprotect
- Geschützt = 1
- Else
- If ActiveDocument.Bookmarks.Exists("NichtSchützen") = False Then
- Selection.EndKey Unit:=wdStory ' Ende des Dokumentens
- Selection.HomeKey Unit:=wdStory ' Anfang des Dokumentes
- Call Abschnitt_Schützen(True)
- ActiveDocument.Protect wdAllowOnlyFormFields, NoReset:=True
- End If
- End If
- Case 1 ' Aus
- If ActiveDocument.ProtectionType <> wdNoProtection Then
- On Error Resume Next
- Call Abschnitt_Schützen(False)
- ActiveDocument.Unprotect
- On Error GoTo 0
- Geschützt = 1
- End If
- Case 2 ' Ein
- If ActiveDocument.Bookmarks.Exists("NichtSchützen") = False Then
- Selection.EndKey Unit:=wdStory ' Ende des Dokumentens
- Selection.HomeKey Unit:=wdStory ' Anfang des Dokumentes
- If ActiveDocument.ProtectionType <> 2 Then
- On Error Resume Next
- Call Abschnitt_Schützen(True)
- ActiveDocument.Protect wdAllowOnlyFormFields, NoReset:=True
- On Error GoTo 0
- End If
- End If
- End Select
- End Sub
Leider wird die Grafik immer in den Positionsrahmen eingefügt und ist mit den Werten natürlich nicht mehr sichtbar.
Daher suche ich eine Möglichkeit, wirklich an den Anfang des Dokumentes zu gehen um somit das Logo positionieren zu können.
Die beiden Aktionen (Positionsrahmen und Logo) können einzeln aufgerufen werden und sind somit unabhängig von einander).
Hoffe, dass mir jemand von Euch helfen kann (und ich keine Sub vergessen habe, damit Ihr das gleich so ausprobiert könnt).
Vielen Dank schon einmal.
Gruß
Volker
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Volker Bunge“ ()