[[20160411115810]] 『IEとJavascriptで作られたシステムをVBAで動かす』(あや) ページの最後に飛ぶ

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

 

『IEとJavascriptで作られたシステムをVBAで動かす』(あや)

 IEとjavascriptで作られたシステムを
 VBAから動かしています

 【IE画面】------------------------------------

 「(テキストボックス)」「参照」

             「登録」「キャンセル」

 ----------------------------------------------
 【動き】
 1 参照ボタンを押すと、エクスプローラが開きます
 2 エクスプローラから必要なファイルを選択する
 3 テキストボックスに、ファイルパスが表示される
 4 登録ボタンを押すとシステム上にファイルが登録される

 この動きをVBAから動かそうとしております
 (2 エクスプローラから必要なファイルを選択する は
  手作業で進めようと思います)

 【実際に動いているVBA】

 	’参照ボタンを押す        
         For Each Obj In ObjIE.Document.forms(0)

             If Obj.Name = "PathFileUpload" Then

                 Obj.Click
                 Exit For
             End If

         Next

 	’エクスプローラから必要なファイルを選択する(手作業)

 	’登録ボタンを押す                      
         Sleep 1000
         For Each Obj In ObjIE.Document.getElementsByTagName("input")

             If Obj.Name = "torokuImageButton" Then

                 Obj.Click
                 Exit For
             End If

         Next

 ここで、問題となっているのは
 登録ボタンを押すと 
 テキストボックスに表示されているパスがクリアされるだけで
 登録されない状態です

 何か考えられることはありますでしょうか

< 使用 Excel:Excel2010、使用 OS:ウィンドウズサーバー2008 >


実際のHTMLを見せてもらわないと何とも…。いろんなやり方がありますから。
普通はSendkeyではなく、ちゃんとHTML(JAVASCRIPT?)が欲している形で条件を与え、ボタンに付けられた名前でクリックする方が確実でしょう。

そもそも、ブラウザ併用の処理は、Excel標準を超えるコーディングなので、自力解決すべき難易度です。頑張って!
(???) 2016/04/11(月) 13:50


Explorerでなくて、ダイアログですね。多分。
ご承知の通り、そのダイアログが表示されてる間はVBAが止まりますので、マルチプロセス辺りで回避します。

Option Explicit

Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Declare PtrSafe Function SendDlgItemMessage Lib "user32" Alias "SendDlgItemMessageA" (ByVal hDlg As LongPtr, ByVal nIDDlgItem As Long, ByVal wMsg As Long, ByVal wParam As LongPtr, lParam As Any) As LongPtr
Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, lParam As Any) As LongPtr
Private Const WM_COMMAND = &H111
Private Const WM_SETTEXT = &HC
Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private s As String

Sub test()

    s = "hoge.txt"
    Dim IE As Object
    Set IE = CreateObject("InternetExplorer.Application")

    IE.Visible = True
    IE.Navigate "URL"

    While IE.busy Or IE.ReadyState <> 4
        DoEvents
    Wend

    With New Application
        .Workbooks.Open(ThisWorkbook.FullName)
        .[A1] = s
        .OnTime Now(), "Proc"
    End With

    '参照ボタンを押す
    For Each Obj In ObjIE.Document.forms(0)
     If Obj.Name = "PathFileUpload" Then
         Obj.Click
         Exit For
     End If
    Next

    '登録ボタンを押す
     For Each Obj In ObjIE.Document.getElementsByTagName("input")
         If Obj.Name = "torokuImageButton" Then
             Obj.Click
             Exit For
         End If
     Next

End Sub

Private Sub Proc()

    Dim hDlg As Long

    While hDlg = 0
        DoEvents
        Sleep 1&
        hDlg = FindWindow("#32770", "アップロードするファイルの選択")
    wend

    s = [A1]
    Sleep 1000&

    SendDlgItemMessage hDlg, &H47C, WM_SETTEXT, 0, ByVal s
    SendMessage hDlg, WM_COMMAND, vbOK, ByVal 0&

    ThisWorkbook.Saved = True
    Application.Quit

End Sub

(kumatti) 2016/04/12(火) 07:11


 遅くなりすみません

 ダイアログかどうかわからないので
 教えていただきたいのですが
 参照ボタンを押すと開いてくるものが

 わたしが他で使っているVBAで
 Application.GetOpenFilename を使ったときと
 同じ画面が開いてきます

 kumattiさんに頂いた記述を動かしてみているのですが
 (中身全部までは理解できていません スミマセン)
 WM_COMMAND0 が青反転して止まります

 ここは、開いてきた画面に何か指示を送っているのでしょうか

 ???さん なんとなくむちゃ振りなのはわかっております^^;
 ここの掲示板はいろんなことをご存じな方が多いので…
 もしかして何かヒントでも頂けたら、など思っております
(あや) 2016/04/19(火) 14:04

コメント返信:

[ 一覧(最新更新順) ]


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