
お世話になっております。
会社のクラウド画面に、エクセルマクロで値を入力するのですが、
入力した値が認識されないので、どうしたものかと質問しました。
以下詳細です。
・クラウド画面を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
のようなくだりがあるので、クラス名は間違っていないと思います。
あと他に、どこに着眼点があるでしょうか。
アドバイスの程、どうぞよろしくお願いします。
No.1ベストアンサー
- 回答日時:
こんばんは
>if getElementsByClassName("問題のテキストボックス").value = "" then
>値が入力されていません
>End if
>のようなくだりがあるので、クラス名は間違っていないと思います。
スクリプト側のチェックがご提示の内容で間違えないのなら、そのテキストボックスに値をセットすれば良さそうに思われます。
ただし、getElementsByClassName は要素リストを返すはずなので、ご提示のように単独要素として扱えばエラーになるはずです。
(javascriptでもJScriptでもVBAからでも同様です)
多分、正確には違う記述になっているものと想像しますので、その記述にそって値をセットすれば良いのではないでしょうか?
当該ページの仕組みが明示されていないのでよくわかりませんけれど、入力時の仕組みや、チェックの仕組みを調べないとうまくいかない可能性はあります。
以前、似た様なことを試みたことがありますが、その際に手を焼いたのが、
・目的のページを表示すると、別スレッドで新たに表示される仕組みになっている
(元のIEオブジェクトが破棄されるので、そこから探さなければならない)
・1項目入力する毎にサーバに送信する仕様なので、連続で複数項目に入力すると無視される。
(入力ごとにEnterし、さらに通信終了待ちをしなければならない)
などなど、なんとも面倒な仕組みになっていたのを思い出しました。
アドバイスありがとうございます。
キーボードから入力した値は、エクセルマクロの oItem.value に入ってくるので値の取得はできるのです。値の代入もできて画面に表示されるので何の問題も無いように思えるのですが、なぜ取得はOKで、代入はjavaScriptに認識されないのか不明なのです。おっしゃる現象かもしれません。よく調べてみます。
アドバイスありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETでコンボボックスの1行目...
-
ユーザーフォームのテキストボ...
-
値を返さないコード パス
-
Powershellのparamについて
-
VBプログラム エラーが出ます
-
チェックした値を取得したい(C...
-
setcookieで「path」に複数の値...
-
WebRequestでJavascriptの値取得
-
C#の質問です
-
ASP.NET ドロップダウンリスト...
-
ExcelでGaussian fittingをした...
-
【ASP.NET】 DataTextFieldの値...
-
DateLastModifiedのフォーマット
-
PL/SQLでのTO_DATEの時間取得に...
-
VB初心者。小数点以下の表示で...
-
RGB値をL*a*b*に変換したい
-
変数名の取得
-
コンボボックスのSelectedItem...
-
変数に代入してある数値を表示...
-
vb6のVSFlexGridで選択行、列の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストボックスのvalueとtext...
-
値を返さないコード パス
-
VB.NETでコンボボックスの1行目...
-
VBA ドロップダウンリストを残...
-
C#の質問です
-
vb6のVSFlexGridで選択行、列の...
-
VB.NETでアクティブなformを知...
-
Excel VBAのリストボックスの値...
-
VB.NETのスクロールバーコント...
-
PL/SQLでのTO_DATEの時間取得に...
-
ユーザーフォームのテキストボ...
-
VBA(自然数)
-
マクロ 特定のセル値のみクリ...
-
マクロで奇数と偶数の値を2か所...
-
ACCESS VBA 画像ファ...
-
変数に代入してある数値を表示...
-
【ASP.NET】 DataTextFieldの値...
-
チェックした値を取得したい(C...
-
変数名の取得
-
windowsアプリケーションで小数...
おすすめ情報