dポイントプレゼントキャンペーン実施中!

http://oshiete1.goo.ne.jp/qa4624451.html

でダイアログボックスへの文字列の挿入を実現して
います。

sendkeysのターゲットを確実に取得したいのですが
どうすればいいでしょうか?

時々、違う窓にsendkeysしてしまいます。

A 回答 (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外用のクリップボードに渡す方法もありますし、テキストファイルなどにしてしまっても良いです。今は、組み立ては頭の中だけで、コードにするとまったく違う内容になるかもしれません。
    • good
    • 0
この回答へのお礼

ありがとうございます。

何となく方向が見えてきた気がします。
実際取りかかってまた、いろいろと問題
が出てくると思いますが、そのときは
よろしくお願いいたします。

お礼日時:2009/11/15 17:00

こんばんは。



>これだと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のセキュリティを必要としているわけではないし、背に腹は変えられないのだと思うのです。

今、こちらも、同じようなことを試みているもので、つい長くなってしまいました。
    • good
    • 0
この回答へのお礼

こんばんは、お世話になります。


窓が開く件はもう一度探して取ればよかったんですね。
忘れていました。


データ取得に関しては今まではwebbrowserでやってまし
たが最近、MSXML、MSHTMLに変えたところでした。
WinHTTPというのは知りませんでしたが、探ってみます。


とりあえず、UWSCの解説書を注文してしまいました。(笑)
VBのようなIDE環境があるんですね。びっくりしました。

好きなれそうな感じです。

お礼日時:2009/11/14 22:29

こんにちは。



>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の新規窓が勝手に開いてしまう。三流さんのページ
の問題もクリアしていると思っていいのでしょうか?

補足日時:2009/11/14 18:49
    • good
    • 0
この回答へのお礼

ありがとうございます。

http://www.ken3.org/cgi-bin/group/vba_ie.asp

で、IE7の問題はクリアできたのですが、三流さんの
Form内にIEを配置する方法だとsendkeysで指定場所
に値が入らないんです。

UWSCだとダイレクトに file typeのinputに文字が入る
ってことでしょうか?一度、見せていただきます。

お礼日時:2009/11/14 15:30

こんにちは。



リンク先の回答では、確実にポジションが取れていないので、不安定になってしまいます。

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を使っているのだと思います。

理想はダイレクトなんですが、どちらでもいいので確実に入れられ
ないか考えています。

補足日時:2009/11/14 12:43
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!