アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になっています。
エクセルマクロAでBとCのブックを制御したいのですが、
Office2016から Office365にアップした為できなくなりました。
どうすれば制御できるでしょうか。以下詳細です。

A:ブックBとCのセルに値を書く為、Bから起動したエクセルマクロです
B:最初に起動したエクセルブックとなります
C:Webサイトから起動したエクセルブックになります

Office2016の時は Application.Workbooks.count が3だったので、
A、B、Cどのセルにも値が代入できていましたが、
Office365だと2になります。
これを3にする為には、Cを終了。
AまたはBの『ファイル開く』から、Cを起動しなくてはいけません。
んなこと毎回するより、なんらかの方法でCのインスタンスを取得して解決したいのです。

タスクマネージャーで見ると、問題の場合はAB、とCでエクセルが2個。
Cを開きなおした場合は、エクセルが1個になっています。
つまり別インスタンスとなっているCはAから制御できないとなります。

CreateObject("Excel.Application") は使えそうになく、
GetObject(, "Excel.Application")
で取得もうまく行きませんでした。
保存されるCのファイル名の法則性はあると言えばあるのですが、
Open("Cのフルパス") とするのも味気なく、
もっと良い方法でCのインスタンスを取得してCを制御したいのです。
教えて下さい。よろしくお願いします。

A 回答 (1件)

こんばんは


回答が付いていないので 少しだけ
>もっと良い方法
ご質問にある様な方法が比較的良い方法と存じます

すでに出ているような方法以外ですと WindowsAPIで起動Excelを取得して
条件によりターゲットブックを特定し処理すれば出来ますが・・
それなりの処理コードが必要になると思いますね
WindowsAPIを使いますか?
参考(Excelの説明がありましたのでこちらを)
https://www.excel-chunchun.com/entry/enumwindows …

添削例
Sub Test01_ExecExcelWorkbooks()
Dim wb As Variant
Dim sht As Worksheet
For Each wb In ExecExcelWorkbooks()
On Error Resume Next
wb.Activate
Set sht = wb.ActiveSheet
If wb.Name = "CBook.xlsx" Then
sht.Range("A1").Value = "QA"
Exit For
End If
Next
End Sub
    • good
    • 0
この回答へのお礼

WindowsAPIはバリバリ使いこなしています。
ホームページを拝見すると正に答えのような気がします。
実際に試してみます。まずはお礼にて。真にありがとうございます。

お礼日時:2023/05/12 03:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A