uwscでwebページ内のテキストボックスにカーソルを置く方法

このQ&Aのポイント
  • uwscを使ってwebページ内の検索などのテキストボックスにカーソルを置く方法を教えてください。
  • 日報システム(html)の日付テキストボックスで値を入力しても元に戻ってしまう問題について、解決方法を教えてください。
  • KBDで日付を入力しているが、テキストボックスを直接指定して値を入力する方法があれば教えてください。
回答を見る
  • ベストアンサー

uwsc webページ内のテキストボックス

みなさんこんばんわ。 uwscを使ってwebページ内の検索などのテキストボックスにカーソルを置きたいのです。 KBDで文字を打ち込めるようにテキストボックスを編集状態にするにはどうすれば教えてください。 具体的には、 私の会社の日報システム(html)で日報を入れる日付テキストボックスがあるのですが、日付のテキストボックスだけvalueで値を入力しても元に戻ってしまうのです。html解析スクリプトで調べると、outerhtmlと書いてあり、何か動的に書き変わるしかけがあるようなのですがよくわかりません。しかたがないのでKBDで日付を入力しています。domというのでしょうか、ie.doc.elements(i).value="yyyy/mm/dd"のようにテキストボックスを指定して直接値を入力できればベストなのですが… よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

たびたび大変失礼をしました。 エレメント名を調査する方法が間違いでした。 前に紹介したスクリプトはオブジェクトへのアクセス方法でした。 以下の方法が原始的ですが、フォーム内のエレメント名を調べる方法を推奨します。 そもそも、テキストボックスはフォームの中に存在する訳なので、フォームを指定してあげて、その中のテキストボックスを全て表示すれば良い。 IEのウインドウ内のフォーム総数はIE.document.forms.lengthで求められます。 フォームの中のエレメント総数はIE.document.forms[番号].elements.lengthで求められます。 以下のスクリプトならIEで[番号]に指定されたフォーム番号のエレメント名が全て表示されます。 故に、フォーム番号を0から片っ端から入力して調査すれば、下のスクリプトでいずれ貴殿の探しているテキストボックスのエレメント名が解る筈です。 エラーで止まっても、UWSCに付属している小さなウインドウでエレメント名が出てくるので、これを使えばokです。 先ほど、佐川急便のフォームで試しました。エラーで止まりましたが、ウインドウのなかにエレメント名がばっちり残ってました。 但し、システム上でUWSCのアクセスを弾くなど、エレメント名を隠す加工がなされていれば、無理なのでごめんなさい。 ウインドウ名の入力は、前の答えのウインドウ名を調査するアプリを使って下さい。 //フォーム番号を0~いっぱい順序で入れて数回に分けて片っ端から調査して下さい。 UL1 = input("開いているウィンド名を入力") IE = GETACTIVEOLEOBJ("InternetExplorer.Application",UL1)//指定したウィンド名のIEを制御 IE.visible=TRUE REPEAT SLEEP(0.1) UNTIL !IE.BUSY AND IE.READYSTATE = 4 FBANGOU = input("要素数を調査したいフォーム番号を入力") 番号 = VAL(FBANGOU) KOSUU = IE.document.forms[番号].elements.length MSGBOX(KOSUU) FOR x = 1 to VAL(KOSUU) Ifb x > VAL(KOSUU) then MSGBOX("終了") EXITEXIT endif NAIYOU = IE.document.forms[番号].elements[x].name print NAIYOU next 追記:フォーム総数は、以下で求められます。 UL1 = input("開いているウィンド名を入力") IE = GETACTIVEOLEOBJ("InternetExplorer.Application",UL1) IE.visible=TRUE REPEAT SLEEP(0.1) UNTIL !IE.BUSY AND IE.READYSTATE = 4 KOSUU = IE.document.forms.length MSGBOX(KOSUU) 総括:わかりにくかったと思うので、私が実際に行った方法を最後に記します。 (1)調査したいIEのwebアプリの画面を開く。 (2)開いたIEのwebアプリの画面のフォーム総数をスクリプトを使って調べる。 (3)開いたIEのwebアプリの画面内に存在するフォームの数だけ、エレメント名の調査を行う。(例:フォーム数5と出たら5回。念のために0を含めた0から5を入力) (4)エラーで出ても、めげずにprint関数を使ったUWSCのウインドウでエレメント名を拾う。 (5)エレメント名から法則性を推測する。 (6)法則性を理解したら、ID番号+エレメント名など入力するデータをエクセルで作成する。 (7)IESETDATA関数を使って、直接入力する。 終了です。

donkun2004
質問者

お礼

redcrow_TXさん、お返事が大変遅れてしまい申し訳ありませんでした。仕事上大事な試験があって、勉強漬けの日々を送っていました。遅れてごめんなさい。そして本当にありがとうございます。redcrow_TXさんのように、赤の他人のために親切に回答してくれる人が居るだけでうれしいです。説明の内容を試してみます。本当にありがとうございました。これからも困っている人を助けてあげられる人であってください。ありがとう。

その他の回答 (2)

回答No.2

すいません。補足します。 尚、IEはバージョンによって、ウインドウ名が異なります。 ウインドウ名の取得プログラムも優秀な方が作られたプログラムを拝借して調べました。 私は”デスクトップ ウィンドウ クラス名 タイトル 取得 プログラム”と入力して検索しました。 直リンを貼るとNGっぽいので、ごめんなさい。 >何か動的に書き変わるしかけがあるようなのですがよくわかりません 蛇足がかなーり入ってますが、エクセルでセルA2から続くデータを、B2に入っているID等の番号で管理されたエレメントに入力する例文です。 これをこんな形で答えたのは、世の中のIEを用いて作られたアプリの大半は、IE上で生成されるフォームのテキストボックスに入力する事になってますが、困ったことに場合によってはフォーム上のテキストボックスの位置は座標がマチマチで、ダイレクトに入力する他なく、ダイレクトに入力する方法は、エレメントを知らなければ難しいからだと思ったからです。 が、嬉しい事にプログラマーの方々は殆どの場合、ID番号+エレメント名などの法則性を使っている為、これを逆手にとってエクセルのセルにIDを入れ、当該ID&エレメント名とすれば、解決できると思ったからです。(私はこれで解決させました。勿論、『エレメント名&ID&エレメント名』・『エレメント名&ID&日付』などもあります。 日付は GETTIME() TIME=G_TIME_YY4+"年"+G_TIME_MM2+"月"+G_TIME_DD2+"日"+G_TIME_HH2+"時"+G_TIME_NN2+"分"+G_TIME_SS2+"秒" を使えばTIMEが現在の時間として取得処理出来るので、日報関係ならどうでしょうか?) 更に、動的部分がIE上に表示されている文章等を用いている法則性なら SENDSTR(0,IE.document.body.innerTEXT) SCKEY ( GETID("Microsoft Excel","XLMAIN",  0.1) ,  VK_CTRL, V) として、クリップボード経由でエクセル上に表示されている文章を落としてしまうことも推奨します。 その上で、法則性の部分を抽出して下記の内容で処理したら如何でしょうか? 回数 = input("繰り返す回数を入力してください。") FOR x = 1 to VAL(回数) IE = GETACTIVEOLEOBJ("InternetExplorer.Application","●●●- Windows Internet Explorer")//指定したウィンド名のIEを制御→●●●は例です。 Excel=GETACTIVEOLEOBJ("Excel.Application") val1=Excel.ActiveSheet.Cells(x+1,1).Value//エクセルのA2セルから下に掛けてフォームに入力したいデータを入れます。 val2=Excel.ActiveSheet.Cells(x+1,2).Value//動的法則性を把握して、B2のセルから下に掛けて管理されている法則のID等のデータを入れます。 val3=trim(val2) bo1="▼▼▼"+val3//▼▼▼は例です。エレメント名を作ります。例えば、動的でIE上でエレメント名が都度異なる場合には、これが有効だと解りました。 print bo1 IESETDATA ( IE , val1, bo1 ) next MSGBOX("終了です。)

回答No.1

私も同じ内容で従前迷ってました。 IESETDATAを使って解決させました。 構文は、UWSC本体のヘルプに出てます。 エレメント名の解析スクリプトは、たしか http://siromasa.xxxxxxxx.jp/Sample/index.html で拾いました。 2010/12/03 [Module] Windowアイテム・オブジェクト・イメージ・スクリプト取得 ⇒ Module_GetsDX2.uws が其れです。非常に優秀な方が作られたと思っております。 このスクリプトを使用すると、或る程度の解析が出来るので、非常に優れたスクリプトだと思います。

関連するQ&A

  • 日付型のテキストボックスに数値を入れて日付にしたい

    アクセスのフォームの上にテキストボックスがあり、 書式はyyyy/mm/dd(aaa)になっています。 日付型の値を入力した際は問題ないのですが 例えば、20130720と入力したら、 このフィールドに入力した値が正しくありません。 例えば、数値型のフィールドに文字列を入力しました。 となります。 なので、 Private Sub 日付_BeforeUpdate(Cancel As Integer) If Len(Me.ActiveControl.Value) = 8 Then Me.ActiveControl.Value = Format(Me.ActiveControl.Value, "yyyy/mm/dd") End If End Sub としてみたのですが、 更新前処理イベントが発動する前に、 「このフィールドに入力した値が正しくありません。 例えば、数値型のフィールドに文字列を入力しました。」 のエラーが出てしまうようです。 20130720の形の日付を入れても自動で日付型に変換するの方法はありますか?

  • エクセルVBA フォームのテキストボックスの入力規則

    エクセル2000を使用しています。 VBAでフォームを作成しています。日付の入力項目をテキストボックスで 作りたいのですが、”yyyy/mm/dd”の形式で入力するようテキストボックスの中に表示し、それ以外の入力形式を制限するにはどのようにしたらよいでしょうか。

  • VBA テキストボックスで日付を変更するとエラー

    VBAにて、ユーザーフォーム上のテキストボックスに初期値として今日の日付が入力されており、さらにそれを任意で変更するというマクロを作成しようとしています。 'テキストボックス2に初期値として今日の日付を入力 Private Sub UserForm_Initialize() TextBox2.Text = Format$(Date, "yyyy/mm/dd") End Sub 'テキストボックス2に入力された日付はdenpyoudateという変数に格納される Private Sub TextBox2_Change() denpyoudate = UserForm2.TextBox2.Value End Sub 入力された日付を変数として利用したいので、上記のようなコードにしたのですが、実際に初期値である今日の日付を編集すると「型が一致しません」というエラーが出てしまいます。 このエラーを回避し、テキストボックスに入力された日付を変数として使用するにはどうすればよいでしょうか?

  • UWSCでのテキストボックス入力およびボタンクリック

    一昨日「超速!!Windowsマクロテクニック」という本を買い、UWSCの勉強を始めたばかりの初心者ですが、IE上でテキストボックスの入力やボタンのクリックについて本では理解ができず、壁に当たってしまいました。 たとえばyahooのトップ画面から  "オークション"をクリック (サイト移動)  "デジカメ"を入力  「検索」ボタンをクリック というような作業をしたい場合、 どのようにマクロをかけばよいのでしょうか? 上記の本の中ではテキストボックスへの入力について IE.document.forms[x].elements[y].value="zzz" というようなことが書いてありましたが、テキストボックスやリンク、ボタンがたくさんある場合、どうやってその場所を指定すればよいか(xやyをどうやって調べればよいか)がわかりません??? 初歩的な質問で申し訳ありませんが、何卒ご教授をお願いします。

  • VBAでExcelのヘッダーに文字列+セルの値を入れたい

    お知恵を貸してください。 Excelヘッダーについてです。 セルA1に日付が入っていて、この値をYYYY/MM/DDの形でヘッダーにしたいと思っているのですが、この日付の前に「日報」という2文字を必ず入れたいのです。 最終的な形は「日報YYYY/MM/DD」となればよいのですが、これはVBAで可能なのでしょうか。 今まで手入力していたのですが毎日印刷するものなので、自動化したいと思うのです。 よろしくお願いいたします。

  • エクセルVBA セルの書式につい

    ユーザーフォームのテキストボックスに入力した日付(yyyy/mm/ddの形式)をA1セルに入れるとします。  Range("A1").Value = Me.txt日付 A1セルの表示形式は書式設定でユーザー定義の"d"で表示されるように設定していますが、 テキストボックスに入力した形式のまま(yyyy/mm/dd)でA1セルに表示されてしまいます。 上記のみではNGでしょうか? ちなみに、yyyy/mm/ddと入力されたA1セルを一旦編集モード([F2]キーを押した状態)にして[Enter]を押すと"d"(書式設定で指定している書式)に変わります。 参考:A1セルの日付をみて別シートの一覧からVlookup関数で値を検索したいところが、yyyy/mm/ddで表示されるためにエラーとなってしまいます) ご存知の方教えていただきたいです。

  • UWSCで ENTERキーを押した時の挙動について

    UWSCで ENTERキーを押した時の挙動を再現したいのですが上手くいきません。 アバター sekiguchi_kou_dayoさん2017/6/2302:40:58 UWSCで ENTERキーを押した時の挙動を再現したいのですが上手くいきません。 ●試したコード IESetData(IE,True,"","innerText=編集",2) sleep(0.5) IESetData(IE,"2017/08/28","TAG=input",9) sleep(0.5) KBD(VK_RETURN) 実際、手でエンターキーを押すのとテキストボックスの日付が更新されるのですが、KBD(VK_RETURN)だと更新がかかりません。 考えられる可能性がございましたらアドバイスを頂けると助かります。宜しくお願い致します。

  • テキストボックスの入力チェック。

    Version 6.0 です。 テキストボックスに入力された値の中に任意の文字があるかどうかを判断する関数というのはあるでしょうか?InStrとかでやってみたのですが、If文を繰り返すことになってしまい、見難い状況です。 2つのテキストボックスに年月を入力させ、 "yyyymm"、"yyyym"、"yyyy/mm"、"yyyy/m" が入力可。入力した文字列に"/"があるかないかを判断し、あればそのままでIsDateでチェック。なければ、"/"を入れてIsDateでチェック、とさせたいです。 何か簡単なコードの書き方等あれば、ぜひ教えてください。分かり難いところがあれば、補足します。よろしくお願いします。

  • Excel2010のコンボボックスについて

    ActiveXコントロールのコンボボックスについて質問です。 ListFillRangeに一番上に文字列・以下は日付の入ったセル(日付の書式はyyyy/mm/dd)を設定しています。 コンボボックスで選択する際にリストの表示は設定したセルの通りなのですが、日付を選択するとコンボボックスのテキストエリア?の表示が標準に(41172のように)なってしまいます。 これをyyyy/mm/ddのように表示することは可能でしょうか? プロパティのどこをどのようにしたら良いのでしょうか? お願いします。

  • visual basicのテキストボックスについて

    ビジュアルベーシックでカレンダーを作ろうと考えてます。 日付のところをテキストボックスに数字を入れて、カレンダーに見立てようとしています。 でも、そのテキストボックスに値を代入するとき、一つ一つに textbox1.text=1 textbox2.text=2・・・・ と書いていくのはすごくメンドくさく、非効率的です。 今、自分が考えている解決方法は、javascriptにでてくるdocument.forms[0].elements[a].valueのようなテキストボックスなどの名前を指定しなくても値を代入する方法です。 でも、ビジュアルベーシックにこのような操作が可能なのかわかりません。 知っている方がいたら是非教えてください。

専門家に質問してみよう