Excel VBAに関する質問掲示板です。
Excel VBA 質問スレッド No.145 (解決済)
手で新プロセスとしてEXCELを起動した場合と同じ挙動を実装したい
投稿者 : いの 投稿日時 : 2020/12/16(Wed) 16:23:31 OS : Windows 10 EXCEL : その他
分かる方がおられましたらお力をお貸しください。
Excel Version:Office365
EXCEL VBAの実行中に、他のEXCELファイルを編集をしたいことがあります。
既に編集したいEXCELが開いているケースでは、VBAが動作するEXCEL(以下、VBA.xlsmとします)をバッチから/xスイッチ付で実行することで回避しています。
しかし、この方法でも、VBA.xlsmを起動・実行中に別EXCEL(以下、編集.xlsxとします)を開いて編集するケースでは、編集.xlsxがVBA.xlsmと同プロセスになってしまい編集できないという問題が起こります。
確認したところ、/xなしでEXCELファイルを開く場合、最後に開いたプロセスのドキュメントとして追加されるように見えました。
そこで、VBA.xlsmを起動したタイミングで必ず別プロセスで空のBOOKを開いておけば、以降はそのプロセスの方で編集.xlsxが開くのではないかと考え、下記のように実装しました。
●VBA.xlsmのThisWorkbookモジュールに追加
結果は、狙い通り新BOOKが別プロセスで起動しましたが、編集.xlsxを開いたところVBA.xlsmのプロセスに追加されてしまいました。
Applicationの.Visibleと.UserControlが怪しいかと思いTrueを設定してみましたが変わりませんでした。
VBA.xlsmの実行中に手動で/xスイッチで新プロセスのEXCELを起動し、「空白のブック」を作った場合は編集.xlsxが新しいプロセスの方に追加されることは確認済です。
手動で新プロセスを起動した時と同じ挙動をVBA(またはAPI)で実装するにはどうすればよいでしょうか。
VBA.xlsmを高速化することは出来ないという前提でお願いします。
他のアプリを動かすインターフェースとして利用しており、やるのであればVBA以外の方法で実装することになりますが、期間の問題でそれも難しいのでまずは何とか回避する手段がないかをトライしています。
分かる方がおられましたらお力をお貸しください。
Excel Version:Office365
EXCEL VBAの実行中に、他のEXCELファイルを編集をしたいことがあります。
既に編集したいEXCELが開いているケースでは、VBAが動作するEXCEL(以下、VBA.xlsmとします)をバッチから/xスイッチ付で実行することで回避しています。
しかし、この方法でも、VBA.xlsmを起動・実行中に別EXCEL(以下、編集.xlsxとします)を開いて編集するケースでは、編集.xlsxがVBA.xlsmと同プロセスになってしまい編集できないという問題が起こります。
確認したところ、/xなしでEXCELファイルを開く場合、最後に開いたプロセスのドキュメントとして追加されるように見えました。
そこで、VBA.xlsmを起動したタイミングで必ず別プロセスで空のBOOKを開いておけば、以降はそのプロセスの方で編集.xlsxが開くのではないかと考え、下記のように実装しました。
●VBA.xlsmのThisWorkbookモジュールに追加
Private Sub Workbook_Open()
Dim objNewProc As Application
Dim wbNew As Workbook
' 別プロセスを起動
Set objNewProc = CreateObject("Excel.Application")
Set wbNew = objNewProc.Workbooks.Add
End Sub
結果は、狙い通り新BOOKが別プロセスで起動しましたが、編集.xlsxを開いたところVBA.xlsmのプロセスに追加されてしまいました。
Applicationの.Visibleと.UserControlが怪しいかと思いTrueを設定してみましたが変わりませんでした。
VBA.xlsmの実行中に手動で/xスイッチで新プロセスのEXCELを起動し、「空白のブック」を作った場合は編集.xlsxが新しいプロセスの方に追加されることは確認済です。
手動で新プロセスを起動した時と同じ挙動をVBA(またはAPI)で実装するにはどうすればよいでしょうか。
VBA.xlsmを高速化することは出来ないという前提でお願いします。
他のアプリを動かすインターフェースとして利用しており、やるのであればVBA以外の方法で実装することになりますが、期間の問題でそれも難しいのでまずは何とか回避する手段がないかをトライしています。
[返信 1] Re : 手で新プロセスとしてEXCELを起動した場合と同じ挙動を実装したい
投稿者 : ヘンリー 投稿日時 : 2020/12/16(Wed) 17:16:10
私もまだ勉強中の身で、確証はありません。
意図と違っていたら申し訳ありません。
参考になれば幸いです。
>VBA.xlsmの実行中に手動で/xスイッチで新プロセスのEXCELを起動し、
>「空白のブック」を作った場合は編集.xlsxが新しいプロセスの方に追加されることは確認済です。
>手動で新プロセスを起動した時と同じ挙動をVBA(またはAPI)で実装するにはどうすればよいでしょうか。
VBA(API)ではありませんが、
「バッチファイルを手動で起動した時に、意図した通り動く」のであれば、
以下の様に「VBAからバッチファイルを起動する」
という方法はいかがでしょうか。
私もまだ勉強中の身で、確証はありません。
意図と違っていたら申し訳ありません。
参考になれば幸いです。
>VBA.xlsmの実行中に手動で/xスイッチで新プロセスのEXCELを起動し、
>「空白のブック」を作った場合は編集.xlsxが新しいプロセスの方に追加されることは確認済です。
>手動で新プロセスを起動した時と同じ挙動をVBA(またはAPI)で実装するにはどうすればよいでしょうか。
VBA(API)ではありませんが、
「バッチファイルを手動で起動した時に、意図した通り動く」のであれば、
以下の様に「VBAからバッチファイルを起動する」
という方法はいかがでしょうか。
Private Sub Workbook_Open()
Dim strBatFile As String
Dim objShell As Object
strBatFile = "バッチファイル名フルパス"
Set objShell = CreateObject("WScript.Shell")
objShell.Run strBatFile, 1, True
End Sub
[返信 2] Re : 手で新プロセスとしてEXCELを起動した場合と同じ挙動を実装したい
投稿者 : ヘンリー 投稿日時 : 2020/12/17(Thu) 12:17:50
前に挙げたコードに一部訂正がありましたので、
訂正してお詫びいたします。
申し訳ありません。
誤)objShell.Run strBatFile, 1, True
正)objShell.Run strBatFile, 1, False
誤りの方だと、VBA.xlsmの処理が続行しませんでした。
参考url:http://piyopiyocs.blog115.fc2.com/blog-entry-504.html
前に挙げたコードに一部訂正がありましたので、
訂正してお詫びいたします。
申し訳ありません。
誤)objShell.Run strBatFile, 1, True
正)objShell.Run strBatFile, 1, False
誤りの方だと、VBA.xlsmの処理が続行しませんでした。
参考url:http://piyopiyocs.blog115.fc2.com/blog-entry-504.html
[返信 3] Re : 手で新プロセスとしてEXCELを起動した場合と同じ挙動を実装したい
投稿者 : いの 投稿日時 : 2020/12/22(Tue) 11:03:54
>ヘンリーさま
ご回答ありがとうございます。
バッチファイルをRunして無事に親プロセスとなれるExcelが起動しました。
本当に助かりました。
>ヘンリーさま
ご回答ありがとうございます。
バッチファイルをRunして無事に親プロセスとなれるExcelが起動しました。
本当に助かりました。
当掲示板について
- Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
- 記事内ではHTMLのタグは使用できません。
- 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
- Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
- Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
返信入力フォーム
( 処理日時 : 2021-01-27 11:51:29 )