先日のJTF翻訳セミナーで配布したマクロに、英辞郎 on the Web Pro で検索できるマクロを追加しました。
また、以前から、「【右クリックでGoogle!】串刺し検索用のコマンド例」にて、英辞郎 on the Web Pro で串刺し検索するための方法を紹介していました。
ところが、最近になって 英辞郎 on the Web Pro の仕様が変更になったらしく、毎回ログインを求められるようになってしまいました。
というわけで、いろいろと原因を探っていたところ、Internet Explorer から英辞郎にアクセスすると今まで通りログイン画面が表示されることなく検索結果を表示できることが分かりました。
マクロのコードを紹介します。JTFマクロ集への反映は少しお待ちください。
<目次>
このマクロでできること
文字列を選択してマクロを実行すると、選択した文字列を 英辞郎 on the Web Pro で検索して結果を表示します。
マクロの解説
最近は、VBAでInternet Explorerを操作する方法についての情報が豊富にウェブに出ています。
書籍では、以下の「Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応」がおすすめです。
こういう情報を組み合わせて作りました。
あと、URLをエンコードするための仕組みは、Microsoft MVP のきぬあささんの「64ビット環境でのScriptControlの代わり」を使わせていただきました。
検索のたびにタブが増えてしまい不快に感じている方は、41行目と42行目をコメントにして(行頭に ' を追加)、44行目と45行目のコメントを解除(行頭の ' を削除)してください。
45行目の処理を実行する場合、新しいタブを開かず一番左側のタブに検索結果を表示するようになります。
12行目の処理で、選択範囲の末尾に改行記号が含まれている場合に除外します。文字列を正確に選択するときに MoveEndWhile メソッドは重要な役割をします。
マクロ
Sub 英辞郎_on_the_Web_Pro() Dim objIE As Object Dim objShell As Object Dim objWin As Object Dim URL As String Dim myKeyword As String If Selection.Type = wdSelectionIP Then myKeyword = "" Else Selection.MoveEndWhile Cset:=Chr(13), Count:=wdBackward myKeyword = Selection.Text End If URL = "https://eowp.alc.co.jp/search?q=" & EncodeURL(myKeyword) '------------------------------------------- 'IE起動 '------------------------------------------- 'Shellオブジェクトを作成する Set objShell = CreateObject("Shell.Application") '現在IEが開いている場合には、そのIEをobjIEに設定 For Each objWin In objShell.Windows If objWin.Name = "Internet Explorer" Then Set objIE = objWin Exit For End If Next '現在IEが開いていない場合には、新しくIEを開きobjIEに設定 If objIE Is Nothing Then Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True End If '------------------------------------------- '検索実行 '------------------------------------------- '新しいタブに検索結果を表示する場合 objIE.navigate2 URL, &H800 ' 'タブ1に検索結果を表示する場合 ' objIE.navigate URL Set objIE = Nothing Set objShell = Nothing End Sub Private Function EncodeURL(ByVal sWord As String) As String 'きぬあささんのコード(64ビット対策) 'https://www.ka-net.org/office/of32.html Dim d As Object Dim elm As Object sWord = Replace(sWord, "\", "\\") sWord = Replace(sWord, "'", "\'") Set d = CreateObject("htmlfile") Set elm = d.createElement("span") elm.setAttribute "id", "result" d.appendChild elm d.parentWindow.execScript "document.getElementById('result').innerText = encodeURIComponent('" & sWord & "');", "JScript" EncodeURL = elm.innerText End Function