Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
308to312
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
308to312
308to312
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Aufruf in neuer Instanz / 2.ter Versuch

Aufruf in neuer Instanz / 2.ter Versuch
14.09.2003 13:00:47
Björn
Huhu zusammen,

ich hatte vor einer Woche bereits ein Problem beschrieben (https://www.herber.de/forum/archiv/304to308/t306839.htm), zu dem ich immer noch dringend eine Lösung bräuchte. GerdW war so nett, sich dazu bereits Gedanken zu machen, hatte aber letztlich auch keine Lösung. Kann mir irgendeiner der anderen VBA-Freaks hier vielleicht weiterhelfen?

Ich möchte / müßte beim Öffnen einer bestehenden Datei diese NICHT in einer eventuell bereits laufenden Excel-Instanz (mit anderen Arbeitsmappen) laden, sondern in einer neuen XL-Instanz.

Dabei wird die Datei nicht von extern geöffnet (dann keine Schwierigkeit, siehe nur zuletzt L.Vira: https://www.herber.de/forum/archiv/252to256/t254293.htm), sondern über einen Link im Intranet. Das bedeutet, daß die Datei selbst beim Öffnen (Private Sub Workbook_Open()...usw) "entscheiden" muß, sich in einer neuen Instanz zu öffnen. Kann mir hier irgend jemand helfen???

Vielen herzlichen Dank für jede Idee

Viele Grüße

Björn

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Aufruf in neuer Instanz / 2.ter Versuch
14.09.2003 13:45:58
Hans W. Hofmann
Vielleicht hilft Dir ein Artikel weiter in dem
ich eine Funktion "DataLink" vorgeschlagen habe.
Die erzeugt eine neue XL-Instanz...

Gruß HW
AW: Aufruf in neuer Instanz / 2.ter Versuch
14.09.2003 14:08:47
Björn
Hallo HW,

ich habe Deinen Beitrag unter https://www.herber.de/forum/archiv/192to196/t193105.htm gelesen. Ich sehe aber keinen grundsätzlichen Unterschied zu L.Vira 's Funktion, außer, daß die Arbeitsmappe "Datei" unsichtbar geöffnet, ausgelesen und wieder geschlossen wird.

Der Punkt ist hierbei, daß sich Dein Code auf eine *andere* Arbeitsmappe bezieht, nicht aber auf die Arbeitsmappe selbst in der der Code steht. Wenn es über das betreffende Intranet möglich wäre, eine Datei direkt per Link anzusprechen, wäre alles klein Problem. Per VB-Script ist so etwas ja auch grundsätzlich möglich - siehe mein Posting aus 2002: https://www.herber.de/forum/archiv/116to120/t116915.htm . Leider lassen sich die Dateien in diesem Intranet aber nicht nur über Java-scripte ansprechen (ein Link sieht dann zB so aus: http://usw/usw.fetch.doc=Node-ID:01245).

Ich bräuchte also einen Code, der prüft, ob eine Instanz bereits läuft und wenn ja, dann die Datei nicht zur laufenden Instanz hinzufügt. :-(

Hast Du vielleicht noch eine Idee? Vielen Dank!

Viele Grüße

Björn
Anzeige
AW: Aufruf in neuer Instanz / 2.ter Versuch
14.09.2003 14:53:47
Hans W. Hofmann
Du kannst mit GetObject prüfen, ob eine XL-Instanz läüft. WEnn Du keinen Zeiger auf eine Instanz bekommst, dann öffne mit CreateObject eine neue...

Gruß HW
AW: Aufruf in neuer Instanz / 2.ter Versuch
14.09.2003 15:48:38
Björn
Hallo Hans,

Danke für den neuerlichen Hint. Wer lesen kann, ist klar im Vorteil, muß ich mir selbst vorhalten lassen :-). Auf der von mir oben zitierten MS-Seite steht genau das, was ich gefragt hatte! Über Set xlApp = GetObject("Book2").Application kann man die Instanz auswählen, wenn eine Arbeitsmappe mit dem Namen Book2 gerade geöffnet ist. Leider geht das wohl auch nur bei einem Aufruf von außen, also von außerhalb der aufzurufenden Arbeitsmappe. Oder siehst s Du eine Möglichkeit, den Code in das Open-Ereignis einzugliedern? Sobald der Open-Code läuft ist die Zugliederung zu einer Instanz wohl schon geschehen :-(. Trotzdem: Ein Lichtblick. Wenn das über VB-Script umsetzbar wäre, könnte man erst eine neue Instanz aufrufen, den Namen der geöffneten Mappe fetchen und solchermaßen diese neue Instanz zur prädominanten erklären und schließlich die eigentliche Datei öffnen, die dann - zumindest ist das die Theorie jetzt - der neuen Instanz angegliedert werden müßte. Kann vielleicht doch in der Datei selbst eine Weiche stellen, daß sie selbst so verfährt und sich in einer neuen Instanz öffnet?

Danke nochmals!

Gruß

Björn
Anzeige
AW: Aufruf in neuer Instanz / 2.ter Versuch
14.09.2003 16:08:27
Björn
Funktioniert nicht :-(((((((((. Auch von außerhalb hat die Set xlApp = GetObject(Book2).Application Null Wirkung. Die dominante Xl-app ist jeweils die gerade obenauf laufenden.
AW: Aufruf in neuer Instanz / 2.ter Versuch
14.09.2003 16:28:09
Hans W. Hofmann
Hm, mir ist immer noch nicht ganz klar auf was Du abhebst.

Set appXL = GetObject(,"Excel.Application")

Wenn GetObject im einem XL-Modul erfolgt, dann bekommt es die
laufende XL-Instanz. Dann ist

appXL.Application.Hwnd = Application.Hwnd

Wenn ich eine neue Instanz benötige, dann gehe ich mit

Set appXL = CreateObject("Excel.Application")

ran. Was ist jetzt der Entscheider, welches Verfahren Du benötigst?

Gruß HW
Anzeige
AW: Aufruf in neuer Instanz / 2.ter Versuch
14.09.2003 17:13:48
Hans W. Hofmann
Hallo Hans,

ich will eine bestehende Datei in einer neuen Instanz öffnen. Normalerweise ganz einfach mit:

Set xlapp = CreateObject("Excel.Application")
xlapp.Visible = True
xlapp.Workbooks.Open ("C:\Test.xls")

Das geht aber in meinem Fall nicht, weil sich die Datei "Test.xls" auf einem Intranet-Server befindet und ich sie daher nicht direkt ansprechen kann. (Zumindest ist nicht mit dem HTTP-Link + Java-Script-Befehl möglich, über den die Datei sonst aufgerufen wird.) Ich könnte aber zB per
Betrifft: AW: Aufruf in neuer Instanz / 2.ter Versuch
Ach, das Teil soll via HTTP arbeiten?

Was ist dann davon zu halten

<SCRIPT LANGUAGE="VBScript">
<!--
Dim appOffice


Function OpenXL( strPfad )
Set appOffice = CreateObject ("Excel.Application")
appOffice.Visible = true
appOffice.Workbooks.Open strPfad
End Function

-->
</SCRIPT>

Gruß HW
Anzeige
AW: Aufruf in neuer Instanz / 2.ter Versuch
14.09.2003 17:13:48
Hans W. Hofmann
Ach, das Teil soll via HTTP arbeiten?

Was ist dann davon zu halten

<SCRIPT LANGUAGE="VBScript">
<!--
Dim appOffice


Function OpenXL( strPfad )
Set appOffice = CreateObject ("Excel.Application")
appOffice.Visible = true
appOffice.Workbooks.Open strPfad
End Function

-->
</SCRIPT>

Gruß HW
AW: Aufruf in neuer Instanz / 2.ter Versuch
14.09.2003 17:38:31
Björn
Hei Hans,

Ja, an sich ist das schon der Weg. Nur eben: die Datei kann nicht so einfach per http://intranet/usw/meineDatei.xla geöffnet werden. Die Dateien werden nicht per Name auf dem Server abgelegt, sondern per individuell vergebener ID. Ein Link sieht daher auch so aus: http://intranet/usw/usw/doc.fetch=NodeID:3541278. Ich habe keine Ahnung, welche Scripte da im einzelnen laufen. Irgendein Mix aus Javascript und einer serverseitigen Scriptsprache vermutlich. Jedenfalls kann ich das nicht an strPfad übergeben :-(. Da sist das Problem. Also muß ich erst eine weitere Instanz aufmachen und dann zusehen, daß die anschließend geöffnete Datei in dieser neuen Instanz geöffnet wird. *seufz* Warum kann man denn vorgeben, in welcher von mehreren laufenden Instanzen eine Datei geöffnet werden soll? Das muß doch gehen. *argl*.

Viele Grüße

Björn
Anzeige
AW: Aufruf in neuer Instanz / 2.ter Versuch
14.09.2003 18:06:36
Hans W. Hofmann
Ich sehe das so:
Du musst sicherstellen, dass der Zugriff (von wo aus) die Datei definiert speichert und nicht direkt ausführt. Dann greift der Dienstweg...
Handelt es sich um Addin's (wg *.xla)?
Ggf. muss der AutoOpen-Code des Addin oder ein externes Addin Öffnungsversuche aus den temporären Downloadordner überwachen und geeignet reagieren, oder so...

Gruß HW
AW: Aufruf in neuer Instanz / 2.ter Versuch
14.09.2003 18:24:47
Björn
uff..ich werde noch sehr viel Freude haben mit dem Proggie. Das sehe ich jetzt schon :-(. Auf meinem Rechner mit XP scheint die führende Instanz auch anders vergeben zu werden als auf den Firmenrechnern (NT). Bei mir zuhause scheint immer die Excel-Instanz, die gerade den Focus hat, führend zu sein. Bei den Paar Tests in der Arbeit war immer die zuerst geöffnete Instanz führend - egal, welche der weiteren obenauf war. Letzteres Verhalten entspricht auch der Beschreibung auf der MS-Seite. Jedenfalls vielen Dank für Deine Hilfestellungen! Ich hab auf jeden Fall ein Paar Ansatz-Punkte. Ob die Datei ein Add-In sein soll oder nicht, weiß ich übrigens selbst noch nicht so genau. Eigentlich schon. Denn der Anwender soll nur die permanent on Top floatende Userform zu sehen bekommen. Aber es gibt bei einem Add-In Probleme mit den Rückbezügen aus der Tabelle in die Userform. Wenn man in eine Textbox, für doe als controlsource die Zelle tabelle!A1 angeben ist, ein Datum im Format 10-10-03 eingibt, dann bleibt das so stehen, während bei einem xls die Umformatierung in der Zelle zu 10.10.2003 an die Textbox zurückgegeben wird. Warum das so ist - ?. Aber das hat mit dem Problem "in bestimmter Instanz öffnen" bzw. in neuer Instanz öffnen nichts zu tun.

Gruß

Björn
Anzeige
AW: Aufruf in neuer Instanz / 2.ter Versuch
14.09.2003 16:34:49
Thomas Risi
Hi Björn

So ganz verstehe ich nicht was Du da willst, aber ich würde es mit einem MUTEX lösen ...

In der 'Workbook_Open'-Prozedur wird überprüft ob der mutex existiert, und in Abhängigkeit davon weiterer Code ausgeführt. Die zweite xl-Instanz mußt Du mit 'Shell' erstellen und die zugehörige Datei gleich mit öffnen. Dann noch die Mappe in der ersten Instanz schließen. Sollte funzen ...

Gruß
Thomas

Risi Thomas Softwareentwicklung

Anzeige
AW: Aufruf in neuer Instanz / 2.ter Versuch
14.09.2003 17:24:21
Björn
Huhu Thomas,

was bitte ist ein MUTEX ??? *staun* Und warum soll ich die erste Instanz schließen? Ich will die ja gar gerade nicht in irgendeiner Weise tangieren. Die erste Instanz ist die Instanz, in der Anwender Hänschenklein seine schnuckeligen 1+1=2 - Formeln stehen hat. Die will ich ihm nicht nehmen und ich will vor allem nicht, daß der VB-Code, der in meiner xl-Datei (mit userformen) steht (u.a. application.visible = false) auf diese Files angewendet wird. Falls ich das mit "Mutex" hinbekommen kann, wäre ich für jeden Hinweis, was es mit diesem kryptischen Terminus auf sich hat, sehr dankbar!!!

Viele Grüße

Björn
Anzeige
AW: Aufruf in neuer Instanz / 2.ter Versuch
14.09.2003 14:38:58
Björn
Hallo Hans,

ein Weg könnte auch darin bestehen, über den VB-script-Aufruf erst eine neue xl-Instanz aufzurufen (sichtbar oder nicht) und dann erst die eigentliche Datei zu öffnen. Nur leider gliedert sich die zuletzt geöffnete xl-Datei immer der zuerst geöffnete xl-Instanz an, vgl.: http://support.microsoft.com/default.aspx?scid=kb;en-us;288902 .
Gibt es eine Möglichkeit, das zu steuern? Also konkret: beim Aufruf einer xl-datei soll diese der zuletzt geöffneten Instanz angegliedert werden?

Vielen Dank nochmals

Gruß

Björn
Anzeige
AW: Aufruf in neuer Instanz / 2.ter Versuch
14.09.2003 13:46:26
ChrisL
Hi Björn

Erlaube mir auch noch meine bescheidene Meinung zum Thema zu geben.

Grundsätzlich frage ich mich, ob Excel für diese Aufgabe (kenne zwar die genaue Aufgabe nicht) geeignet war. Könnte mir z.B. vorstellen, dass man es besser direkt über eine Online-Datenbank gelöst hätte.

Jedenfalls müsste man schauen, ob es nicht eine Lösung z.B. per Java Script gäbe, also eher mal in einem Webpublish-Forum fragen. Denn ich denke, dass ein Workbook_Open Ereignis vermutlich erst ausgeführt wird, wenn die Datei schon offen ist, womit es eigentlich schon zu spät ist.

Wenn es tatsächlich keine andere Variante gibt, dann sehe ich eigentlich als einzige Lösung den von L.Vira vorgeschlagenen Code weiter zu verfolgen. Man könnte ja auch eine Hilfsdatei öffnen und mit dieser die Hauptdatei im neuen Fenster öffnen, anschliessend automatisch die Hilfsdatei wieder schliessen. Die Tatsache, dass sich die Datei auf einem Intranet Server befindet erschwert die Situation allerdings, da sich die Hauptdatei nicht einfach per Open öffnen liesse sondern erst auch runter geladen werden müsste. Doch auch hier müssten sich mit einem Script beide Dateien gleichzeitig downloaden lassen.

Soeben noch eine andere Idee. Per Open Ereignis kopierst du die Datei aus dem temporären Internetverzeichnis, öffnest die Kopie mit dem von L.Vira vorgeschlagenen Code im neuen Fenster und löschst anschliessend die Ursprungsdatei. Habe sowas allerdings noch nie ausprobiert, weiss also nicht ob es geht.

Aber so oder so würde ich eher mal nach Alternativen ausserhalb von VBA und Excel suchen.

Schönes WE
Chris
AW: Aufruf in neuer Instanz / 2.ter Versuch
14.09.2003 14:20:44
Björn
Hi Chris,

Danke für Dein Posting. Dein Ansatz ist zunächst absolut naheliegend und sicherlich in der Mehrheit aller Fälle auch umsetzbar. Konkret könnte man auch ein VB-Script einsetzen anstatt Javascript - vgl. meinen Beitrag aus 2002 https://www.herber.de/forum/archiv/116to120/t116915.htm . Allerdings werden die Dateien leider in diesem Fall nicht direkt auf dem Server mit Dateinamen abgelegt, sondern mit einer Node-ID. Der Aufruf der Datei erfolgt über eine besondere Javascript Bereitsstellungs-Routine. Daher geht das leider nicht. Jedenfalls ich weiß nicht, wie man das umsetzen könnte.
Dein anderer Ansatz *könnte* funktionieren. Er ist allerdings schon sehr "um die Ecke". Ich bin kein Profi-Coder, aber ich vermute, daß einem Profi die Haare zu Berge stehen würden bei einer solchen Programmierung. Wenn ich nichts finde, bleibt mir gar nichts anderes übrig, als das zu versuchen.

Viele Grüße und auch Dir noch ein schönes WoEn

Björn

82 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige