PDA

Vollständige Version anzeigen : Daten aus einer in Word eingebetteten Exceltabelle übernehmen


Stefan67!
04.09.2019, 07:32
Hallo zusammen,

ich habe in Word eine (einzige) Exceldatei als Symbol eingebettet - also nicht verlinkt.

Jetzt soll entweder folgendes möglich sein:

1. Eingebettete Exceldatei mit Word-VBA öffnen (und ggf. zum Abspeichern auffordern)
2. Direkt (ohne Öffnen) auf Daten der eingebetteten XLSM-Datei zugreifen und den Zelleninhalt (z.B. "C6") einer Bookmark (z.B. "Kap.1.") in Word als Text zuteilen.

Variante 2 wäre wohl eleganter, die Datenübernahme aus einer bereits geöffneten Exceldatei habe ich aber bereits umgesetzt, daher wären beide Varianten denkbar.

Danke vorab.

Mase
04.09.2019, 22:08
Hi,

zu 2)
Zuerst in Word noch auf das Excel Objektmodell verweisen.
Im VBE wie gewohnt auf Extras -> Verweise -> Microsoft Excel ...

Anschließend den folgenden Code ein ein Modul kopieren.
Falls noch fragen sind, einfach melden.


Option Explicit

Sub getValFromXlRangeC6()
'
Dim xlApp as Excel.Application
Dim xlWkb as Excel.Workbook
Dim xlWKS as Excel.Worksheet
Dim sPfadZurDatei as String
Dim sDateiName as String
'
On error goto err
'
set xlApp = New Excel.Application
sDateiName = "Test.xlsm"
sPfadZurDatei = "C:" & Application.PathSeparator & "TestOrdner" & Application.PathSeparator & sDateiName
'
with xlApp
.Visible = false
set xlWkb = xlApp.Workbooks.Open(sPfadZurDatei)
set xlWks = xlWkb.Worksheets(1)
'Zugriff auf Zelle C6
msgbox xlWks.Range("C6").value2,vbinformation+vbokonly,"Autor informiert:"

end with
'
xlwkb.close False
xlApp.Quit
'
err:
If err.Number <> 0 then
MsgBox err.Number & vbcrlf & err.Description, vbcritical+vbokonly,"Autor informiert:"
End If

set xlWks = nothing: set xlWkb = nothing: set xlApp = nothing
End Sub

Stefan67!
06.09.2019, 07:23
Hatte eigentlich gedacht, ich setzte einen Code direkt in die Arbeitsmappe (This document) ohne extra Modul.
Aber wie realisiere ich:

1. Zuerst in Word noch auf das Excel Objektmodell verweisen.
2. Im VBE wie gewohnt auf Extras -> Verweise -> Microsoft Excel ...
(was ist VBE?)

Mase
06.09.2019, 07:38
zu 1 und 2)
Der erste Satz ist als Aussage zu verstehen.
Der zweite Satz als Maßnahme um 1) umzusetzen.

VBE steht für VisualBasicEditor, also da, wo Du auch ThisDocument findest, nur halt Extras findest über die Symbolleiste.

czil
17.09.2019, 11:53
Ist das Excel ding innerhalb der Worddatei?
Dann kannst du über das ole-object drauf zugreifen.
Verweise setzen gehört aber auch da dazu wenn du nicht late binding verwendest.

halweg
18.09.2019, 16:17
Hier die Feld-Variante:
Öffne die eingebettete Excel-Tabelle.
Markiere die Zelle, die nach Word soll.
Kopiere sie.
Gehe in das Word Dokument.
Füge ein und wähle dabei eine der Verknüpfungsoptionen.
In dem entstehenden Verknüpfungsfeld {LINK...} addierst du den Schalter \t, damit nur der Inhalt der Zelle und nicht ihre Umrandung mit eingefügt wird. Der Schalter \a (bewirkt automatisches Aktualisieren des Feldes) dürfte schon da sein.
Fertig.

In den entstanden Linkfeldern (Feldansicht: Alt-F9) entdeckst du den vollständigen Dateinamen der aktuellen Word-Datei. Falls die Word-Datei portierbar sein soll, müsstest du innerhalb des Link-Feldes diesen Dateinamen durch ein einen Feldverweis auf den Dateipfad {FILENAME \p} ersetzen, dies funktioniert allerdings nur für genau eine Portierung.
An der Lösung dieses Problems arbeite ich noch.

Stefan67!
27.09.2019, 08:36
Sorry, für die lange Pause und danke für Eure Kommentare. Allerdings helfen diese mir aktuell noch nicht wirklich.

Zur Verdeutlichung habe ich jetzt mal eine Datei angehängt. Letztendlich soll sich beim Betätigen des Buttons lediglich die angehängte Exceldatei öffnen.

halweg
27.09.2019, 09:48
Das ist jetzt eine etwas andere Aufgabenstellung, denn normalerweise wird ja so eine Excel-Datei per Doppelklick geöffnet. Und wie gesagt, die Datenentnahme über Felder, wie von mir gezeigt, funktioniert auch ohne Öffnen.

Mase
27.09.2019, 11:01
Sorry, für die lange Pause und danke für Eure Kommentare. Allerdings helfen diese mir aktuell noch nicht wirklich.

Zur Verdeutlichung habe ich jetzt mal eine Datei angehängt. Letztendlich soll sich beim Betätigen des Buttons lediglich die angehängte Exceldatei öffnen.

Jetzt schauts anders aus:

Private Sub CommandButton1_Click()
Call getValFromXlRangeC6
End Sub

Sub getValFromXlRange()
Dim sh As InlineShapes, s As InlineShape
'
Set sh = ActiveDocument.InlineShapes
'
For Each s In sh
With s
If .Type = wdInlineShapeEmbeddedOLEObject Then
If .OLEFormat.ClassType Like "Excel.Sheet*" Then
With .OLEFormat
.Activate
With .Object
MsgBox .ActiveSheet.Range("C7").Value
MsgBox .ActiveSheet.Range("C8").Value
End With
End With
End If
End If
End With
Next
'
Set s = Nothing: Set sh = Nothing
'
End Sub

Stefan67!
27.09.2019, 14:32
Passt, besten Dank Mase.