Frage

Ich habe Probleme schaffen neue Instanz von Excel 2007 mit VBA (von Access 2002).

Zuerst falsch verstanden habe ich das Problem, und es ist komplizierter, als ich dachte.

Set myXL = CreateObject("Excel.Application")

Erzeugt neue Prozesse (ich dachte, es nicht), aber immer noch seltsame Sache passiert. Ich verwende OLE Excel-Dateien in SQL Server databse zu speichern.

Dies ist die Funktion, die Grenzen-Datei in eine Form übertreffen:

Public Function OpenExcelObjFrame() As BoundObjectFrame
    Dim myXL As Object

    Set myXL = CreateObject("Excel.Application") '#1

    Set gTempWorkbook = myXL.Workbooks.Add
    myXL.Visible = True               '#2

    DoCmd.OpenForm "Excel_OBJ"
    Forms("Excel_OBJ").Visible = False
    Forms("Excel_OBJ").RecordSource = "SELECT Excel_File FROM Excel_File_Obj;"
    Set OpenExcelObjFrame = Forms("Excel_OBJ").Excel_File
End Function

Der Kontext:

Dim tExcelObjFrame As BoundObjectFrame
Set tExcelObjFrame = OpenExcelObjFrame()

tExcelObjFrame.Verb = acOLEVerbOpen
tExcelObjFrame.Action = acOLEActivate '#3

ad 1 2. Prozess excel.exe startet

Anzeige 2 diese Zeile hinzugefügt, was auf den zweiten Prozess geschieht

Anzeige 3 OLE begrenzt, die Datei zu Beispiel Excel bestehenden, der zweite Prozess hier getötet wird: /

Das Problem ist also:

  1. Warum das tExcelObjFrame.Action = acOLEActivate tötet den zweiten Prozess

  2. Wie Objektrahmen zu zwingen Excel-Datei in dem zweiten Prozess

  3. aktiviert

Bearbeiten

Ich habe hier teilweise Erklärung gefunden (ohne klare Lösung):

http://www.xtremevbtalk.com/showthread.php?t=292170

  
      
  1. Wenn keine Instanz von Excel ausgeführt wird, erstellt OLE eine Instanz von Excel, wenn Sie auf das Objekt zugreifen, entweder direkt oder durch Programmierung.
  2.   
  3. Wenn eine Instanz von Excel bereits ausgeführt wird, dann ist dies die Instanz, die von dem OLE-Objekt verwendet wird.
  4.   

Das Problem ist, dass OLE-Objekt wählt falsche Instanz übertrifft. Die Frage ist, ob es einen Weg gibt, OLE auf eine bestimmte Instanz zu verweisen.

Das gleiche hier beschriebene Problem (keine Lösung gegeben):

http://groups.google .com / Gruppe / microsoft.public.win32.programmer.ole / browse_thread / thread / 9c4cde2a79453037

War es hilfreich?

Lösung

Update:
Ich habe versucht, Ihren vorhandenen Code auf meinem Arbeitsplatz und:

Set myXL = CreateObject("Excel.Application")

scheint funktioniert wie Sie anfordern.
Ich habe ein Verfahren offen hatte, dann laufe ich diese Zeile und es schafft einen anderen Prozess.

Ich habe ein wenig weiter untersucht, und es stellt sich heraus, dass dies ein bisschen eine Marotte von Excel 2007.
Alles, was ich habe bei gesucht führt mich zurück zu Fenster Dateityp (scroll rechts nach unten) oder Register kerben, die im Grunde sind die gleiche Sache in dieser Situation zu ändern.

Ich weiß, dass in VBA Sie mit Registrierungsschlüssel mit CreateNewKey und SetKeyValue spielen können, aber ich bin mir nicht sicher, dass Sie das tun wollen werden.

Andere Tipps

Sub New_Excel()

'Create a Microsoft Excel instance via code using late binding. (No references required)

Dim xlApp As Object

Dim wbExcel As Object

'Create a new instance of Excel

Set xlApp = CreateObject("Excel.Application")

'Open workbook

Set wbExcel = xlApp.Workbooks.Open("Book1")  'or you may place here the complete name and path of the file you want to open upon the creation of the new instance

'Set the instance of Excel visible. (It's been hiding until now)

xlApp.visible = True

'Release the workbook and application objects to free up memory

Set wbExcel = Nothing

Set xlApp = Nothing

End Sub

Ich hatte ähnliche Probleme nur, wenn mehrere Arbeitsmappen in einzelnen Excel 2007-Instanzen zu öffnen versuchen -. In Excel 2003 das funktionierte gut, aber jetzt sind sie alle offen in der gleichen Instanz

Ich weiß nicht, ob dies Ihr Problem zu lösen, aber ich regelte es (oder war es die Art und Weise arbeiten, ich wollte!) Indem ich Excel nicht DDE (Optionen zu verwenden, Advanced, General, ignorieren andere Anwendungen, die verwenden DDE). Beachten Sie, wenn Sie dies tun, müssen Sie alle Dateitypen im Explorer ändern, die Excel starten, da sie standardmäßig DDE verwenden - bearbeiten Sie die Datei Optionen, deaktivieren Sie die Option „DDE verwenden“, und fügen Sie „% 1“ bis zum Ende des Befehlszeile.

(eigentlich glaube ich, dass vielleicht einen Kommentar von Andy Antwort beantworten, in dem nur eine Excel-Instanz erstellt wurde, aber nicht unbedingt mit der ursprünglichen Frage helfen, wo mehrere Instanzen ist geöffnet)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top