アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になっております。
会社のクラウド画面に、エクセルマクロで値を入力するのですが、
入力した値が認識されないので、どうしたものかと質問しました。

以下詳細です。
 ・クラウド画面をIEで表示。テキストボックスに値を入力します。
  従って画面の仕様は公表されていないし変更もできません。
  IEを『開発者ツール』で見ると普通にテキストボックスで、
  Type=Textになっています。作り込まれたスクリプトを見ることもでき、
  テキストボックスの値が空だと、エラーを表示するようになっています。
  
 ・エクセルマクロでの値のセット方法が以下です。
  細かな綴りは間違っているかも知れません。
   oObjct = Create.Object("IE.Application")
   for iix = 0 to oObjct.all.item.length - 1 '500回くらいある
    set oItem = oObjct.all.item(iix)
    if oItem.Class = "問題のテキストボックス" then
    oItem.Value = "適当な値"
    end if
   Next
  
 ・現象として<送信>ボタンがあるので、これを押すと
  画面に作りこまれた JavaScript によって
  『値が入力されていません』と表示されます。
  問題のテキストボックスをクリックして、
  キーボードから値を入力すると認識され<送信>の動作を行います。
  エクセルマクロでの値のセットは、セットした時に
  画面に正しく"適当な値"を表示されるので問題ないと思います。
  問題はマクロで値をセットしているのに、
  画面に作られたJavaScriptでその値が空""だと思われていることです。
  
 ・悪あがきした内容
  oItem.value = "値を入れた" & vbCrlf ←ダメでした
  oItem.value = "値を入れた" & vbTab ←ダメでした
  oItemオブジェクトの oItem.onfocus ← Nullが入っていました
  ループを使わず getElementsByClassName("問題のテキストボックス")
  に変えても、値はセットできるし、現象は同じでした。
  JavaScriptを解析すると、
  if getElementsByClassName("問題のテキストボックス").value = "" then
   値が入力されていません
  End if
  のようなくだりがあるので、クラス名は間違っていないと思います。

あと他に、どこに着眼点があるでしょうか。
アドバイスの程、どうぞよろしくお願いします。

A 回答 (1件)

こんばんは



>if getElementsByClassName("問題のテキストボックス").value = "" then
>値が入力されていません
>End if
>のようなくだりがあるので、クラス名は間違っていないと思います。
スクリプト側のチェックがご提示の内容で間違えないのなら、そのテキストボックスに値をセットすれば良さそうに思われます。

ただし、getElementsByClassName は要素リストを返すはずなので、ご提示のように単独要素として扱えばエラーになるはずです。
(javascriptでもJScriptでもVBAからでも同様です)
多分、正確には違う記述になっているものと想像しますので、その記述にそって値をセットすれば良いのではないでしょうか?


当該ページの仕組みが明示されていないのでよくわかりませんけれど、入力時の仕組みや、チェックの仕組みを調べないとうまくいかない可能性はあります。
以前、似た様なことを試みたことがありますが、その際に手を焼いたのが、
・目的のページを表示すると、別スレッドで新たに表示される仕組みになっている
 (元のIEオブジェクトが破棄されるので、そこから探さなければならない)
・1項目入力する毎にサーバに送信する仕様なので、連続で複数項目に入力すると無視される。
 (入力ごとにEnterし、さらに通信終了待ちをしなければならない)
などなど、なんとも面倒な仕組みになっていたのを思い出しました。
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
キーボードから入力した値は、エクセルマクロの oItem.value に入ってくるので値の取得はできるのです。値の代入もできて画面に表示されるので何の問題も無いように思えるのですが、なぜ取得はOKで、代入はjavaScriptに認識されないのか不明なのです。おっしゃる現象かもしれません。よく調べてみます。
アドバイスありがとうございました。

お礼日時:2021/08/03 01:45

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