- 締切済み
VBAでJAVAをコントロール
javascriptのリンクが、<a href="javascript:void(0);">なんたらかんたら</a> であれば記載のソースが通じるのですが、 【今回の問題】 【html部分】 onclick="javascript:updateDisp();return false;" alt="なんたらかんたら"><input type="hidden" name="allupdate" value="なんたらかんたら"> 【javascriptの部分】 function updateDisp(){ update_flg = window.confirm("なんたらかんたら"); if(update_flg == true){ document.updateForm.submit(); } else{ alert("キャンセルしました。"); } とやられた途端に全く通じなくなりました。 どのように回避したらよいでしょうか。 【今回のではなく前回の(javascript:void(0);)成功分】 Private Sub CommandButton99_Click() Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://xxxx/entry" Do While objIE.Busy = True DoEvents Loop Application.Wait (Now + TimeValue("00:00:03")) objIE.Document.all("ShopShopId").Value = Range("C8") objIE.Document.all("ShopPassword").Value = Range("C9") objIE.Document.forms(0).submit Application.Wait (Now + TimeValue("00:00:05")) For Each Obj In objIE.Document.getElementsByTagName("a") If Obj.innerText = "なんたらかんたら" Then Obj.Click Exit For End If Debug.Print objIE.LocationURL objIE.Navigate "xxxx/entry/entry_tops/all_update?prm=xxxxxxxxxxxxxxxxxxxxxxx" For i = 0 To objIE.Document.Links.Length - 1 If objIE.Document.Links(i).href = "javascript:void(0);" Then Application.Wait (Now + TimeValue("00:00:05")) objIE.Document.Links(i).Click Application.Wait (Now + TimeValue("00:00:05")) Exit For MsgBox "ループ抜け" End If Exit Sub Next Next objIE.Quit End Sub 上記は【今回の問題】に通じません。 'objIE.Navigate.Document.updateForm.fireEvent ("なんたらかんたら") 'objIE.Document.Script.updateDisp "javascript:document.updateForm.submit(true);" など試行錯誤しておりますが、javascriptのポップアップが回避できません。 どなたか何とかご教授お願いいたします。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- kumatti1
- ベストアンサー率60% (73/121)
サンプル書きました。 https://gist.github.com/4028479
- kumatti1
- ベストアンサー率60% (73/121)
(IEなら)CommandStateChange イベントで FindWindow APIでそのMsgBox のウィンドウハンドルを得られるので、 PostMessage APIでそのハンドルに対してWM_COMMANDを送出。
- kumatti1
- ベストアンサー率60% (73/121)
正攻法がある様で。 http://twitter.com/honda0510/status/247110172198187008 だそうです。
- todo36
- ベストアンサー率58% (728/1234)
試していないが、こんな感じでwindow.confirm関数を書き換えるとか。 window.confirm = function() { return true; }
補足
実はこのreturn falseなのでtrueならと私も考えてやってみたのですが、うまく動作しませんでした。お返事が遅くなり申し訳ございません。
- kumatti1
- ベストアンサー率60% (73/121)
「VBA IE setTimeout」でググるとか。
補足
ヒントを頂きありがとうございます。後で検索して結果をご報告します。
- Siegrune
- ベストアンサー率35% (316/895)
>javascriptのポップアップが回避できません。 から、質問が、javascriptのだすポップアップを出さないようにする方法はどうすればいいか? ということなら、 無理です。 window.confirm("なんたらかんたら"); はOSのメッセージボックス(「確認ダイアログ」というのが正しいんでしょうけど)を出す命令です。 sub button1_click() x=msgbox("なんたらかんたら",vbyesno) if x = vbyes then ・・・ end if exit sub というボタンを押したときの処理があって、 msgboxを出さずにxに値を入れて・・・を動かせといっているのと同じです。 button1.click と書いて呼び出しているその中の変数xに外部から値をセットできないし、メッセージボックスを 出せなくできないのと同じです。 (javascript自体を動かしたくなければIE等ブラウザの設定で動かなくできますが、 全部動かないのはお望みではないでしょう。) また、メッセージボックスを出さないようにするだけならOSをさわるようなプログラムを作れば できなくはないかもしれませんがウイルスと間違われて対ウイルスソフトが ブロックするのがオチかなと思います。 (というか、しちゃダメです。。。)
お礼
お返事が遅れまして申し訳ございません。サイト側が何らかの理由で自動更新を出来ないような工夫を凝らしているのかもしれません。タダログインしてクリックするようなサイトですので何故そのようなことをするのかもわかりませんが、 Siegrune様の回答が大変的を得ていると思います。お返事が遅れまして申し訳ございませんでした。 kumatti1様の真偽を確認した上で評価をさせて頂きますので暫くお待ちください。
補足
ちょっと変な話ですが、X軸Y軸が正確に設定できる自動クリックソフトで時間を設定して暫定対処をしています。
補足
お返事が遅れまして大変申し訳ございません。他の作業で忙しくご回答で出来ていませんでした。この正攻法は後で試して評価をさせていただきます。