VBA (Access 2002 から) を使用して Excel 2007 の新しいインスタンスを作成する際に問題があります。
最初は問題を誤解していて、思ったよりも複雑です。
Set myXL = CreateObject("Excel.Application")
新しいプロセスを作成します (そうではないと思っていました) が、それでも奇妙なことが起こっています。OLE を使用して Excel ファイルを SQL Server データベースに保存しています。
これは、Excel ファイルをフォームにバインドする関数です。
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
コンテキスト:
Dim tExcelObjFrame As BoundObjectFrame
Set tExcelObjFrame = OpenExcelObjFrame()
tExcelObjFrame.Verb = acOLEVerbOpen
tExcelObjFrame.Action = acOLEActivate '#3
ad 1 2 番目のプロセスの excel.exe が開始します
広告 2 2番目のプロセスで何が起こっているかを確認するために、この行を追加しました
広告 3 OLE はファイルを既存の Excel インスタンスにバインドし、2 番目のプロセスはここで強制終了されます:/
問題は次のとおりです。
tExcelObjFrame.Action = acOLEActivate が 2 番目のプロセスを強制終了する理由
2番目のプロセスでオブジェクトフレームにExcelファイルを強制的にアクティブにする方法
編集
ここで部分的な説明を見つけました(明確な解決策はありません):
http://www.xtremebbtalk.com/showthread.php?t=292170
- Excel のインスタンスが実行されていない場合、オブジェクトに直接またはプログラムを通じてアクセスすると、OLE によって Excel のインスタンスが作成されます。
- Excel のインスタンスが既に実行されている場合、これは OLE オブジェクトによって使用されるインスタンスです。
問題は、OLE オブジェクトが間違った Excel インスタンスを選択することです。問題は、OLE を特定のインスタンスに向ける方法があるかどうかです。
ここで説明されている同じ問題(解決策はありません):