業務効率化

PAD:Excelが既存プログラムで開かれない対策

PADでエクセルを開くメソッドを実行すると、新しいエクセルインスタンスを親として開かれてしまう場合があります。

メソッド詳細からは「新しいExcelプロセス配下に入れ子」にするという設定があります。これは現在開いているエクセルインスタンスを親にしてファイルを開くということです。

これをチェックしなければ、既存のプロセスに入れ子にされるはずなのですが、なぜか新しいプロセスの配下で開かれる場合があります。どうやらバク?のようで、他の設定などを変えてもうまくいきません。この場合はPSスクリプトを使い、既存のインスタンス配下でファイルを開きます。

コード

➤コードはこちら
try {
    $excel = [Runtime.InteropServices.Marshal]::GetActiveObject("Excel.Application")
    $excel.Visible = $true
    $wb = $excel.Workbooks.Open("ここにPADの変数等を入れる:%ExcelFile%")
    $wb.Activate()
    Write-Output "OK"
}
catch {
    Write-Output "Excelが開いていません"
}

開かない理由:Copilotの答え

PAD の Excel アクションは内部的に COM 経由で新しい Excel.Application オブジェクトを作成しているため、既存プロセス(ユーザーが手動で開いている Excel)とは別インスタンスになることが多いです。


「入れ子で開くをオフ」でも完全に既存プロセスに結合できない場合があります。
これは Excel の仕様上、「同じプロセスで開く」ためには、同一 Excel.exe が既に起動済みで、同じ AppDomain に統合される必要があるためです。

-業務効率化