Discussion:
Zugriff von Word aus auf Excel-Zellen via VBA-Makro
(zu alt für eine Antwort)
Conny
2003-07-30 06:09:55 UTC
Permalink
Hallo,

innerhalb eines VBA-Makros in Word möchte ich gerne Daten
aus einer Exceltabelle in Stringvariable einlesen.

Der Aufruf der Tabelle klappt, aber irgendetwas mache ich
beim Zugriff auf die Zellen falsch.


Dim xlApp As Excel.Application
Dim str As String

Set xlApp = CreateObject("Excel.Application")
xlApp.Workbooks.Open "C:\Test\TestTabelle.xls"

'Exceltabelle wird korrekt geöffnet
'Tabelle enthält Tabellenblatt mit dem Namen "Daten"
'Diverse Zugriffsversuche gehen daneben:

str = xlApp.ActiveSheet.Cells(3, 1)
str = xlApp.ActiveWorkbook.Sheets("Daten").Cells(3, 2).Text

Anhand des Error-Handlings kann ich erkennen, dass es sich
um einen "Anwendungs- oder objektdefinierten Fehler"
handelt.

Die MS Excel Objektlibrary habe ich eingebunden.

Arbeitsumgebung: Windows XP, Word 97 und Excel 97

Am liebsten würde ich auf die Zellen mit ihrem in der
Exceltabelle definierten Namen (z.B. "Ort" für die
Spalte 'A') zugreifen.

Hat jemand eine Idee?

Besten Dank für eure Hilfe!

Viele Grüße,
Conny
Peter Fleischer
2003-07-30 08:06:09 UTC
Permalink
Conny wrote:
...
Post by Conny
Set xlApp = CreateObject("Excel.Application")
xlApp.Workbooks.Open "C:\Test\TestTabelle.xls"
'Exceltabelle wird korrekt geöffnet
'Tabelle enthält Tabellenblatt mit dem Namen "Daten"
str = xlApp.ActiveSheet.Cells(3, 1)
Welches ist das aktive Tabellenblatt, wenn du nichts aktiviert hast?
Post by Conny
str = xlApp.ActiveWorkbook.Sheets("Daten").Cells(3, 2).Text
Welches ist die aktive Arbeitsmappe, wenn du nichts aktiviert hast?
Post by Conny
Anhand des Error-Handlings kann ich erkennen, dass es sich
um einen "Anwendungs- oder objektdefinierten Fehler"
handelt.
Die MS Excel Objektlibrary habe ich eingebunden.
Wozu hast du die Bib eingebunden? Bei später Bindung ist das nur wegen
Intellisense und ggf. vordeklarierten Konstanten sinnvoll.
Post by Conny
Arbeitsumgebung: Windows XP, Word 97 und Excel 97
Am liebsten würde ich auf die Zellen mit ihrem in der
Exceltabelle definierten Namen (z.B. "Ort" für die
Spalte 'A') zugreifen.
Hat jemand eine Idee?
Nimm nicht die Objektautomatisierung sondern die Datenbankzugriffsmethoden.
Wenn die Tabelle "sauber" ist, dann funktioniert das bestimmt besser.

Du erhöhst Deine Chance, dass Deine Frage überhaupt gelesen und
qualifiziert beantwortet wird, wenn Du Deinen Realnamen im Absender
einstellst (Vor- und Zuname).

Peter
Peter Fleischer
2003-08-01 15:39:06 UTC
Permalink
Conny Wahl wrote:
...
Es scheitert offensichtlich bereits an der Aktivierung des
Tabellenblatts.
xlApp.Workbooks("TestTabelle.xls").activate
xlApp.Workbooks("TestTabelle.xls").Worksheets
("Daten").activate
Ich versuche es nun via Datenbank. Bin zwar nicht ganz
glücklich damit, aber es scheint zu funktionieren.
Conny,
wenn du nur mit Range-Objekten arbeitest, kannst du auf die Activate-Methode
vollständig verzichten. Das Programm läuft dann schneller und die
Wahrscheinlichkeit, dass ein Anwender dazwischenfunkt, reduziert sich
drastig. Wenn du die Datenbankzugriffsmethoden nutzt, dann sollte die
Excel-Tabelle abolut "sauber" sein, d. h. in jeder Zelle einer Spalte ein
Eintrag von gleichen Typ (entweder nur Zahlen oder nur Text mit Apostroph
beginnend und keine leeren Zellen).

Peter
Conny Wahl
2003-08-06 05:43:07 UTC
Permalink
Hallo Peter,

mit den Range-Objekten klappts!
Vielen Dank!

Conny
-----Originalnachricht-----
....
Es scheitert offensichtlich bereits an der Aktivierung
des
Tabellenblatts.
xlApp.Workbooks("TestTabelle.xls").activate
xlApp.Workbooks("TestTabelle.xls").Worksheets
("Daten").activate
Ich versuche es nun via Datenbank. Bin zwar nicht ganz
glücklich damit, aber es scheint zu funktionieren.
Conny,
wenn du nur mit Range-Objekten arbeitest, kannst du auf
die Activate-Methode
vollständig verzichten. Das Programm läuft dann schneller
und die
Wahrscheinlichkeit, dass ein Anwender dazwischenfunkt,
reduziert sich
drastig. Wenn du die Datenbankzugriffsmethoden nutzt,
dann sollte die
Excel-Tabelle abolut "sauber" sein, d. h. in jeder Zelle
einer Spalte ein
Eintrag von gleichen Typ (entweder nur Zahlen oder nur
Text mit Apostroph
beginnend und keine leeren Zellen).
Peter
.
Loading...