ExcelのVBAからEdgeやChromeを操作する方法(その1:初期設定)
ExcelのVBAからEdgeやChromeを操作する方法を紹介します。
「その1」は、VBAの設定と、ブラウザ(Edge)が開くまでの手順を紹介します。
1.はじめに
以前、「iMacros」を使ってブラウザを操作する方法を紹介しましたが、VBAからGoogleChromeやEdgeを操作する方法をみつけたので何回かに分けて紹介したいと思います。
VBAを利用することで、ブラウザ上のフォームデータの入力やを送信もできるようです。
今回は下記の記事前半の手順を詳しく説明したものです。
Excel VBAでSeleniumBasicを使わずにスクレイピングする
2.Microsoft Edge WebDriverのダウンロード
Microsoft Edge WebDriverのサイトにアクセスして、少し下にある「最新バージョン」から、該当のEdgeバージョンのドライバをダウンロードします。
Edgeのバージョンの確認は、ブラウザ右側にある設定アイコンをクリックして、「ヘルプとフィードバック」→「Microsoft Edgeについて」をクリック。
次の画面でバージョン「114.0.1823.58」が表示されました。
さきほどアクセスしたサイトから、これと同じバージョンの該当OSのリンクをクリックしてダウンロード。私が使っているPCはWindowsの64bitなので、ここでは「x64」をクリックしています。
ダウンロードしたアーカイブを展開して、中にmsedgedriver.exeがあることを確認します(あとで利用します)。
Chromeで利用したい場合は、ChromeDriverのサイトからダウンロードしてください。
こちらもバージョンが一致している必要があります。
3.VBA-JSONのダウンロード
VBA-JSONのサイトにアクセスして、「Source code(zip)」または「Source code(tar.gz)」をクリックしてダウンロードします。
ダウンロードしたアーカイブを展開して、中にJsonConverter.basがあることを確認します(あとで利用します)。
4.VBAの設定
メニューにマクロが表示されていない場合は、まずメニューの表示設定をします。
・「ファイル」→「オプション」をクリックして開いた画面の「クイックアクセスツールバー」をクリック。
・左側のリストから「マクロ[マクロの表示]」をクリックして「追加」をクリックし、「OK」をクリック。
→バーにマクロのアイコンが表示される
ここからが本題です。
「表示」タブの「マクロ」→「マクロの表示」をクリック。
画面が開くので、マクロの名前に任意の名称(ここでは「test」)を入力して「作成」をクリック。
「Visual Basic Editor」が開きます。
プロジェクト・エクスプローラ上のツリーから[VBAProject(ファイル名)]を右クリックして、表示されたコンテキスト・メニューから[ファイルのインポート]を選択
[ファイルのインポート]ダイアログが開くので、「JsonConverter.bas」を選択し[開く]ボタンをクリック。
これで、プロジェクト・エクスプローラのツリーにもインポートしたモジュールが追加されます。
続いて、連想配列を扱うDictionary型を利用するための設定を行います。
VBEのメニューバーの「ツール」→「参照設定」をクリック。
「Microsoft Scripting Runtime」にチェックを入れて「OK」をクリック。
5.VBAにコード設定
関数「test」の中に、下記のコードを設定します。赤字の「C:\tmp\edgedriver_win64\msedgedriver.exe」には、2項でダウンロードしたmsedgedriver.exeをフルパスで指定してください。
Chromeの場合は「chromedriver.exe」を設定します。
Sub test()
' WebDriverの起動。デフォルトで9515番ポートを監視
Shell "C:\tmp\edgedriver_win64\msedgedriver.exe", vbMinimizedNoFocus
' ブラウザ起動パラメータの作成
Dim params As New Dictionary
params.Add "capabilities", New Dictionary
params.Add "desiredCapabilities", Nothing
' HTTPクライアントの起動
Dim client As Object
Set client = CreateObject("MSXML2.ServerXMLHTTP")
' 指示の送信
client.Open "POST", "http://localhost:9515/session"
client.setRequestHeader "Content-Type", "application/json"
client.send JsonConverter.ConvertToJson(params)
' 送信完了待ち
Do While client.readyState < 4
DoEvents
Loop
End Sub
実際の画面での追加は下記のようになります。
6.実行
「実行」→「Sub/ユーザーフォームの実行」をクリック。
EdgeまたはChromeが起動して、真っ白なページが表示されれば設定完了です。
sshログインに時間がかかる場合の対処
sshログインに時間がかかる場合の対処方法について紹介します。
1.問題
あるサーバから別のサーバにログインする際、ログインするまでに数十秒かかりました。
時間がかかる原因がわかりません。
ということで、sshログインに時間がかかる場合の対処方法について紹介します。
2.原因
今回は、sshの最初にDNSサーバにアクセスしているのが原因でした。
ホストのネームサーバを設定しているファイル
/etc/resolv.conf
の設定をみると、下記のようになっていました。
# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.0.1
nameserver 192.168.0.10
これらのアドレスにping6を送信しても応答がなく、ここ部分で遅延しているようです。
3.対処
ホストの
/etc/ssh/sshd_config
に、"UseDNS"の項目を無効にする設定を追加します。
変更前(コメントアウト)
#UseDNS yes
変更後
UseDNS no
上記設定後、sshd再起動します。
# systemctl restart sshd
これで解消すれば、sshログイン時にDNSサーバへのアクセスが問題であったことになります。
Movable Typeのコミュニティサイト「MTQ」が2023年7月31日に終了
Movable Typeのコミュニティサイト「MTQ」が2023年7月31日に終了するようです。
この記事で誤解を招かないよう、先にお伝えしておきたいことがあります。
コミュニティサイトは終了しますが、Movable Typeの現状とは何の関係もありません。
当サイトでのMovable Typeプラグインのライセンス購入や、私への開発依頼は、以前と特に変わらず推移しています。
Movable Type自体も、Movable Type 8が2023年秋にリリース予定です。
話を戻して、サイトのメニュー下にサービス終了の案内が表示されています。
過去のログを確認した限りですが、MTQは2011年に運用が開始されているようで、2023年6月6日現在までのトピックとコメントは次の通りです。
- トピック:2375
- コメント:6752
内訳は下の画像のとおりですが、テンプレートやタグについての質問が特に多かったようです。
このコミュニティサイトが立ち上がったときにすぐに登録し、活発にコメントさせて頂いたのはいい思い出です。
またこのサイトで、MTについて勉強させて頂いたことも多々ありました。
最近は新たなトピックも減り、トピックに対するコメントに対する反応も減ってきて、閑散とした状況が続いてました。
減少してきた要因として、推測ですが、個人利用のMTユーザーが減少してきた(=個人ユーザーが躓いたときの質問が減った)のではないかと思っています。
それにしたがい、(私含めて)パワーユーザーからのアクションも減少したように思われます。
それでも他の方が迅速に対応されているのに安心し、油断してしばらくMTQにアクセスしていない時期がありました。
久しぶりに訪れたところ、回答がないトピックが複数残っているのに気がつき、それ以降は定期的にMTQにアクセスして、しばらく一人でコメント対応する時期が続いたこともありました。
が、コミュニティサイトとしての役目を終える時期が訪れたようです。
非常に残念ですが、これも時代の流れでしょう。
最後に、MTQには大変お世話になり、本当にありがとうございました。
個人的な要望として、できればサイトは参照用として残して頂けるありがたいのですが、静かに見守りたいと思います。