既存IEのテキストボックスにEXCELの値を貼り付ける動作が不安定
未読分:3件
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
Message#3 2015年4月16日(木)17時58分 From: 鈴木 | 返事 削除 変更 |
VBAマスターのメッセージ(#2)への返事 ありがとうございました。 今日、実際の作業がこれで実現できました。 随分遠回りをしていたと思いました。VBA初心者なので・・・ > やりたいことって検索ボックスにダブルクリックした値をセットしたいということですか? > わざわざクリップボード経由で入力する必要はないと思いますが。 > > とりあえずクリップボードなしでもOKの場合は以下でもいけるかと思います。 > > > Public objIE As InternetExplorer > > 'ダブルクリックでスタートする > Private Sub Worksheet_BeforeDoubleClick(ByVal Target As range, Cancel As Boolean) > Dim objInpTxt As HTMLInputTextElement > Dim objSh As Object > Dim objWin As Object > > > Cancel = True > > Set objSh = CreateObject("Shell.Application") > > For Each objWin In objSh.Windows > If TypeName(objWin.document) = "HTMLDocument" Then > Set objIE = objWin > Set objSh = Nothing > Exit For > End If > Next > > > Set objInpTxt = objIE.document.getElementsByName("q")(0) > > objInpTxt.value = Target.value > > End Sub |
Message#2 2015年4月15日(水)14時53分 From: VBAマスター | 返事 削除 変更 |
やりたいことって検索ボックスにダブルクリックした値をセットしたいということですか? わざわざクリップボード経由で入力する必要はないと思いますが。 とりあえずクリップボードなしでもOKの場合は以下でもいけるかと思います。 Public objIE As InternetExplorer 'ダブルクリックでスタートする Private Sub Worksheet_BeforeDoubleClick(ByVal Target As range, Cancel As Boolean) Dim objInpTxt As HTMLInputTextElement Dim objSh As Object Dim objWin As Object Cancel = True Set objSh = CreateObject("Shell.Application") For Each objWin In objSh.Windows If TypeName(objWin.document) = "HTMLDocument" Then Set objIE = objWin Set objSh = Nothing Exit For End If Next Set objInpTxt = objIE.document.getElementsByName("q")(0) objInpTxt.value = Target.value End Sub |
Message#1 2015年4月15日(水)13時39分 From: 鈴木 | 返事 削除 変更 |
Excelのテキストをクリップボードに送信し、既に開いているIEのテキストボックスに貼り付けようとしています。 テスト用にhttps://www.google.co.jp/?gws_rd=sslを開いて下記を実行すると →部分で中断する場合と貼り付けまでできる場合があります。 但し、現在は手動で、IEを最上画面にし貼り付け許可をクリックしています。 NGの場合は mystr=””になります。 何か対処方法はありますか? Public objIE As InternetExplorer #If VBA7 Then Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr) #Else Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As Long) #End If 'ダブルクリックでスタートする Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim objInpTxt As HTMLInputTextElement Dim mystr As String Dim objSh As Object Dim objWin As Object Dim winex As Boolean Dim cURL As String Call CBSetText(Target.Value) Cancel = True winex = False Set objSh = CreateObject("Shell.Application") For Each objWin In objSh.Windows If TypeName(objWin.document) = "HTMLDocument" Then winex = True Set objIE = objWin cURL = objIE.document.URL End If Next Set objSh = Nothing objIE.navigate ("about:blank") → mystr = objIE.document.parentWindow.clipboardData.GetData("text") objIE.navigate cURL Call IEWait(objIE) Set objInpTxt = objIE.document.getElementsByName("q")(0) objInpTxt.Value = mystr End Sub Function IEWait(ByRef objIE As Object) Do While objIE.Busy = True Or objIE.readyState <> 4 DoEvents Loop End Function 'クリップボードにコピーする Sub CBSetText(strValue As String) With New MSForms.DataObject .SetText strValue .PutInClipboard End With End Sub |
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降