1

私は定期的にサードパーティのデータベースにデータを入力しています。自分の Excel スプレッドシートからデータを取得し、それを Internet Explorer のサード パーティの入力フォームに配置する単純な VBscript を作成しようとしています。エントリーフォームのiframeに到達したときを除いて、プロセスは機能しています。これについて何か助けていただければ幸いです。私は初心者です。

VBS (ロング ストーリー) を起動する前にフォームを開いておく必要があるため、スクリプトは開いているページを探す必要があります。すでにこれを行うスクリプトを見つけました。デモ エントリ システムを作成しました。次のようになります。

index.htm

<html>
<body>

<p>First input box is on the_index.htm (main document).</p>
<input id="title" name="title-1" style="width: 220px;" title="enter title" type="text" value="">

<br /><br /><br /><br />
<iframe frameborder="0" id="input_frame" marginheight="0" marginwidth="0" name="input_frame" src="the_iframe.htm">

</body>
</html>

the_iframe.htm

<html>
<body>
<p>Second input box is on the_iframe.htm (iframe called from the main document).</p>
<input id="title" name="title-1" style="width: 220px;" title="enter title" type="text" value="">
</body>
</html>

次に、私の VBS は現在次のようになっています (悲しいことに、スクリプトがページを見つけることができるように、デモ htms をホストする必要があります (最初の行を参照)。

入力スクリプト.vbs

surl ="http://www.website.com/index.htm"
set ie = nothing
set shapp=createobject("shell.application")
on error resume next
For Each owin In shapp.Windows
     if left(owin.document.location.href,len(surl))=surl then
        if err.number = 0 then
        set ie = owin
          end if     
    end if
err.clear
Next
on error goto 0
if ie is nothing then
    wscript.echo "Window Not Open"

else
IE.Document.All.Item("title").Value = "wheee1"
IE.Document.frames("input_frame").All.Item("title").Value = "wheee2"
end if

「wheee1」展開は正常に機能しますが、wheee2 は「オブジェクトはこのプロパティまたはメソッドをサポートしていません: ie.document.frames(...).All」を生成します。「.All」を取り除くと、エラーは「メンバーが見つかりません」になります。

ここに簡単な修正があるかどうか誰にもわかりますか?

4

2 に答える 2

0

これは奇妙な投稿であることに感謝しますが、ここで苦労している人にとっては、私が使用した「ちっぽけな」ソリューションです。

開いているウィンドウを取得するには -- これは、IE で表示している場合にのみ機能します。Firefox などは次のコードに登録されません。

 For Each AW in CreateObject("Shell.Application").Windows 

'AW = アクティブなウィンドウ

   If Typename(AW.Document) = "HTMLDocument" Then 

'これにより、開いているウィンドウ フォルダーが選択され、このチェックなしでクラッシュします

     If InStr(1,AW.Document.Title,<String HTML Title>) > 0 Then Exit For
   End If
 Next

'AW はその後の HTML ウィンドウになり、IE オブジェクトを作成するように使用できます。

例えば。

Set oIe = CreateObject("InternetExplorer.Application")

余談ですが、Excel と連携するオブジェクトは次のとおりです。

Set xl = CreateObject("Excel.Application")

その後、xl を呼び出すことができます。そして、通常のvbaコマンド

xl.workbook().worksheets().cells().value etc

IFrame 部分 - これに関する問題は、ドキュメント オブジェクトではなく Window オブジェクトです。

アクティブなウィンドウがあり、iframe に移動したい場合:

Set iFra = AW.Document.GetElementById(<String - iframe id>)

またはコレクション:

For each iFra in AW.Document.GetElementsByTagName("iframe")
  iFra...
Next

iframe を取得したら、.ContentWindow プロパティを使用する必要があります。

だから上から iFra.ContentWindow

AW 1のように使用して、ネストされたすべてのプロパティを取得できます

例えば

iFra.ContentWindow.Document.GetElementById(<String - ID>).Value = "Sorted"

これを使用する場合、コンテンツが更新された場合、iframe オブジェクトを再取得する必要があることに注意してください (上記の IFra コマンドを設定します)。

IE 開発者 (IE ではデフォルトで f12) を使用する場合の便利なヒントは、html を見るときに iframe で必要なフィールドをアクティブにし、開発者で HTML を更新すると、iframe コンテンツで get 要素を使用できるようになります。

于 2014-09-02T19:32:42.097 に答える
0

を介してフレームウィンドウだけを取得できますIE.Document.frames("input_frame")Documentこれは文書ではないため、この宛先にも含める必要があります。

IE.Document.Frames("input_frame").Document.All("title").Value = "wheee2"
于 2012-10-15T02:40:26.877 に答える