質問内容
下記のような質問が来ました。
WEBサービスを利用して 語学勉強しています。
翻訳サービス結構便利に使っています。VISTA OS EXCEL2007 から 次のマクロでリンクさせていますが、現在うまくゆきません。
URL = "http://www.excite.co.jp/world/spanish/"
objIE.Visible = True
'objIE.Visible = False
objIE.navigate URLWith objIE
While .Busy
Wend
End WithApplication.Wait (Now + TimeValue("0:00:05"))
TEXT = Cells(NN, 1)
strTEXT = TEXT
If strTEXT = "" Then GoTo JUMP:
objIE.Document.all.wb_lp.SelectedIndex = 2 ''''' SPEN SELECTION
objIE.Document.all.Before.Value = strTEXT ''''' 原文 代入
objIE.Document.all("t-submit").Click ''''' 翻訳 ボタン クリック
ここまではまともに機能しています。With objIE
While .Busy
Wend
End WithApplication.Wait (Now + TimeValue("0:00:02"))
For KKK = 1 To 5
DoEvents
Application.Wait (Now + TimeValue("0:00:01"))
''''' If Left(objIE.Document.all.After.Value, 20) <> "こちらに翻訳後の文章が表示されます。 " Then Exit For ''''' 2006/01/26
Application.StatusBar = " HTML Receiving ....." & NN & "Waiting.... " & KKK
Next KKKApplication.Wait (Now + TimeValue("0:00:02"))
Application.Wait (Now + TimeValue("0:00:02"))
strTEXT = objIE.Document.all.after.Valueここで止まります。実行時エラー438
オブジェクトはこのプロパティ
メソッドをサポートしていません。Cells(NEND + 2 + NN, 1) = strTEXT
objIE.Visible = False
JUMP:
このために 訳文章を取り出せません。
貴殿の動画サイトにおいても 日本語→韓国語 変換において時間待ち調整しておられたようですが、
従来は XP excel2003 からアクセスしていました。
結構長期間作業していたのですが、翻訳サイト側が変化したのかも知れません。
旧のソースを保存しているわけでもありません。従来は 翻訳の完了を
"こちらに翻訳後の文章が表示されます。 " メッセージの消滅で判断していました。
今回 翻訳文章の取得ができないから このチェックができません。
デバック
デバックしてみた。
http://www.excite.co.jp/world/spanish/
を操作して、翻訳後のソースを見てみました。
なんか相手のミスかもしれないけど、
変換後のページに
afterが複数(2つ以上)あるみたいですね。
ほしいのは、 <div class="taTab">訳文</div> <textarea name="after" id="after"> </textarea> </div> なのに、 <input type="hidden" id="my-after" name="after" value=""> や <input type="hidden" name="after" id="pr-after" value=""/> があるので、 そのまま strTEXT = objIE.Document.all.after.Value で、取得できないみたいです。
同じ名前が
複数ある時は
手前みそですが、
三流君VBA:VBAからIE操作 NAMEが同じフォームの項目へデータをセットする
http://www.ken3.org/vba/backno/vba176.html
このあたりを参考にして
strTEXT = objIE.Document.all.after.Value
を
strTEXT = objIE.Document.all.after(0).Value 'document.all.q(0)をテスト
や
strTEXT = objIE.document.all("after")(0).Value 'document.all("q")(1)をテスト
で
セットしてみては?
何かの参考となれば、幸いです。
無事に動作することを願いつつ、失礼します。
三流プログラマー Ken3