Office: (Office 2016) Word VBA navigieren mit Range-Objekt, Bilder positionieren

Helfe beim Thema Word VBA navigieren mit Range-Objekt, Bilder positionieren in Microsoft Word Hilfe um das Problem gemeinsam zu lösen; Guten Tag liebe Word Experten Ich bin etwas frustriert, weil ich etwas so einfaches nicht hinbekomme, als letzten ausweg nach stundenlangen... Dieses Thema im Forum "Microsoft Word Hilfe" wurde erstellt von Hyperkalio, 2. März 2018.

  1. Word VBA navigieren mit Range-Objekt, Bilder positionieren


    Guten Tag liebe Word Experten

    Ich bin etwas frustriert, weil ich etwas so einfaches nicht hinbekomme, als letzten ausweg nach stundenlangen Internet-Recherchen, hoffe ich nun auf eure Hilfe.

    Ich bin ein Fortgeschrittener Nutzer von Excel-VBA. Ich habe bereits viele Arbeiten mit Excel-Tabellen automatisiert. Ich konnte da bisher jeder Problem lösen.

    Nun habe ich zum ersten mal in meiner "Programierer-Karriere" mit Word-VBA zu tun und sollte fürs Geschäft eine Protokolldatei erstellen, wo Einträge über geführte Telefonate, Besuche, etc. gemacht werden können. Meine Idee war es nun, pro Eintrag, einen Eintrags-Kopf mit VBA zu generieren. Dieser Kopf beinhaltet ein Bild, die Angaben des Kunden (aus Exceltabelle), Datum etc.

    Ich habe geglaubt, dass dies nicht so eine grosse Sache sein wird, da ich mich in Excel ja einigermassen auskenne. Ich habe nun eine Userform erstellt. Beim laden dieser Userform, werden die Daten aus einer Exceltabelle geholt und in der Form zur Auswahl bereitgestellt.
    Soweit so gut.

    Nun wollte ich mit dem eigentlichen schreiben in das Worddokument beginnen und bin kläglich gescheitert. Ich schaffe es nichteinmal einen range zu definieren von manipulieren ganz zu schweigen. Mir fehlt hier anscheinend ganz entscheidendes Basis wissen. Dabei hoffe ich nun auf eure Hilfe, da ich auch mit Internet-Recherche nicht weiterkomme.

    Was möchte ich tun:

    1. Ein Bild einfügen. Dies soll linksbündig, immer im 7ten Absatz platziert werden (neuester Eintag soll immer zuoberst sein, darüber befindet sich der Formularkopf, mit öœberschrift, Buttens, etc.) Die grösse diese Bildes soll X68 und Y68 Punkte betragen. Ausserdem muss der Text rechts davon weitergehen, also Textumbruchseinstellung sollte Quadrat sein.
    2. Neben dem Bild soll der Titel hinkommen (aus Userform). Dass heisst z.B: Titel:Schulungsbesuch
    3. Einen Tabstop rechts auf 15.75 cm einfügen, wo dann das Erreignissdatum hinkommt
    4. Auf der nächsten Zeile geht es natürlich weiter mit Angaben aus der Userform. (Ich hoffe aber, dass ich mit den Angaben von Punkt 1,2,3 dies dann selber machen kann.
    5. Unter dem Bild und den Kopfdaten, wird der Sachbearbeiter nun seine Notizen hinschreiben.
    6. Ach ja eins noch. Zwischen den Einträgen soll ein Fortlaufender Abschnittswechsel hinkommen. Also unter dem Notiztext des Sachbearbeitrers.

    So ich hoffe ich konnte mein Problem einigermassen verständlich erklären. Ich denke nicht, dass ich eine Gesamtlösung brauche nur erstmal bisschen Hilfe beim Anfang. Bei meinen Versuchen, sind aber einige Fragen aufgetaucht, die ich nicht lösen konnte.

    Range definieren:
    Ich habe versucht einen Range zu definieren. Dieser sollte eigentlich am Anfang der 7ten Zeile stehen. Funktioniert nicht, Fehlermeldung Typen unverträglich. Was mache ich falsch?
    Code:
    Dim rng as range
    set rng = ThisDocument.Paragraphs(7)
    
    Bild einfügen:
    Das einfügen des Bilde funktioniert inzwischen. Allerdings musste ich es als InlineShapes einfügen (ansonsten funktionierte die Positionierung nicht). Um die Textumbrucheinstellung hinzubekommen, musste ich es weider zu einen Shape konvertieren. Ist das wirklich nötig?
    Code:
    Set shaBild = docDokument.InlineShapes.AddPicture(FileName:=strPfadBild, linktofile:=False, savewithdocument:=True)
        shaBild.ConvertToShape
        With shaBild
            .Width = 68
            .Height = 68
            .Range.ShapeRange.WrapFormat.Type = wdWrapSquare
        End With
    
    Ich habe wohl noch viele Fragen, aber ich belasse es erstmal dabei. Demjenigen, der sich der Sache annimmt, danke ich bereits im Voraus für seine Mühen.

    Freundlich Grüsst: Roland
     
    Zuletzt von einem Moderator bearbeitet: 30. November 2020
    Hyperkalio, 2. März 2018
    #1
  2. Gerhard H Erfahrener User
    Hallo Roland,

    Ein Absatz als Range:
    Da fehlt nicht viel:
    Code:
    Dim rng as range
    set rng = ThisDocument.Paragraphs(7)[COLOR="#FF0000"].Range[/COLOR]
    Ein Bild einfügen:
    Ich würde es auch zuerst als InlineShape einfügen. Da ist das Positionieren wesentlich einfacher und vor allem weniger buggy.
    Beispiel: Das hier....
    Code:
    Set shaBild = docDokument.Shapes.AddPicture(FileName:=strPfadBild, _
    Left:=40, Top:=0, Anchor:=ActiveDocument.Paragraphs(7).Range)
    funktioniert, aber nur, wenn der Anker sich nicht auf der ersten Seite befindet (z.B. infolge Seitenumbruch vorher). Auf der ersten Seite wird das Bild immer am ersten Absatz verankert, egal was du vorher festgelegt hast.

    Ich würde es sogar beim InlineShape belassen und die Positionierung via Einfügen in eine Tabellenzelle erledigen (wenn das der Aufbau deines Dokuments zulässt). Mit den Shapes hab ich einfach schon zu viele Überraschungen erlebt.

    Falls du dazu oder zu anderen Details noch Hilfe brauchen kannst, wär ein Musterdokument nicht schlecht.
     
    Gerhard H, 10. März 2018
    #2
  3. Exl121150 Erfahrener User
    Hallo Roland,

    in Word ist doch vieles anders als in Excel. Nachfolgend habe ich dir ein Code-Beispiel beigelegt, das deine Wunschliste (1-6) zumindest andeutungsweise realisieren sollte.
    Ich habe dabei das Shape-Objekt anstelle der InlineShapes verwendet. Zumindest bei mir ist der Code wunschgemäß gelaufen.

    Code:
    Option Explicit
    
    Sub Makro1()
    
      Dim wDoc As Word.Document
      Dim Shp As Word.Shape
      Dim rngT As Word.Range, rngB As Word.Range
      Dim Zl As Integer
      Dim AbschnittNr As Integer
      
      'Löscht den Inhalt des Hauptartikels der Datei
      Set wDoc = ActiveDocument
      wDoc.Content.Delete
      
      '5 Abschnitte werden eingefügt
      For AbschnittNr = 1 To 5
        
          With wDoc.Sections(AbschnittNr).Range
            For Zl = 1 To 6
              .InsertAfter "Absatz " & Zl
              .InsertParagraphAfter
            Next Zl
            .InsertParagraphAfter  '7.Absatz enthält eine Leerzeile
          End With
          
          Set rngT = wDoc.Sections(AbschnittNr).Range.Paragraphs(7).Range
          
          Set Shp = wDoc.Shapes.AddPicture( _
            FileName:="C:\Pfad\Bild.jpg", _
            LinkToFile:=False, SaveWithDocument:=True, Width:=68, Height:=68, _
            Anchor:=rngT)
          With Shp
            .WrapFormat.Type = wdWrapSquare
            .LockAnchor = True
          End With
          
          With rngT
            rngT.End = rngT.End - 1
            .InsertAfter "Titel: "
            
            'In "rngB" wird mittels der Range-Methode des Dokumentes
            'ein neues Range erzeugt, das unabhängig von "rngT" ist !!!
            'Es enthält den Text "Titel: ", der später eingefettet wird.
            Set rngB = wDoc.Range(.Start, .End)
            
            .InsertAfter "Schulungsbesuch" & vbTab
            
            .ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(15.75), Alignment:=wdAlignTabRight, Leader:=wdTabLeaderSpaces
            .InsertAfter Format(Date, "DD.MM.YYYY")
            .InsertParagraphAfter
            
            rngB.Font.Bold = True  'Einfettung von "Titel: "
            
            For Zl = 1 To 4
              .InsertAfter "Weiterer Text ...Nr. " & Zl
              .InsertParagraphAfter
            Next Zl
            .InsertAfter "Sachbearbeiter:"
            .InsertParagraphAfter
            .InsertParagraphAfter
          End With
          
          With wDoc.Sections(AbschnittNr).Range
            .Collapse wdCollapseEnd
            'Einfügen von einem "===Abschnittswechsel (Fortlaufend)==="
            .InsertBreak Type:=wdSectionBreakContinuous
          End With
          
      Next AbschnittNr
      
    End Sub
    
     
    Exl121150, 10. März 2018
    #3
Thema:

Word VBA navigieren mit Range-Objekt, Bilder positionieren

Die Seite wird geladen...
  1. Word VBA navigieren mit Range-Objekt, Bilder positionieren - Similar Threads - Word VBA navigieren

  2. Array aus Excel Tabelle einlesen Word VBA

    in Microsoft Excel Hilfe
    Array aus Excel Tabelle einlesen Word VBA: Hallo, ich benötige in einer Word Datei die Werte einer Excel Datei. Ich würde gerne eine Spalte als Array einlesen. Wie das Array ein lesen in Excel geht weiß ich, aber wie schaffe ich den...
  3. Nach Wörtern in Textmarke suchen und Zeilen formatieren

    in Microsoft Word Hilfe
    Nach Wörtern in Textmarke suchen und Zeilen formatieren: Hallo! Es gibt ein Word Dokument mit mehreren Seiten Text. In diesem Dokument steht öfter das Wort "Anteil". In diesem Dokument gibt es auch mehrere Textmarken. In den Textmarken ist jeweils Text...
  4. Dynamische Excel-Tabelle nach Word übertragen mit VBA

    in Microsoft Excel Hilfe
    Dynamische Excel-Tabelle nach Word übertragen mit VBA: Hallo Zusammen, ich bin neu hier und habe folgende Problemstellung: Ich bekomme quartalsweise eine (dynamische) EXCEL-datei mit folgendem Aufbau: Überschriften: Name Vorname PersNr spalte4...
  5. [VBA] Excel Tabelle via Bookmark nach Word + Größe an Fenster anpassen

    in Microsoft Excel Hilfe
    [VBA] Excel Tabelle via Bookmark nach Word + Größe an Fenster anpassen: Hallo zusammen, kennt jemand einen Kniff, wie ich eine aus Excel kopierte Range (inkl. Formatierung, jedoch ohne Verknüpfung) an die Stelle eines Bookmarks in einem Word-Dokument als neue Tabelle...
  6. [Excel, VBA] Daten aus Excel-Bereich in Word Tabelle einfügen

    in Microsoft Excel Hilfe
    [Excel, VBA] Daten aus Excel-Bereich in Word Tabelle einfügen: Hallo zusammen, ich stehe im Augenblick vor folgendem Problem. Habe in einem Excelsheet einen Bereich (5 Spalten, 2 Zeilen) mit Daten, dessen Inhalt ich gerne in ein Word-Dokument in eine...
  7. Word mit VBA

    in Microsoft Word Hilfe
    Word mit VBA: Hallo zusammen, habe hier ein kleines Problem wo ich nicht weiter komme, ich möchte gern eine Word Vorlage machen die wie Folgt aussehen soll. Word-Vorlagen-Dokument öffen wenn möglich sollte...
  8. [VBA] - Kommentare aus Word in Excel schreiben

    in Microsoft Excel Hilfe
    [VBA] - Kommentare aus Word in Excel schreiben: Hallo zusammen, ich habe ein Makro, das die Kommentare aus Worddateien ausliest und in eine Excel-Tabelle (ab Zeile 4) einfügt. Dabei schreibe ich verschiedene Dinge wie z.B. Textpassage,...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden