http://oshiete1.goo.ne.jp/qa4624451.html
でダイアログボックスへの文字列の挿入を実現して
います。
sendkeysのターゲットを確実に取得したいのですが
どうすればいいでしょうか?
時々、違う窓にsendkeysしてしまいます。
No.4ベストアンサー
- 回答日時:
こんにちは。
昨日、返事をアップロードしてから、調べてみました。
ちょっと勝手なレスになってすみませんが、昨日の回答から、私自身の中では見通しが変わり、結論としては、UWSC などを使わざるを得ないという確信に変わりました。
実は、今までは、「三流」さんのところでも出ていますが、タグとIDをリストに取って、そこから、ひとつずつ当たるという方法をとっていました。自分の開発でも掲示板の回答でも、それほど多くなかったので、失敗したことがなかったのでした。
それで、IEに MS の IE Developer Tools アドオンをインストールして調べてみました。
分かっている人には、当たり前のことだと思うのですが、WebサイトのHTTLコードのサンプルサイトで、二種類の Input Type="File" があり、.Value値があっても、取れるものと取れないものの意味が分かりました。いつかは技術的に取れると思っていましたが、取れないものは、取れないのですね。
http://www.tohoho-web.com/html/input.htm
こちらは取れません。取れるIDなどがみあたりません。
Type="File" の説明に、このように書かれていました。
「ブラウザからWWWサーバーにファイルをアップロードする際に用います。入力フィールドの横には参照ボタンが表示されます。WWWサーバー側にはファイルを受け取るための特別なCGIスクリプトなどを設置しておく必要があります。セキュリティのために、初期値を設定したり、スクリプトで値を操作することはできません。」
http://www.tagindex.com/html_tag/form/input_file …
こちらは、取れるはずです。
こうしてみると、自動化のために、改めて、USWC を使わざるを得ないのかなって思いました。なお、USWCのExcel用の操作は、Proバージョンだそうで、Excelの子ウィンドウへの取得しにくいそうですが、GETACTIVEOLEOBJで、COMオブジェクト名で取得すれば操作できると思いますし、Excelから、直接でなくても、Excel外用のクリップボードに渡す方法もありますし、テキストファイルなどにしてしまっても良いです。今は、組み立ては頭の中だけで、コードにするとまったく違う内容になるかもしれません。
ありがとうございます。
何となく方向が見えてきた気がします。
実際取りかかってまた、いろいろと問題
が出てくると思いますが、そのときは
よろしくお願いいたします。
No.3
- 回答日時:
こんばんは。
>これだとVBAなしで単独で作業ができるように思いましたが。
内容にもよりますが、それも可能ですね。(^^;
>VBAの延長でUWSCを使うとした場合、あくまでメインはVBAとして、Cellの値をUWSCへパラメータで渡すとか?そういうのは可能でしょうか?
可能だと思います。UWSCとExcelの親和性は高いようです。Excelでの使い方も書かれていたと思います。
>UWSCだとダイレクトに file typeのinputに文字が入るってことでしょうか?
それは出来ます。人間の手でPC上で出来ることは、ほとんど出来ます。ただ、手前勝手で恐縮ですが、私の個人としては勉強がてら、もう少し、この辺りを、本当に、出来ないのか、どうなのかを、実際に、VBAだけで挑戦してみたいですね。最近、また、少し、こういうところを新たに勉強し始めたからです。それで、今までのコードを一週間ぐらい掛けて全面的に書き換えました。
どちらかというと、当座の間に合わせにはなるのですが、UWSC側にも、コードで書くことが可能で、AppActivate やWin32APIで、Excel の外のIEに出た時点で、Shell で、UWSCに切り替えればよいかと考えました。(今は、構想だけです)
VBAが書ける人なら、UWSCは、一時間程度で、コードの要領は覚えますから、キーボードマクロ以上の動きをさせることも可能です。なんと、一般的なWin32APIコマンドが搭載されていますから、長いコードを書く必要がありません。
しかし、単にキーボードマクロ程度だけなら、ExcelやIE のWindow の位置を決めれば(つまりWindowを最大にすれば)、そのまま、マウスの動きに合わせて定位置に対して動いていきます。コピー&ペーストも可能です。(素人っぽい方法ですが)
>IEの新規窓が勝手に開いてしまう。三流さんのページの問題もクリアしていると思っていいのでしょうか?
ページの問題というのは、何を指すかはよく分からなかったのですが、新規窓は、Shell.Application で、ヘッダ(LocationName)を取れば、IEオブジェクトが取得できますから、それで操作すればよいと思います。
'-------------------------------------------
Set objShellWindows = CreateObject("Shell.Application").Windows()
For Each w In objShellWindows
If TypeName(w) = "IWebBrowser2" Then
If w.LocationName = "XXX" Then 'ヘッダ名(左上隅のサイトの名称)
Set objIE = w
Exit For
End If
End If
Next
'IEの操作(objIE)
'-------------------------------------------
それと、ここのカテゴリでは、「三流さん」の解決法が多いようですが、IEの場合は、三流さんのところでは、もう一杯一杯ではないでしょうか?Vista+IE7以上になると、どうしても、管理者権限でレジストリをいじらざるを得ないわけです。(Hatenaの質問でもそれが出ていました。)しかし、他の別の質問者では、そういうことは出来ないといわれてしまいましたが、そうするとIEオブジェクトでの処理そのものが、もうお手上げです。
実際のプログラミングでは、あまり、IEオブジェクト(オートメーション)という方法を取らないのかもしれません。たとえば、古いものになるとWinSockやWin32API、新しいところでは、WinHTTPもあります。それが良い悪いというよりも、プログラマとしては、IEのセキュリティを必要としているわけではないし、背に腹は変えられないのだと思うのです。
今、こちらも、同じようなことを試みているもので、つい長くなってしまいました。
こんばんは、お世話になります。
窓が開く件はもう一度探して取ればよかったんですね。
忘れていました。
データ取得に関しては今まではwebbrowserでやってまし
たが最近、MSXML、MSHTMLに変えたところでした。
WinHTTPというのは知りませんでしたが、探ってみます。
とりあえず、UWSCの解説書を注文してしまいました。(笑)
VBのようなIDE環境があるんですね。びっくりしました。
好きなれそうな感じです。
No.2
- 回答日時:
こんにちは。
>INPUT type=file の時はダイレクトで入らないみたいです。
失礼しました。それは、別の問題のようです。
↓以下のサイトで、未解決問題として、Vista のセキュリティで、
http://www.ken3.org/cgi-bin/group/vba_ie.asp
「三流君VBAでIE操作」
「画像を自動でアップしたいので INPUTタグTYPE FILEにファイル名を入れたい。
これも、セキュリティを突破できてません。」
と書かれていました。こちらでは、XP+IE7ですので分かりませんでした。
IEのセキュリティを、VBAでいじってしまう方法などいくつかあるかと思います。
http://support.microsoft.com/kb/884429/ja
Internet Explorer の Web コンテンツのゾーンでセキュリティレベルを設定する方法
私は、VBAで、Webスクレイブはしますが、ついにIEオートメーションはURLをオープンするときだけで、それ以外はやめることにしました。IEオートメーションは、ともとも、アドオンが多すぎて問題が発生するからです。
SendKeys ではうまく行かないのは想像はつくのですが、たとえば、VBAから、UWSCを使ってキーボードマクロで入れる方法もあるかと思います。
この回答への補足
UWSCを入れてみました。
これだとVBAなしで単独で作業ができるように思いましたが。
VBAの延長でUWSCを使うとした場合、あくまでメインはVBA
として、Cellの値をUWSCへパラメータで渡すとか?そうい
うのは可能でしょうか?
また、IEの新規窓が勝手に開いてしまう。三流さんのページ
の問題もクリアしていると思っていいのでしょうか?
ありがとうございます。
http://www.ken3.org/cgi-bin/group/vba_ie.asp
で、IE7の問題はクリアできたのですが、三流さんの
Form内にIEを配置する方法だとsendkeysで指定場所
に値が入らないんです。
UWSCだとダイレクトに file typeのinputに文字が入る
ってことでしょうか?一度、見せていただきます。
No.1
- 回答日時:
こんにちは。
リンク先の回答では、確実にポジションが取れていないので、不安定になってしまいます。
Set objIE = CreateObject("InternetExplorer.Application")
で、アクセスしたら、
ソースから、InputBox のIDの xxx を探して、そこに代入すればよいです。
例
「<input name="IMT" type="text" value="" class="textArea" id="xxx" size="45" maxlength="45">」
objIE.Document.getElementById("xxx").Value = ActiveSheet.Cells(1, 1).Value
のようにすればよいです。
この回答への補足
ご回答ありがとうございます。
通常、そのコードでいけると思うのですが、 INPUT type=file の
時はダイレクトで入らないみたいです。
それで参照ページではsendkeysを使っているのだと思います。
理想はダイレクトなんですが、どちらでもいいので確実に入れられ
ないか考えています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Selenium Basicの件 5 2023/04/10 20:55
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript Javascriptを使ってQRコード読み取り、取得した情報をPOSTしたいと思っています。 1 2023/04/28 15:18
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
実行時エラー 3265「要求された...
-
エクセルマクロエラー「'Cells'...
-
VBAで Set wb = Sheets(1).Cop...
-
Excelでフィルタをかけると警告...
-
エクセルVBAでcode128のバー...
-
エクセルのVBAの標準モジュール...
-
VBAで既に開いている別アプリケ...
-
[VBA]CDOメッセージ送信エラー
-
Shell.ApplicationのNameSpace...
-
PowerPointVBAでスライドマスタ...
-
ある文字列が全て数字であるか...
-
VBAで作成するメール(開封確認...
-
【VB】【エクセル操作】 SaveAs...
-
VBAについてです。 初心者です...
-
VBScriptでのExcelブックのプロ...
-
VBAからPDFファイルにパスワー...
-
VBで引数にDictionaryオブジェ...
-
パワーポイント filedialogでフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
エクセルのVBAの標準モジュール...
-
実行時エラー 3265「要求された...
-
Excelでフィルタをかけると警告...
-
VBAで既に開いている別アプリケ...
-
エクセルマクロエラー「'Cells'...
-
テキストボックス中の文字列の...
-
VBAで Set wb = Sheets(1).Cop...
-
ある文字列が全て数字であるか...
-
VBAからPDFファイルにパスワー...
-
VBScriptでファイルの日時順(降...
-
EXCEL VBA オートシェイプナン...
-
[VBA]CDOメッセージ送信エラー
-
エクセルVBAで2つの画像を比較...
-
PowerPointVBAでスライドマスタ...
-
UserForm1.Showでエラーになり...
-
上下の位置揃えについて
-
VBAについてです。 初心者です...
-
VBAで作成するメール(開封確認...
おすすめ情報