Header Bild InlineShape

  • Excel

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Mobile.

    Header Bild InlineShape

    Hallo,

    ich habe eine fertig programmierte Excel Datei mit Makros (wurde nicht von mir erstellt). Über einen Button kann man sich eine Worddokument erzeugen lassen. Nun möchte ich in der generierten Word-Datei in der Kopfzeile anstatt eines Textes ein Logo anzeigen lassen.
    Ich habe es geschafft das Logo über .Headers(wdHeaderFooterFirstPage).Range.InlineShapes.AddPicture ("C:Userslogo.png") zu laden, aber leider finde ich keine Möglichkeit zur Positionierung. Es wäre super, wenn ich die absolute Position (Horizontal: "X cm rechts Seite, Vertikal: "Y cm unterhalb Seite") wie in Word definieren könnte.


    Dim strLogo As String
    ...
    strLogo = "C:\Users\logo.png"

    With .Sections(1)

    'Kopfzeile auf erster Seite einfügen
    .Headers(wdHeaderFooterFirstPage).Range.InlineShapes.AddPicture Filename:=strLogo, _
    LinkToFile:=False, SaveWithDocument:=True


    Irgendwie muss ich jetzt das InlineShape in ein Shape umwandeln, aber ich weiß leider nicht wie?!
    Kann mir jmd. helfen?
    Grundsätzlich: Im Zweifel starte in Word den Makrorekorder und führe durch was du brauchst und schau dir den produzierten Code an. Der ist zwar oft nicht der beste aber man weiß zumindest wo man ansetzen muss.

    Außerdem kann man sich bei MSDN auch einfach mal die Methode anschauen, oft gibt es Überladungen und Beispiele:
    shape add mit canvas:
    msdn.microsoft.com/en-us/library/office/ff191833.aspx
    inlineshape:
    msdn.microsoft.com/en-us/library/office/ff836023.aspx
    converttoshape:
    msdn.microsoft.com/en-us/library/office/ff193653.aspx'

    Das ist meine Signatur und sie wird wunderbar sein!

    Mono schrieb:

    Grundsätzlich: Im Zweifel starte in Word den Makrorekorder und führe durch was du brauchst und schau dir den produzierten Code an. Der ist zwar oft nicht der beste aber man weiß zumindest wo man ansetzen muss.

    Außerdem kann man sich bei MSDN auch einfach mal die Methode anschauen, oft gibt es Überladungen und Beispiele:
    shape add mit canvas:
    msdn.microsoft.com/en-us/library/office/ff191833.aspx
    inlineshape:
    msdn.microsoft.com/en-us/library/office/ff836023.aspx
    converttoshape:
    msdn.microsoft.com/en-us/library/office/ff193653.aspx'



    Danke für die Antwort, leider bringt der Makro Rekorder nichts, da über ein Button ein Word Dokument erzeugt wird, das geändert werden soll.
    Die Links kenne ich, helfen mir aber nicht wirklich weiter.

    Kann jemand helfen?
    Hilfe zur Selbsthilfe: Den Makrorecorder solltest Du natürlich in Word anwerfen und Deine gewünschten Aktionen machen. Ich komm für Dein konkretes Problem damit sehr schnell zum Ziel. Das einzige ist, dass Du die Maus nicht direkt dafür verwenden kannst, um in die Kopfzeile anzuwählen. Aber einfach das Menüband anpassen, um den passenden "Kopfzeile bearbeiten"-Befehl einzubauen, den während der Makroaufzeichnung anklicken und siehe da, der VBA-Befehl zum Betreten der Kopfzeile wird aufgezeichnet, so wie es Mono bereits schrieb. Damit ist "leider bringt der Makro Rekorder nichts" hier kein Argument.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Du kannst in Word auch ein Makro aufnehmen.

    Wenn du dir die MSDN Seite auch nur durchgelesen hättest dann hättest verschiedene Ansätze gefunden.

    Mit Convert To shape zum Beispiel:

    Visual Basic-Quellcode

    1. Dim s As Shape
    2. Set s = .Headers(wdHeaderFooterFirstPage).Range.InlineShapes.AddPicture(Filename:=strLogo, _LinkToFile:=False, SaveWithDocument:=True).ConvertToShape
    3. s.Top = 10
    4. s.Left = 200
    5. s.Width = 200
    6. s.Height = 300

    Oder aus dem ersten Link innerhalb eines Canvas Shapes:

    Visual Basic-Quellcode

    1. Set shpCanvas = .Headers(wdHeaderFooterFirstPage).Shapes _
    2. .AddCanvas(Left:=100, Top:=75, _
    3. Width:=200, Height:=300) '<- größe und position des Canvas
    4. 'Add a graphic to the drawing canvas
    5. shpCanvas.CanvasItems.AddPicture _
    6. Filename:=strLogo, _LinkToFile:=False, SaveWithDocument:=True, Left:=0, Top:=0, Width:=200, Height:=300 '<- relativ im Canvas Shape


    ODer direkt sollte auch gehen:

    Visual Basic-Quellcode

    1. Sections(1).Headers(wdHeaderFooterFirstPage).Shapes.AddPicture Filename:=strLogo, _LinkToFile:=False, SaveWithDocument:=True, Left:=0, Top:=0, Width:=200, Height:=11
    Das ist meine Signatur und sie wird wunderbar sein!
    Vielen Dank für die Antworten.

    Ich habe das Bild wie von Mono vorgeschlagen über

    Quellcode

    1. Sections(1).Headers(wdHeaderFooterFirstPage).Shapes.AddPicture Filename:=strLogo, _LinkToFile:=False, SaveWithDocument:=True, Left:=0, Top:=0, Width:=200, Height:=11


    hinzugefügt. Das hat auch funktioniert, nur überlagt das Bild in der Kopfzeile nun eine Tabelle im Text. Kann ich das Bild irgendwie in den Vordergrund stellen, bzw. die Tabelle im Text erst unterhalb des Bildes starten? wdWrapFront funktioniert irgendwie nicht :(

    Auf Seite 2 möchte ich zusätzlich zum Logo (Position rechts) auf der linken Seite eine Tabelle einfügen.

    Leider krieg ich entweder die Tabelle ODER das Logo in die Kopfzeile, jedoch nicht beides. Irgendwelche Vorschläge? :)

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Mobile“ ()

    Ich habe inzwischen fast alles so hingekriegt wie ich mir das vorgestellt habe.

    Aber: Ich möchte das Bild ungern von einem Server-Dateipfad laden, sondern direkt aus dem Excel-Sheet. Ich habe das Bild als Grafik eingefügt, kann es aber in VBA nicht ansteuern?!
    Kann jemand helfen?
    Ich benötige nochmal Hilfe

    Inzwischen habe ich folgenden Code stehen:

    Quellcode

    1. Dim shpHeader As Word.Shape
    2. Dim objHeader As Word.InlineShape
    3. With .Sections(1)
    4. 'Kopfzeile auf erster Seite einfügen
    5. ActiveWindow.View = xlNormalView
    6. Range("H14:H18").Select
    7. Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture
    8. Set objHeader1 = wdoc.Sections(1).Headers(wdHeaderFooterFirstPage).Range
    9. objHeader1.Paste
    10. Set shpHeader = objHeader1.InlineShapes(1).ConvertToShape
    11. 'With shpHeader
    12. 'shpHeader.Left = InchesToPoints(3.3)
    13. 'shpHeader.RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
    14. 'shpHeader.Left = CentimetersToPoints(50)
    15. 'End With

    Das Bild wird erfolgreich aus den Zellen H14:H18 gezogen und in der Kopfzeile des Word-Dokuments eingefügt.

    Leider funktioniert die Positionierung nicht. Ich möchte dem Bild feste Positionen geben (rechtsbündig alleine genügt nicht).

    Kann jmd. helfen?

    "shpHeader.Left = InchesToPoints(3.3)" funktioniert nicht...