# Mit VB auf bereits geöffnete Excel Datei zugreifen



## the_hulk (2. August 2004)

hi leute 
hab ein kleines Problem

Ich würde von vb aus gerne in eine bereits geöffnete Excel Datei schreiben.

Wenn ich folgenden Code benutze funktioniert es auch:

Sub testsub()
  Dim x1 As New Excel.Application
  x1.Workbooks.Open "irgendein file"
  x1.Range ("a1")= "test"
end sub

hierbei muß ich die datei jedoch immer neu öffnen.

wie kann ich dem x1 denn eine bereits geöffnete datei zuweisen (dateiname bekannt)?


----------



## Retlaw (2. August 2004)

Da du ein neues Excel-Objekt erzeugst kannst du mit dieser Instanz nicht auf andere Instanzen zugreifen.
Du könntest höchstens versuchen anstatt mit new ein neues Objekt zu erzeugen dir das gerade laufende zu holen und damit zu arbeiten oder das laufende Excel per DDE ansteuern.


----------



## the_hulk (2. August 2004)

genau das ist ja mein Problem. Wie komme ich an das laufende Excel Programm ran

Hatte es auch schon ohne new versucht jedoch weiß ich nicht wie ich dem x1 z.b. die bereits geöffnete Datei z.b. "test.xls" aus dem verzeichnis "c:\test.xls"

hatte auch schon was mit getobject ("c:\test.xls") versucht, haut aber auch nicht hin


----------



## Retlaw (3. August 2004)

Eine bereits laufende Instanz anzusprechen hab ich auch noch nicht hinbekommen. Aber vielleicht hilfts dir was wenn du ein Excel-Objekt mit new erzeugst, es sichtbar machst und den Anwender damit arbeiten lässt. Dein Programm wartet dann bis er fertig ist und kann dann darauf zugreifen.

Falls du rausfindest wie man an die laufende Instanz kommt poste es bitte, würd mich auch interessieren.


----------



## Lutz-Hamburg (5. August 2004)

*Laufende Excelinstanz holen*

Hi,
versuche es mal mit

Dim xls as excel.application
set xls = GetObject("","Excel.Application")

So (oder so ähnlich) bekommst du eine laufende Excelinstanz als Referenz zurück. Wenn mehrere Instanzen laufen, hast Du ein Problem. 

Sorry, kann sein, dass die Syntax nicht ganz richtig ist, habe lange kein VB Code mehr geschrieben.


----------



## thekorn (5. August 2004)

*nich ganz...*

Ich zitiere mal aus der online-Hilfe von VB:


> Ist pathname eine Null-Zeichenfolge (""), so gibt GetObject eine neue Instanz des Objekts vom angegebenen Typ zurück. Wird das Argument pathname nicht angegeben, so gibt GetObject ein momentan aktives Objekt vom angegebenen Typ zurück. Existiert kein Objekt vom angegebenen Typ, tritt ein Fehler auf.



Demzufolge muss es richtig heißen:

```
Dim xls as excel.application 'vielleicht einfach nur Application?
set xls = GetObject("Excel.Application")
```

gruß
thekorn


----------



## Retlaw (5. August 2004)

*Re: nich ganz...*



> _Original geschrieben von thekorn _
> *Ich zitiere mal aus der online-Hilfe von VB:
> 
> Demzufolge muss es richtig heißen:
> ...


Danke für den Tipp, wenn man jetzt noch ein Komma vor "Excel.Application" setzt funktionierts.  (Das Komma ist notwendig damit VB erkennt das es sich um den zweiten Parameter handelt, der erste soll ja nicht übergeben werden)


----------

