• 締切済み

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のポップアップが回避できません。 どなたか何とかご教授お願いいたします。

みんなの回答

  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.6

サンプル書きました。 https://gist.github.com/4028479

  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.5

(IEなら)CommandStateChange イベントで FindWindow APIでそのMsgBox のウィンドウハンドルを得られるので、 PostMessage APIでそのハンドルに対してWM_COMMANDを送出。

  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.4

正攻法がある様で。 http://twitter.com/honda0510/status/247110172198187008 だそうです。

shounanokaze
質問者

補足

お返事が遅れまして大変申し訳ございません。他の作業で忙しくご回答で出来ていませんでした。この正攻法は後で試して評価をさせていただきます。

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.3

試していないが、こんな感じでwindow.confirm関数を書き換えるとか。 window.confirm = function() { return true; }

参考URL:
http://okwave.jp/qa/q7429212.html
shounanokaze
質問者

補足

実はこのreturn falseなのでtrueならと私も考えてやってみたのですが、うまく動作しませんでした。お返事が遅くなり申し訳ございません。

  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.2

「VBA IE setTimeout」でググるとか。

shounanokaze
質問者

補足

ヒントを頂きありがとうございます。後で検索して結果をご報告します。

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.1

>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をさわるようなプログラムを作れば できなくはないかもしれませんがウイルスと間違われて対ウイルスソフトが ブロックするのがオチかなと思います。 (というか、しちゃダメです。。。)

shounanokaze
質問者

お礼

お返事が遅れまして申し訳ございません。サイト側が何らかの理由で自動更新を出来ないような工夫を凝らしているのかもしれません。タダログインしてクリックするようなサイトですので何故そのようなことをするのかもわかりませんが、 Siegrune様の回答が大変的を得ていると思います。お返事が遅れまして申し訳ございませんでした。 kumatti1様の真偽を確認した上で評価をさせて頂きますので暫くお待ちください。

shounanokaze
質問者

補足

ちょっと変な話ですが、X軸Y軸が正確に設定できる自動クリックソフトで時間を設定して暫定対処をしています。