ExcelVBAとGoogleマップの連携2



The following two tabs change content below.

taka

あることがキッカケでVBAを独学で勉強しました、今ではブログを通してVBAでできることを解説しつつ、VBAや他の言語の勉強、ブログ運営の勉強をしています(^^♪

ExcelVBAとGoogleマップの連携2

どうも。takaです(^^♪ まだ風邪が完全に治ったわけではありませんが、ぼちぼちブログを再開したいと思います ^^) _旦~~

さて、先日【通りすがり】様より【ExcelVBAとGoogleマップの連携】で紹介していたサンプルが使えない、というコメントをいただきましたので確認してみると、本当にWebBrowserコントロールが真っ白になってしまう状態になっていました( ;∀;)スイマセン

これでは前回の記事がまったく為にならない記事になってしまいます(;^ω^)

なので今回は前回の構成を引き継ぎながら使える方法をご紹介していきます(笑)

なぜ前回のフォームが使えなくなったのか?

そもそもなぜ前のプログラムが使えなくなったのか?私が思うに【Googleの仕様変更】が原因だと考えております。プログラムの変更などはしていませんし、同じ仕組みで作った別プログラムも同じく動作していなかったので(;^ω^)

まぁ【WebBrowserコントロール】は【Internetexplorer 7(インターネットエクスプローラー)】(2006年)相当と考えられ、もう11年も前の規格になります。

Googleとしても【これ以上サポートできない】と切られてしまっても何ら不思議ではありませんけどね(;^ω^)

代替え案

さてこのまま使えない状態にするのはいかがなものかということで、正直困りました(´ω`)私自身Javascriptはできないので、、、(苦笑)

そんな私が考えた代替え案ですが、前回の部分からWebBrowserコントロールを【Internetexplorer 11】に置き換えてしまえばいいんじゃないか?

そうすれば前回の仕組みをほとんど変えずに再利用できるのでは?という考えに行き着きました!(^^)!

それにこの代替え案によってスクリプトエラーばかりだった地図もサクサク動きますし、ストリートビューも使用できます!(^^)!

というわけで今回は前回の記事からWebBrowserコントロールの部分をIE11に置き換えて動かすプログラムをご紹介します!

サンプルコード

前回からの変更はExcelファイルだけなのでそれ以外のコードは前回の記事をご覧ください(^_-)-☆
ExcelVBAとGoogleマップの連携

Excelファイルのコードは以下のようになります。

 【Google Maps JavaScript API でサポートされていないブラウザを使用しています。】が表示された場合

 

IEの右上の歯車のマークから互換表示設定を選択してください。

次にイントラネットサイトを互換表示で表示するのチェックが入っている場合チェックを外してください。マップが表示されるはずと思います。

まとめ

いかがでしたでしょうか?とりあえず一応は形になったかなと思っておりますが、なにか別案があればコメントやお問い合わせで案をいただけると助かります(笑)

今回はIEを操作するので【Excelでインターネットエクスプローラーを操作する【準備編】】や【Excelでインターネットエクスプローラーを操作する【実践編】】も観ていただくのもいいかもしれません。

ダウンロード

当サイトの免責事項をお読みになってからお使いください。

ファイルやコードの利用、WEBサイトの利用について

サンプルコードなどは当サイトの免責事項をよくお読みになってからお使いください。

Sponsored Link

 

特別企画!IT企業の実情をIT企業の社長に聞いてみた!

独学者が多いVBAプログラマー「せっかくプログラム言語を覚えたし、IT企業に転職しようかな?でも、IT企業って良いイメージ聞かないし実際はどうなんだ?」という疑問にIT企業の社長に直に聞いてみました!!

4 件のコメント

  • taka様

    記事を拝見させていただきました。一通りご記載の内容で作成したのですが、うまくいきません。
    私は、ネット検索で地道にマクロ作成を行っているような輩ですが、しっかりした勉強も受けておらずコードコピペで何とかマクロをさ作成している程度のモノです。
    この度、Excelで管理している顧客氏名・住所の情報をしようして、簡単にMapを開けないかと思い検索していたところtaka様の記事に出会いました。

    症状としましては、
    Excelの住所が入ったセルをダブルクリックすることでIEは立ち上がりますが、IEには何も表示されません。
    また、Excel上には「オートメーションエラー 起動されたオブジェクトはクライアントから切断されました」と表示されます。
    デバックをかけると、「Do While objIE.Busy = True Or objIE.ReadyState 4」を黄色い背景になり指摘されます。

    理解の苦しむ質問かもしれませんが、ご回答お待ちしております。

    • T.Y1 様

      コメントありがとうございます。

      さて、オートメーションエラーという事で、非常に厄介なエラーで原因特定は結構難しいかもしれません。
      原因の特定ができるか正直怪しいですが、一度実行しているコードを掲載していただけますでしょうか?
      また、OSのバージョン、officeのバージョン、IEのバージョンによっても違いが出てきてしまう為、これらの情報をいただけると助かります。

      • taka様

        早速のご返信ありがとうございます。特定が難しいケースなのですね。ほんとうに、いきなりこんなお問合せをしてしまい申し訳ございません。そのほかにHTMLファイルの作成は、拡張子を表示するようにして確認し、mapdataはプロパティよりjavascriptファイルであることは確認しています。
        以下、ご回答になります。

        OS:windows10 home
        office:office2016
        IE:11
        でございます。Excelシートのコードは以下です。
        Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        Dim strm As New ADODB.Stream
        Dim acbPath As String
        Dim str As String
        Dim strData As String
        Dim objIE As Object

        Set objIE = CreateObject(“InternetExplorer.Application”)
        ‘↓IEを表示する設定
        objIE.Visible = True
        ‘↓開いているブックのパスを取得
        acbPath = ActiveWorkbook.Path

        ‘—–地図情報作成(mapdata.jsに書き込む内容)

        ‘1 地図を表示するズームを数値で設定
        ‘2地図の中心にする住所を設定
        ‘3アイコンを表示する住所を設定

        strData = “var mapzoom = ” & 15 & “;” & vbCrLf & _
        “var places = [” & vbCrLf & _
        “[‘” & ActiveCell.Text & “‘,'” & ActiveCell.Offset(, 1).Text & “‘” & “, 0],” & vbCrLf & _
        “[‘” & ActiveCell.Text & “‘,'” & ActiveCell.Offset(, 1).Text & “‘, 1],” & vbCrLf & _
        “];” & vbCrLf

        ‘——地図情報作成終了

        With strm ‘strData (地図情報)をmapdata.jsに保存
        .Charset = “UTF-8” ‘文字コードの指定
        .Open
        .WriteText strData ‘保存する内容
        .SaveToFile acbPath & “\mapdata.js”, adSaveCreateOverWrite ‘保存先の設定、保存の設定
        .Close: Set strm = Nothing
        End With

        ‘↓IEに表示するHTMLのパスを設定
        str = acbPath & “\index.html”

        ‘↓IEのアドレスを指定
        objIE.Navigate str

        ‘IEが完全表示されるまで待機
        Do While objIE.Busy = True Or objIE.ReadyState 4
        DoEvents
        Loop

        Set objIE = Nothing

        End Sub

        • T・Y様

          そうですね、オートメーションエラーはIEの設定ひとつでも起きえるので、原因を特定するのはとっても難しいです。

          現に私の環境もOffice365(実質2016)のwindow10Hone、IEも11と、T・Y様と同じ環境で実行してもプログラムが動いてしまいました。

          こうなると、例えばIEの保護モードが有効だとエラーになる。
          https://teratail.com/questions/25931
          信頼済みサイトに登録しているとエラーになる。
          https://www.ka-net.org/blog/?p=8673
          などがネットでは紹介されていますのでその様な情報を頼りにひとつづつ試していただく事が解決の近道になるかと思います。

          一度IEの設定をリセットしてみるのも手かもしれません。(保存パスワードなどが消えてしまいますが・・・)

          それともう一度Excelファイルをダウンロードしてみるのもありかもしれません。

          これは個人の体験ですが、「OneDriveフォルダ」だと安定しないということもありました、

          明確なアドバイスができなくて大変申し訳ありません、よろしくお願いします。

          一応ネットの情報をそのまま使って試してみました。
          これでも私の環境では動作しました。これで動けばいいのですが・・・

          ———————-
          Option Explicit
          Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
          Dim strm As New ADODB.Stream
          Dim acbPath As String
          Dim str As String
          Dim strData As String
          Dim objIE As Object

          Set objIE = New InternetExplorerMedium ‘←ここを変えたのみです。

          ‘↓IEを表示する設定
          objIE.Visible = True
          ‘↓開いているブックのパスを取得
          acbPath = ActiveWorkbook.Path

          ‘—–地図情報作成(mapdata.jsに書き込む内容)

          ‘1 地図を表示するズームを数値で設定
          ‘2地図の中心にする住所を設定
          ‘3アイコンを表示する住所を設定

          strData = “var mapzoom = ” & 15 & “;” & vbCrLf & _
          “var places = [” & vbCrLf & _
          “[‘” & ActiveCell.Text & “‘,'” & ActiveCell.Offset(, 1).Text & “‘” & “, 0],” & vbCrLf & _
          “[‘” & ActiveCell.Text & “‘,'” & ActiveCell.Offset(, 1).Text & “‘, 1],” & vbCrLf & _
          “];” & vbCrLf

          ‘——地図情報作成終了

          With strm ‘strData (地図情報)をmapdata.jsに保存
          .Charset = “UTF-8” ‘文字コードの指定
          .Open
          .WriteText strData ‘保存する内容
          .SaveToFile acbPath & “\mapdata.js”, adSaveCreateOverWrite ‘保存先の設定、保存の設定
          .Close: Set strm = Nothing
          End With

          ‘↓IEに表示するHTMLのパスを設定
          str = acbPath & “\index.html”

          ‘↓IEのアドレスを指定
          objIE.navigate str

          End Sub

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です