お世話になっております。
会社のクラウド画面に、エクセルマクロで値を入力するのですが、
入力した値が認識されないので、どうしたものかと質問しました。
以下詳細です。
・クラウド画面を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で質問しましょう!
似たような質問が見つかりました
- JavaScript javaScriptで画面に値を入れるには 1 2022/08/14 12:27
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- その他(Microsoft Office) エクセルのマクロを教えてください。 1 2023/01/27 09:05
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP php 入力画面から確認表示画面へ情報の受け渡しについて。 1 2023/06/07 18:00
- PHP php 確認表示画面で値をSESSIONから取り出す理由の解釈は正しいでしょうか? 1 2023/06/09 17:39
- Excel(エクセル) Excelのマクロについて 2 2022/06/14 03:38
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- Visual Basic(VBA) ExcelVBAでユーザーフォームでテキストボックスなどからセルに連続して入力するコーディングの際の 2 2022/06/29 22:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストボックスのvalueとtext...
-
VB.NETでコンボボックスの1行目...
-
値を返さないコード パス
-
マクロ 特定のセル値のみクリ...
-
変数名の取得
-
VBAのIF分で値を入れる場合
-
VB初心者。小数点以下の表示で...
-
マクロで奇数と偶数の値を2か所...
-
VBA(自然数)
-
C#の質問です
-
ポインタのプログラムについて
-
VBで電卓のメモリー機能はどの...
-
最大・最小を求めるプログラム
-
textboxとLabelを動的に変更する
-
C# get set
-
ハッシュテーブル(連想配列)が...
-
OpenCVにおいてのYCrCb値の求め方
-
Excel VBAのリストボックスの値...
-
Excel VBA 複数選択したリスト...
-
PL/SQLでのTO_DATEの時間取得に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストボックスのvalueとtext...
-
ハッシュテーブル(連想配列)が...
-
マクロ 特定のセル値のみクリ...
-
VB.NETでコンボボックスの1行目...
-
変数名の取得
-
値を返さないコード パス
-
Powershellのparamについて
-
power BI クエリエディター 〇...
-
PysimpleGUIでデータベースを作る
-
DataTableに対するLINQについて
-
Excel VBAのリストボックスの値...
-
VB初心者。小数点以下の表示で...
-
Excel VBA 複数選択したリスト...
-
ダブルクリックをした順番に数...
-
PL/SQLでのTO_DATEの時間取得に...
-
[VB.net] DataGridViewのコンボ...
-
マクロで奇数と偶数の値を2か所...
-
ASPの変数の値をJAVA Script内...
-
vb6のVSFlexGridで選択行、列の...
-
シーケンサで最小値を保持する
おすすめ情報