Positionsrahmem, an den Anfang des Dokumentes springen

  • Word

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von zorroot.

    Positionsrahmem, an den Anfang des Dokumentes springen

    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

    VB.NET-Quellcode

    1. Sub Positionsrahmen_einfuegen_KSE()
    2. ' PositionMargin = Seitenrand
    3. ' PositionParagraph = Absatz
    4. ' PositionOuterMarginArea = Spalte
    5. ' PositionOuterCharacter = Seitenrand
    6. ' PositionPage = Seite
    7. Dim myFrame As Word.Frame
    8. ActiveDocument.Frames.Add Range:=Selection.Range
    9. For Each myFrame In ActiveDocument.Frames
    10. With myFrame
    11. ' Textumbruch
    12. .TextWrap = True ' False = ohne, True = umgebend
    13. ' Die einzelnen Werte für die Position und Größe des Positionsrahmens einstellen
    14. .RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
    15. .HorizontalPosition = CentimetersToPoints(12.7) 'wdFrameLeft
    16. .RelativeVerticalPosition = wdRelativeVerticalPositionPage
    17. .VerticalPosition = CentimetersToPoints(5.1)
    18. ' Höhe und Breite des Rahmens festlegen
    19. .Height = CentimetersToPoints(4.5)
    20. .Width = CentimetersToPoints(7)
    21. ' Breite = Genau
    22. .WidthRule = wdFrameExact
    23. .HeightRule = wdFrameExact
    24. ' Abstände zum Text für horizontal und vertial einstellen
    25. .VerticalDistanceFromText = CentimetersToPoints(0)
    26. .HorizontalDistanceFromText = CentimetersToPoints(0.25)
    27. ' Rahmen sichtbar?
    28. .Borders.Enable = True ' false
    29. ' verankern
    30. .LockAnchor = True
    31. End With
    32. Next myFrame
    33. ' Rahmen und Schattierungen einstellen
    34. With Selection.Frames(1)
    35. .Borders(wdBorderLeft).LineStyle = wdLineStyleNone
    36. .Borders(wdBorderRight).LineStyle = wdLineStyleNone
    37. .Borders(wdBorderTop).LineStyle = wdLineStyleNone
    38. .Borders(wdBorderBottom).LineStyle = wdLineStyleNone
    39. .Borders(wdBorderHorizontal).LineStyle = wdLineStyleNone
    40. .Borders.shadow = False
    41. End With
    42. With OPTIONS
    43. .DefaultBorderLineStyle = wdLineStyleSingle
    44. .DefaultBorderLineWidth = wdLineWidth075pt
    45. .DefaultBorderColor = wdColorAutomatic
    46. End With
    47. With Selection.Font
    48. .name = "Times New Roman"
    49. .size = 10
    50. End With
    51. ' Die Absätze formatieren
    52. With Selection.ParagraphFormat
    53. .LeftIndent = CentimetersToPoints(0)
    54. .RightIndent = CentimetersToPoints(0)
    55. .SpaceBefore = 0
    56. .SpaceBeforeAuto = False
    57. .SpaceAfter = 0
    58. .SpaceAfterAuto = False
    59. .LineSpacingRule = wdLineSpaceSingle
    60. .Alignment = wdAlignParagraphLeft
    61. .WidowControl = True
    62. .KeepWithNext = False
    63. .KeepTogether = False
    64. .PageBreakBefore = False
    65. .NoLineNumber = False
    66. .Hyphenation = True
    67. .FirstLineIndent = CentimetersToPoints(0)
    68. .OutlineLevel = wdOutlineLevelBodyText
    69. .CharacterUnitLeftIndent = 0
    70. .CharacterUnitRightIndent = 0
    71. .CharacterUnitFirstLineIndent = 0
    72. .LineUnitBefore = 0
    73. .LineUnitAfter = 0
    74. .MirrorIndents = False
    75. .TextboxTightWrap = wdTightNone
    76. .CollapsedByDefault = False
    77. End With
    78. ' Texte einfügen
    79. Selection.TypeText Text:="Ihr" 'Ansprechpartner:" & vbCrLf
    80. Call formfield_einfügen("Ansprechpartner")
    81. Selection.TypeText Text:=vbCrLf
    82. Call formfield_einfügen("Mitarbeiter")
    83. Selection.TypeText Text:=vbCrLf
    84. Selection.TypeText Text:="Telefon:" & vbTab & "02332 73-"
    85. Call formfield_einfügen("Telefon")
    86. Selection.TypeText Text:=vbCrLf
    87. Selection.TypeText Text:="Telefax:" & vbTab & "02332 73-"
    88. Call formfield_einfügen("Fax")
    89. Selection.TypeText Text:=vbCrLf
    90. Selection.TypeText Text:="E-Mail:" & vbTab
    91. Call formfield_einfügen("Email")
    92. Selection.TypeText Text:=vbCrLf
    93. Selection.TypeText Text:=vbCrLf
    94. Selection.TypeText Text:="Kunden-Nummer:" & vbTab
    95. Call formfield_einfügen("SAP_Kundennr")
    96. Selection.TypeText Text:=vbCrLf
    97. Selection.TypeText Text:="Vertragskonto-Nummer:" & vbTab
    98. Call formfield_einfügen("SAP_Vertragskontonr")
    99. Selection.TypeText Text:=vbCrLf
    100. Selection.TypeText Text:="Vertrags-Nummer:" & vbTab
    101. Call formfield_einfügen("SAP_VertragsNr")
    102. Selection.TypeText Text:=vbCrLf
    103. Selection.TypeText Text:=vbCrLf
    104. With Selection.Font
    105. .name = "Times New Roman"
    106. .size = 12
    107. End With
    108. Selection.TypeText Text:=vbTab
    109. Call formfield_einfügen("AktDatum")
    110. Call TabLinks(1.5)
    111. Call TabLinks(3.75)
    112. End Sub
    113. Sub Formfield_einfügen(NameDesFeldes As String)
    114. Dim myField As Word.FormField
    115. Selection.Collapse Direction:=wdCollapseEnd
    116. Set myField = Selection.FormFields.Add(Range:=Selection.Range, type:=wdFieldFormTextInput)
    117. With myField
    118. '.CalculateOnExit = True ' Nach dem Verlassen neu berechnen
    119. .name = NameDesFeldes
    120. End With
    121. 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

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Enum SchreibschutzStatus_ENUM
    2. Umschalten = 0
    3. Aus = 1
    4. Ein = 2
    5. End Enum
    6. Sub Logo_einfügen()
    7. Const dlgSchliessen As Integer = -2
    8. Const dlgOK As Integer = -1
    9. Const dlgAbbrechen As Integer = 0
    10. Dim doc As Word.Document
    11. Dim shp As Word.Shape
    12. Dim dlg As Word.Dialog
    13. Dim bild As InlineShape
    14. Dim intButton As Integer
    15. Dim strGrafikdatei As String
    16. Call Schreibschutz_Ein_Aus(Aus)
    17. ' Aktualisierungsanzeige ausschalten
    18. Application.ScreenUpdating = False
    19. Call Grafiken_Löschen("Logo")
    20. strGrafikdatei = "C:\Temp\Logo.jpg"
    21. 'Grafik im Dokument einfügen
    22. 'If intButton = dlgOK Then
    23. Set doc = ActiveDocument
    24. With doc
    25. ' Das Logo im 20 Absatz einfügen
    26. ' Den Startpunkt (Anfang des Dokumentes) festlegen
    27. ' Selection.EndKey Unit:=wdStory ' Ende des Dokumentens
    28. ' Selection.HomeKey Unit:=wdStory ' Anfang des Dokumentes
    29. Dim rng As Range
    30. Set rng = Selection.Bookmarks("\Page").Range
    31. rng.SetRange rng.Start, rng.Start
    32. rng.Select
    33. Set rng = Nothing
    34. 'Set shp = .Shapes.AddPicture(FileName:=strGrafikdatei, Anchor:=doc.Paragraphs(20).Range)
    35. Set shp = .Shapes.AddPicture(FileName:=strGrafikdatei) ', Anchor:=doc.Selection)
    36. With shp
    37. 'Verankern
    38. .LockAnchor = True
    39. 'Seitenverhältnis fixieren
    40. .LockAspectRatio = msoTrue
    41. 'Ausrichtung am Seitenrand
    42. .RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
    43. .RelativeVerticalPosition = wdRelativeVerticalPositionPage
    44. 'Obere Linke Ecke
    45. .Left = CentimetersToPoints(13.34)
    46. .Top = CentimetersToPoints(-5.53)
    47. .Height = CentimetersToPoints(6) ' PixelToCM(833, 96)
    48. .Width = CentimetersToPoints(5) ' PixelToCM(933, 96)
    49. 'Hinter den Text setzen
    50. .ZOrder msoSendBehindText
    51. .name = "Firmen_Logo" & Replace(Time, ":", "")
    52. End With
    53. End With
    54. 'End If
    55. DoEvents
    56. ' Aktualisierungsanzeige ausschalten
    57. Application.ScreenUpdating = True
    58. Call Schreibschutz_Ein_Aus(Ein)
    59. End Sub
    60. Sub Logos_Löschen()
    61. Call Schreibschutz_Ein_Aus(Aus)
    62. ' Aktualisierungsanzeige ausschalten
    63. Application.ScreenUpdating = False
    64. Call Grafiken_Löschen("Logo")
    65. ' Aktualisierungsanzeige einschalten
    66. Application.ScreenUpdating = True
    67. End Sub
    68. Sub Schreibschutz_Ein_Aus(Optional Status As SchreibschutzStatus_ENUM = 0)
    69. Select Case Status
    70. Case 0 '"Umschalten"
    71. If ActiveDocument.ProtectionType <> wdNoProtection Then
    72. Call Abschnitt_Schützen(False)
    73. ActiveDocument.Unprotect
    74. Geschützt = 1
    75. Else
    76. If ActiveDocument.Bookmarks.Exists("NichtSchützen") = False Then
    77. Selection.EndKey Unit:=wdStory ' Ende des Dokumentens
    78. Selection.HomeKey Unit:=wdStory ' Anfang des Dokumentes
    79. Call Abschnitt_Schützen(True)
    80. ActiveDocument.Protect wdAllowOnlyFormFields, NoReset:=True
    81. End If
    82. End If
    83. Case 1 ' Aus
    84. If ActiveDocument.ProtectionType <> wdNoProtection Then
    85. On Error Resume Next
    86. Call Abschnitt_Schützen(False)
    87. ActiveDocument.Unprotect
    88. On Error GoTo 0
    89. Geschützt = 1
    90. End If
    91. Case 2 ' Ein
    92. If ActiveDocument.Bookmarks.Exists("NichtSchützen") = False Then
    93. Selection.EndKey Unit:=wdStory ' Ende des Dokumentens
    94. Selection.HomeKey Unit:=wdStory ' Anfang des Dokumentes
    95. If ActiveDocument.ProtectionType <> 2 Then
    96. On Error Resume Next
    97. Call Abschnitt_Schützen(True)
    98. ActiveDocument.Protect wdAllowOnlyFormFields, NoReset:=True
    99. On Error GoTo 0
    100. End If
    101. End If
    102. End Select
    103. 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“ ()

    Vielleicht hilfreich

    Hallo,
    ich musste leider aus Zeitgründen das Programmieren mit VB.Net einstellen. Aber ich glaube, ein paar Dinge erkannt zu haben. Vielleicht ist es ja hilfreich.
    Zur Referenz noch kurz das Word Objekt Modell docs.microsoft.com/de-de/visua…del-overview?view=vs-2019

    1. Den Positionsrahmen fügst du so in dein Word Dokument ein

    Quellcode

    1. Zeile ​8. ActiveDocument.Frames.Add Range:=Selection.Range


    2. Das Logo fügst du so in dein Word Dokument ein

    Quellcode

    1. ​Zeile 40. Set rng = Selection.Bookmarks("\Page").Range
    2. Zeile 45. Set shp = .Shapes.AddPicture(FileName:=strGrafikdatei) ', Anchor:=doc.Selection)
    3. bzw.
    4. Zeile 40. Set rng = Selection.Bookmarks("\Page").Range
    5. Zeile 44. Set shp = .Shapes.AddPicture(FileName:=strGrafikdatei, Anchor:=doc.Paragraphs(20).Range)


    Der Positionsrahmen wird im ausgewählten Range Objekt eingefügt während das Logo bei einem Lesezeichen (bookmark) bzw. Absatz (paragraphs(20)) eingefügt wird. Meiner Meinung nach sollten die beiden neuen Objekte (Positionsrahmen und Logo) in der selben Range eingefügt werden.


    3. Außerdem könnte es sein, das die Reihenfolge wichtig ist. Wenn ich als Ergebnis den Text

    Quellcode

    1. ABBA
    2. Zitrone​
    in einem Word Dokument haben möchte und ich zuerst Zitrone und dann ABBA einfüge, so wird das Ergebnis so aussehen:

    Quellcode

    1. ​Zitrone
    2. ABBA

    Das Logo also als erstes einfügen und gucken, was passiert.