3

一括処理のスレッドです。
バリエーションを回答に載せてます。
増えてきたので、タイトルを変更しました。
旧タイトル:指定ID一括オンを作ってみた

 

 

「IE操作(指定ID一括オン)」を作ってみました。
それなりにクールな仕上がりになったので、お裾分けです。
こんな応用も考えられるよね!な便乗、これでもいけちゃうんじゃない?な別案等々、ウェルカムです。

 

機能

  • 指定フレーム内の指定IDのチェックボックスを一括でオンにする
    checkedを0(ゼロ)にすればオフになる(リセットやクリアボタンと比較検討したうえで採否を判断)
  • 処理前の状態を問わない
  • 対象ID_00の行を追加可能(きっとほぼ無限に増やせるはず)
  • 未指定分のIDはスルー
  • disabled属性が指定されていたらスルー(きっと)
  • フレームが不一致ならスルー
  • ラジオボタンもカバー
    1ライブラリ内にチェックボックスとラジオボタンの同居も可能
    ラジオボタンは同じname内で択一
  • IDが重複した場合は、後の行が有効

 

経緯

  • これまでは自動記録アクションの「クリック(IE)」を使ってきた
    「クリック(IE)」の処理は1項目ずつの順次処理
    詳細設定を工夫しても、速くて3か所/1秒くらい
  • 今取り組んでるヤマは、スピードが求められる
    実際の画面にはたくさんの欄があって、10か所/5秒強かかり、じれったい
    画面の読み込みさえ完了していれば、フォームのパーツは「バッチ来い」状態なのに
  • 世の中には、JavaScriptとかである程度まとめてチェックできる機能が存在する
    まとめてチェックして高速化したい

 

関連スレッド

https://winactor.com/questions/question/チェックボックス複数選択する場合/

https://winactor.com/questions/question/winactor-chome-複数のチェックボックがある場合/

 

命名

  • IE操作(指定ID一括オン)
  • IE操作(指定ID一括オフ)
    きっと別立てにしたほうが使いやすい
    もしくはcheckedも変数にしとけば、1ライブラリで使い分けやすいか
    ※ 実際の動きは順次処理

 

使ってみた所感

  • 一瞬、超速、美しい、快感
    設定欄の表示数×使用数で比べた所要時間の差は誤差の範囲っぽい

 

モルモットにしたサイト

入力欄に対応するラジオボタンやチェックボックスに自動でチェックを入れる方法 - JavaScript TIPSふぁくとりー
https://www.nishishi.com/javascript-tips/autocheck-radiobutton-by-textinput.html

 

ベースとなり得るライブラリ

  • IE操作(指定タグの指定ID内のテキストを取得)
  • IE操作(指定タグの指定テキストをクリック)
    ※ IE操作 > クリック/テキスト取得系なら、ほぼどれでもベースとなり得ると思われる

 

ライブラリの加工箇所

' 使わないのでコメントアウトがオススメ
' targetTag = !対象タグ!
' targetID = !対象ID!
' targetText = !クリック対象テキスト!
' Call SetUMSVariable($取得文字$, hitText)
' Call SetUMSVariable($クリックした文字$, hitText)

' 指定ID一括オン
' 視認性を踏まえ、全角スペースでインデントしてある
' 使う場合は、既存のライブラリに倣って、適宜半角スペース3つに置き換え
On Error Resume Next
 With document.document
  .getElementById(!対象ID_01!).checked = 1
  .getElementById(!対象ID_02!).checked = 1
  .getElementById(!対象ID_03!).checked = 1
  .getElementById(!対象ID_04!).checked = 1
  .getElementById(!対象ID_05!).checked = 1
  .getElementById(!対象ID_06!).checked = 1
  .getElementById(!対象ID_07!).checked = 1
  .getElementById(!対象ID_08!).checked = 1
  .getElementById(!対象ID_09!).checked = 1
  .getElementById(!対象ID_10!).checked = 1
 End With
WScript.Quit
' ここで終了になるので、以降のブロックはフレーム探索以外は使わない
On Error Goto 0
 
' document内の指定されたテキストを含むエレメントオブジェクトを取得する
' ↑このコメント行の手前に、[指定ID一括オン]のブロックを追記する

 

加工の勘所

  • 対象ID_00の行追加
  • ID以外、NAME|CLASS|タグのn番目等への対応
    https://www.google.com/search?q=getElementsBy|getElementBy+VBS+-JavaScript
  • .checked = 0でオフに対応
  • 今回は検索用でチェックの箇所と数が一定だった
    登録用途だと、Excel/CSVリスト/データ一覧等のフラグに応じたチェックオン/オフが必要っぽい
    変数を読み替える「多分岐」が必要か
  • より標準的でリーダブルなコードに

 

今後の展望

anothersolution 新しいコメントを投稿
回答とコメントは、会員登録(無料)で閲覧できるようになります。