[[20150420151851]] 『【google map】のルート検索VBAについて』(【みく】) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『【google map】のルート検索VBAについて』(【みく】)

エクセルで3ヶ月前に作成してもらったんですが。。。
なんと!グーグルマップ側の仕様変更?でエラーがでてしまいました。

なんで使えないのか分からないんです。

だれか助けて下さい。泣 ><;

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("G:H")) Is Nothing Then Exit Sub
If Cells(Target.Row, 7).Text = "" Or Cells(Target.Row, 8).Text = "" Then Exit Sub
Dim objIE As Object
Dim tgt1
Dim tgt2

Set objIE = CreateObject("InternetExplorer.application")
tgt1 = Cells(Target.Row, 7).Text
tgt2 = Cells(Target.Row, 8).Text
objIE.Visible = True
objIE.Navigate "http://maps.google.co.jp/maps"
Do While objIE.Busy = True Or objIE.ReadyState <> 4: Loop

'--ルート乗換案内オブジェクトページのの項目をダイレクト書き込み
With objIE.Document
.all("d_launch").Click
Do While objIE.Busy = True Or objIE.ReadyState <> 4: Loop
Application.Wait Now + TimeValue("00:00:02")

'--車で行く〜自社住所〜得意先住所〜検索
.all("dir_d_btn").Click
.all("d_d").Value = tgt1
.all("d_daddr").Value = tgt2
.all("d_sub").Click
.all("d_options_show").Click
End With
Set objIE = Nothing
End Sub

< 使用 Excel:unknown、使用 OS:unknown >


 こちらでは動きますけれど、なんていうエラーが出るのでしょうか。

(Mook) 2015/04/20(月) 16:10


objIE.Busy をチェックしている次の行(2カ所あるようですね)にBreakポイントを設定。これで動かすとどうなるでしょう?

止める事で正常動作するならば、待ち時間が不足していて、HTMLができあがっていないのだと思います。
(次画面に移行した際の完了を、待っていないコーディングになっているため)
(???) 2015/04/20(月) 16:51


.all("d_launch").Click

いつもここで止まってしまいます。涙
原因?グーグルマップがライトモード?になる。(理由があってブラウザーの更新が出来ません)

どなたか他に良い方法は御座いませんでしょうか?困ってます泣
(【みく】) 2015/05/04(月) 19:20


http://www.excel.studio-kazu.jp/kw/20150429195616.html
こちらが参考になるのでは?
(γ) 2015/05/04(月) 20:01

 >原因?グーグルマップがライトモード?になる。(理由があってブラウザーの更新が出来ません) 
 こう言った情報が最初に提示されるとよかったと思います。

 GoogleMap の仕様変更といえば、仕様変更なのですが、PC の環境に合わせてモードが変わるので、
 こちらでは再現しませんでした。

 ここの判定を無理やり覆すよりは、上記の参照先のようにAPIを使用するように変更した方が良いと
 思います。

(Mook) 2015/05/04(月) 21:41


APIを使用するってどうやるんですか?
初心者で全くわからないよぉーーーーーーーーーーー
先生教えて下さーーーーーーーーーーーい
(【みく】) 2015/05/05(火) 10:08

 横から失礼します。

 最近、APIについては下記の質問がありました。

[[20150326105138]] 『開いているメモ帳(複数)の選択範囲の文字列を取得』(のらじろう)

 ???さんは下記のようにも述べられていますのでご留意ください。
 >APIは、自分で調べる能力がない人が使うべきではありませんので、あとはご自分で試行錯誤してください。

 頑張ってください。
(カエムワセト) 2015/05/05(火) 12:43

 ちょっと誤解があるかもしれません。
 GoogleMapに関してAPIと言っているのは、いわゆるWebAPIと呼ばれるもので、
 仕様に沿ったリクエストをサーバーに投げれば、一定の形式のレスポンスが帰るというものです。

 WindowsAPIは、場合によっては、アプリケーションが落ちたり、
 極端な場合はWindowsが不安定になるというリスクがあります。(詳しくありませんが)
 したがって、WindowsAPIはそれなりに知識がある人が触ったほうがよいとも言えるわけです。

 一方、WebAPIは、単にエラーになってリクエストが帰ってこないだけですから、
 ある意味、安全だとも言えます。

 決められた手続きのリクエストをすれば、なんらかの答えが返ってくるという意味では同じでも、
 性質が大分異なります。同じ APIという言葉で一括りにするのは考え物かもしれません。

 もちろん、使う場合に中身をある程度知ることが必要なことには同意しますが。

(γ) 2015/05/05(火) 22:42


 > とりあえず、Mookさんの二つの発言をもとに、 
 > (Mook) 2015/04/30(木) 11:52 
 > (Mook) 2015/05/01(金) 12:44 
 > トライしてみては? 
 > 
 > くれぐれも、参照設定を忘れずに。
 と、あちらのスレッドで書きました。

 (こちらで続けたほうが適切だったかと思います。
   あちらは、maohさんの建てたスレッドでした。)

 ■(Mookさん) 2015/04/30(木) 11:52 は
 その GoogleMAP のAPIを利用したものです。
 URLにリクエスト(出発点、到着点などの場所情報)を含めて送れば、
 XMLという形式のテキストが帰ってきます。
 そのテキストの解読方法も、すでにコード化されています。
 インプットとアウトプットを確認すればよいのです。

 IEを立ち上げる必要もありませんし、そのための機能ですから高速です。
 こうしたリクエスト-レスポンスを目的とした WebAPiが提供されて
 いるわけですから、これを利用しない手はありません。

 ■(Mookさん) 2015/05/01(金) 12:44 は、
 上記のコードに、一行追加してください、という内容です。
 追加そのものは簡単です、一行ですから。

 コードを試してみてはどうですか?

(γ) 2015/05/05(火) 22:45


 maoh さんのスレッドでは GoogleMap を使って距離と時間を求めるのが目的でしたが、
 見返してみると【みく】さんは地図を表示すること自体が目的だったでしょうか。

 >以前は使えたのに使えなくなってしまった理由がわかりません。 
 には一度回答したつもりでしたが、GoogleMap は PC のスペックに応じて 3D モードと
 機能制限されたライトモードが切り替わるようになったので、ライトモードで動作した場合
 機能やWebのデザインが異なるため、以前のマクロでは処理ができません。

https://support.google.com/maps/answer/3031966?hl=ja 「GoogleMap ライトモード」
https://support.google.com/maps/answer/3096703 「GoogleMap 3D や Earth ビューの要件」

 将来のことを考えれば、API を使用したものに書き換えた方が良いと思いますけれど、
 オプション操作はしていませんが、とりあえずこんなところでお茶を濁せないでしょうか。

 モードに関しては、こちらではライトモードにならないので、この形式のURLでの
「?force=tt」の効果は確認できていません。動かなかったら悪しからず。

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Intersect(Target, Range("G:H")) Is Nothing Then Exit Sub
    If Cells(Target.Row, 7).Text = "" Or Cells(Target.Row, 8).Text = "" Then Exit 

    With CreateObject("InternetExplorer.application")
        .Visible = True
        .Navigate "http://www.google.com/maps/dir/" _
            & EncodeURL(Cells(Target.Row, 7).Text) & "/" & EncodeURL(Cells(Target.Row, 8).Text) & "/?force=tt"
    End With
 End Sub

 '//--------------------------------------
 Private Function EncodeURL(ByVal txt As String) As String
 '//--------------------------------------
    With CreateObject("ScriptControl")
        .Language = "JScript"
        EncodeURL = .CodeObject.encodeURIComponent(txt)
    End With
 End Function

(Mook) 2015/05/07(木) 08:36


 関係ないですが、google map繋がりでリンクしておきます。

http://www.excel.studio-kazu.jp/kw/20150529171417.html
(カリーニン) 2015/06/07(日) 09:53


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.