人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

http://q.hatena.ne.jp/1248338268に関連しているのですが、VBAでHTMLのページ内でJavaScriptのConfirm関数で表示されるメッセージのボタンを自動的にクリックするには、どのようにしたらいいのでしょうか?サンプルのHTMLページとして、以下のようなものを知人に作っていただきました。
http://kamicha1.web.fc2.com/Excel/Test20090726.html
このページの OK ボタンをクリックすると、「PDFを表示しますか?」という表示が出るので、その表示の OK ボタンをクリックしたいのです。現在できているコードは、以下のとおりです。

Sub Sample()
Dim objIE As Object
Dim objTag As Object
Dim i As Long

Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
objIE.Navigate2 ("http://kamicha1.web.fc2.com/Excel/Test20090726.html")
While (objIE.Busy = True): Wend ' 表示完了まで待つ
Set objTag = objIE.Document.getElementsByTagName("INPUT")
For i = 0 To objTag.Length - 1
If objTag(i).Value = "OK" Then
objTag(i).Click
'↑ここでClickした後にJavaScriptのConfirm関数で表示されるOKボタンを
クリックしたい
Exit For
End If
Next i
End Sub

以上、ご教授いただけると幸いです。何卒宜しくお願いいたします。

●質問者: tororosoba
●カテゴリ:コンピュータ
✍キーワード:application as Click EXIT HTML
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● HALSPECIAL
●27ポイント

スマートでないですが、SendKeys を使えばできます。


Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub Sample()
  '・・・
 Sleep (1000)  '待ちを入れる
 SendKeys "{enter}", True



SendKeysステートメント

◎質問者からの返答

HALSPECIALさん、ありがとうございます。何が原因かわからないのですが、SENDKeysのENTERが効かないようで、やはりPDF表示まで進むことができません・・・。


2 ● HALSPECIAL
●27ポイント

再回答ですみませんが

Sleep で待ちを入れましたか?

回答では

Sleep (1000) としましたが、

2000とか3000とか待ち時間を増やしても駄目でしょうか?

◎質問者からの返答

HALSPECIALさん、何度もありがとうございます。仰るとおりに数字を調整してみたのですが、やはり問題の箇所で止まってしまっています。


3 ● HALSPECIAL
●500ポイント

何度も済みません。



Option Explicit

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Declare Function GetLastActivePopup Lib "user32" _
 (ByVal hWnd As Long) As Long
Private Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" ( _
 ByVal hWnd As Long, _
 ByVal wMsg As Long, _
 ByVal wParam As Long, _
 ByVal lParam As Long) As Long
 

Public Sub Sample()
 Dim objIE As Object
 Dim objTag As Object
 Dim i As Long
 
 Set objIE = CreateObject("InternetExplorer.Application")
 objIE.Visible = True
 objIE.Navigate2 ("http://kamicha1.web.fc2.com/Excel/Test20090726.html")
 While (objIE.Busy = True): Wend  ' 表示完了まで待つ
 
 
 Set objTag = objIE.Document.getElementsByTagName("INPUT")
 For i = 0 To objTag.Length - 1
 If objTag(i).Value = "OK" Then

' objTag(i).Click
  '↑ここでClickした後にJavaScriptのConfirm関数で表示されるOKボタンを
  'クリックしたい

  '===================================================================
  'VBAからではなく、ページ中のスクリプトで押させる
 objIE.Document.Script.setTimeout "javascript:document.getElementById('popOK').click()", 200
  'ダイアログが表示されるまで待機
 Dim lngDHnd As Long
 Do
 Sleep (200)
 lngDHnd = GetLastActivePopup(objIE.hWnd)
 Loop While lngDHnd = objIE.hWnd
  'OKボタンを押す
 Const WM_COMMAND = &H111
 Dim lngRc As Long
 lngRc = PostMessage(lngDHnd, WM_COMMAND, 1, 0)
  '===================================================================
 
 Exit For
 End If
 Next i
 
End Sub

(参考)

http://q.hatena.ne.jp/1174026115

http://www.happy2-island.com/bbs/bbs.cgi?mode=past&no=488

◎質問者からの返答

HALSPECIALさん、本当にありがとうございました、無事、目的のPDFが開けました!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ