Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Access 2016)
フォームのボタンから、複数の単語をグーグルで検索したい。
投稿日時: 17/04/07 02:01:58
投稿者: 縞縞縞

いつも大変お世話になっております。
フォームにボタンを配置して押下すると、IEを新規起動し単語Aと単語Bを
グーグルで検索を行いたいです。IEは別々のウィンドウではなく
一つのウィンドウでタブの切替にしたいです。
 
困っているのは、私が分かる範囲では、下記のコードになりますが、
どのように2つの単語を検索させるかわかりません。
 
どなたかお教えいただけないでしょうか。
よろしくお願い申し上げます。
 
【現在のコード】
  Dim objIE As Object
  Dim varRet As Variant
  Set objIE = CreateObject("InternetExplorer.Application")
  varRet = "http://www.google.com/search?q=" & Me!単語A & "&num=50&hl=ja&filter=0&lr=lang_ja&ie"
  objIE.Navigate varRet
   objIE.Visible = True
 ※ このコードですと単語Bは検索できません。
 
 
 
 

回答
投稿日時: 17/04/07 10:27:10
投稿者: sk

引用:
フォームにボタンを配置して押下すると、IEを新規起動し単語Aと単語Bを
グーグルで検索を行いたいです。

引用:
困っているのは、私が分かる範囲では、下記のコードになりますが、
どのように2つの単語を検索させるかわかりません。

・Google検索における URL パラメータ q に
 複数のキーワードを渡す場合は、それらのキーワードを
 + 演算子で文字列連結する決まりになっている。
 (検索ボックスに複数のワードを半角スペース区切りで入力した場合、
    半角スペースは "+" に置換される形でエスケープされる。
  したがって、VBA においても同じ文字列置換処理を施せばよい)
 
・キーワードに "+" という文字を含めたい場合は
 上記の + 演算子と区別されなければならないため、
 "%2B"(文字コード)に置換する形で
 エスケープ処理を施さなければならない。
 
・同じく "-", "=", "&", "%" といった
 「演算子として用いられる文字」についても
 エスケープ処理を施さなければならない。
 
上記の仕様を踏まえるなら、検索ワードを入力するための
テキストボックスは 1 つあれば充分なのですが。
 
(フォームモジュール)
----------------------------------------------------------------------------
Option Compare Database
Option Explicit
 
Private Sub google検索コマンド_Click()
 
    Dim objIE As Object
    Dim varRet As Variant
    Dim varKeyword As String
         
    varKeyword = fncEscapeKeyword(Me!単語A & " " & Me!単語B)
     
    If varKeyword = "" Then
        MsgBox "検索ワードを入力して下さい。", _
               vbExclamation, _
               "入力エラー"
        Exit Sub
    End If
     
    Set objIE = CreateObject("InternetExplorer.Application")
    varRet = "http://www.google.com/search?q=" & varKeyword & "&num=50&hl=ja&filter=0&lr=lang_ja&ie"
    objIE.Navigate varRet
    objIE.Visible = True
 
End Sub
 
Private Function fncEscapeKeyword(ByVal Keyword As String) As String
     
    '先頭と末尾の余分なスペースは取り除く
    Keyword = Trim(Keyword)
    '演算子のエスケープ処理
    Keyword = Replace(Keyword, "%", "%25", 1, -1, vbBinaryCompare)
    Keyword = Replace(Keyword, "&", "%26", 1, -1, vbBinaryCompare)
    Keyword = Replace(Keyword, "+", "%2B", 1, -1, vbBinaryCompare)
    Keyword = Replace(Keyword, "-", "%2D", 1, -1, vbBinaryCompare)
    Keyword = Replace(Keyword, "=", "%3D", 1, -1, vbBinaryCompare)
    '半角スペースを + 演算子に置換(この置換処理は最後にしなければならない)
    Keyword = Replace(Keyword, " ", "+", 1, -1, vbBinaryCompare)
 
    fncEscapeKeyword = Keyword
 
End Function
----------------------------------------------------------------------------

回答
投稿日時: 17/04/07 11:30:03
投稿者: hatena
投稿者のウェブサイトに移動

縞縞縞 さんの引用:
フォームにボタンを配置して押下すると、IEを新規起動し単語Aと単語Bを
グーグルで検索を行いたいです。IEは別々のウィンドウではなく
一つのウィンドウでタブの切替
にしたいです。

単語A の検索結果と、単語B の検索結果を別のタブで表示したいということでしょうか。
 
だとしたら、下記のリンク先を参考にしてください。
 
リンクを新しいタブで開いて操作する - VBAによるIE自動制御
http://vba-code.net/ie/open-link-in-new-tab/
 
複数の単語をAND条件で検索して一つのタブに表示したい場合は、skさんの回答で。

投稿日時: 17/04/12 10:27:26
投稿者: 縞縞縞

skさん hatenaさん 
 
ご連絡誠にありがとうございます。
単語A の検索結果と、単語B の検索結果を別のタブで表示させたかったため,
hatenaさんのリンクを参考にしました。
 
結果、無事に別タブで検索できるようになりました。
skさんのグーグル検索のパラメータの記載ルールは大変勉強になりました。
 
今後ともよろしくお願い申し上げます。