質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Q&A

解決済

2回答

4417閲覧

VBA Chromeを非アクティブで起動

Oaroana

総合スコア57

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

0グッド

0クリップ

投稿2021/12/21 11:18

編集2021/12/22 06:44

前提・実現したいこと

指定のURLをChromeで開いて、「なんやかんや」して、終了のメッセージを出す。というマクロを作成しています。
「なんやかんや」は、問題なく実行できるため、後述のコードからは省いています。

問題は、マクロ終了時にChromeがアクティブなため、メッセージを出してもChromeの後ろに隠れてしまい終了したかどうかが見た目で分かりにくい点です。

理想としては、マクロを実行しているExcelがアクティブのまま、バックグラウンドでChromeを起動できれば、終了メッセージが最前面に出てくると思うのですが…。
最終的にマクロ終了時に終了メッセージが出たことが分かればいいので、途中でChromeがアクティブになり、Excelに戻るなどの動作ができれば、それも有りと思っています。

開きたいリンクが、Chrome以外で正常に開けない不具合があるため、他のブラウザでの代替は考えていません。
また、Seleniumは別途ダウンロードが必要になるため導入は考えていません。

発生している問題

Runメソッドを使用してChromeを起動しようとしましたが、intWindowStyleの引数に、アクティブウィンドウを切り替えない値を使用しているにもかかわらず、chromeがアクティブで起動します。
マクロ終了時までChromeがアクティブなため、メッセージを出してもChromeの後ろに隠れてしまい終了したかどうかがわかりません。

該当のソースコード

visual

1Sub ChromeOpne() 2 Dim HPurl As String 3 HPurl = "https://www.google.com/" 4 Call CreateObject("WScript.Shell").Run("chrome.exe -url" & HPurl, 4) 5 MsgBox ("処理が終了しました") 6End Sub

実際は、変数にURLの書かれたセルの値を入れて開くというマクロですが、このコードだけで動くように書き換えています。

試したこと

以下の記述を処理前に挟んでみましたが、chromeには意味が無いようでした。

visual

1Application.ScreenUpdating = False 2Application.EnableEvents = False

https://docs.microsoft.com/ja-jp/previous-versions/windows/scripting/cc364421(v=msdn.10)
引数の箇所は、こちらのリンクを参考に記述しました。
引数は4の他、7も試しましたが変わりありませんでした。
「すべてのプログラムがこの情報を使用するわけではない」との記述があるので、この方法は使えないのかもしれません…。

補足情報(FW/ツールのバージョンなど)

######Excelバージョン
Microsoft® Excel® for Microsoft 365 MSO (バージョン 2109 ビルド 16.0.14430.20314) 64 ビット
######Chromeバージョン
96.0.4664.110(Official Build) (64 ビット)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bebebe_

2021/12/22 06:40 編集

環境によって動作が変わるかもしれませんが自分の環境だとこのコードだと動作しました。 ただアプリケーションモードになってしまいますが Call CreateObject("WScript.Shell").Run("chrome.exe --app=" & HPurl, 7)
Oaroana

2021/12/22 07:21

ありがとうございます。こちら修正依頼の欄ですが、回答と受け取ってもよろしいでしょうか? 私の環境で実行したところ、唯一、非アクティブで開くことが可能でした! しかし、Chromeの起動有無により挙動が変わりました。これをVBA側で制御するのはやはり難しそうですね。 通常のChromeをブラウザ、アプリモードをアプリと表記します。 ブラウザ終了時→非アクティブ ブラウザ起動時→ブラウザアクティブ ブラウザ起動し最小化→アプリアクティブ アプリ起動時→アプリアクティブ
guest

回答2

0

ベストアンサー

Chromeでの動作終了のタイミングがわかるなら終了後に最前面で表示するようにしてはどうでしょう。

VBA

1Call AppActivate(ThisWorkbook.Name)

投稿2021/12/22 07:20

bebebe_

総合スコア513

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Oaroana

2021/12/22 08:31

ありがとうございます。 引数が(ThisWorkbook.Name)のみですと、「実行時エラー5:プロシージャの呼び出し、または引数が不正です。」というエラーが出ました。 (ThisWorkbook.Name & " - Excel")としたところ、エラーもなくなり、理想通りに動かすことができました。
guest

0

vba

1Call Shell("chrome.exeのパス" & HPurl, vbMinimizedNoFocus)

これでどうでしょう。

投稿2021/12/22 02:48

編集2021/12/22 02:49
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Oaroana

2021/12/22 05:06

ありがとうございます。ですが、やはりchromeが前に出てきます。 Call CreateObject("WScript.Shell")…の代わりに入れて、実行してみました。 元のコードと同様に、chromeがアクティブになりました。マクロ自体は正常に実行できているようです。
退会済みユーザー

退会済みユーザー

2021/12/22 05:33 編集

こちらで試したところ、Chromeのプロセスが存在しない場合は非アクティブで起動し、既にChromeが起動されている場合はChromeがアクティブになるという挙動になりました。 Chromeは複数のプロセスを疑似的に一つのタブ画面に統合しているので、多分起動後に既存のChromeプロセスが存在する場合、Chrome内部でタブに統合するための何か特別な処理が行われるのでしょう。 --new-window オプションをつけて起動すると、タブで開かずに別ウィンドウを開くので、複数起動したいなら、それでいけるんじゃないでしょうか。
Oaroana

2021/12/22 05:53 編集

だめですね… Chromeを終了してからマクロを実行しましたが、新規で起動しExcelの前面にでてきます。 また、--new-windowの挙動は、以下のように違いがありました。 Chrome起動時→新規ウインドウで開く Chrome終了時→起動した際にアクティブなウィンドウの新規タブで開く (起動時動作として、前回開いていたページを開くよう設定しているので、前回終了時に開いていたタブの一番後ろにマクロで開こうとしたページが現れるイメージです)
Oaroana

2021/12/22 06:00

起動時動作をデフォルト(新しいタブ ページを開く)にし、--new-windowオプション有で実行してみました。 結果、Chromeが前面に出てくるのは変わらずでした。
退会済みユーザー

退会済みユーザー

2021/12/22 06:19 編集

こちらの環境だと、 新規で起動する場合⇒非アクティブ 一度も表示してない場合で続けて起動した場合⇒非アクティブ 一度でもChromeを表示させ、Chrome最小化状態で起動した場合⇒アクティブ みたいな感じになりました。環境やChrome自体の設定などにも影響されそうなので、起動オプションから完全に表示を制御するのは無理なのかもしれませんね…SeleniumでChromeを制御するのを一度試されてはいかがでしょう。
Oaroana

2021/12/22 06:18

流れぶった切ってすみません。 Seleniumの使用も考えたのですが、別途ダウンロードが必要なので、導入は難しいと思っています。 VBA一切触れない人に、配布する可能性があるので…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問