Mit VB auf bereits geöffnete Excel Datei zugreifen

the_hulk

Grünschnabel
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)?
 
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.
 
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
 
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. ;)
 
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.
 
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:
Code:
Dim xls as excel.application 'vielleicht einfach nur Application?
set xls = GetObject("Excel.Application")

gruß
thekorn
 
Re: nich ganz...

Original geschrieben von thekorn
Ich zitiere mal aus der online-Hilfe von VB:

Demzufolge muss es richtig heißen:
Code:
Dim xls as excel.application 'vielleicht einfach nur Application?
set xls = GetObject("Excel.Application")


gruß
thekorn
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)
 
Zurück