見出し画像

UWSC でのシステム入力について、プログラミング経験のない初心者からの相談への解決方法を検討してみた話【UWSC】

Yahoo!知恵袋でUWSC でのシステム入力についてプログラミング経験のない全くの初心者からの相談があったようです。2021年頃の記事です。要約すると

  1. エクセルのリストのA列の値を

  2. 所定の入力欄に入力

  3. 検索ボタンをクリック

  4. B列の値にマッチングしたチェックボックスにチェックを入れる

  5. OKボタンをクリック

  6. 複数ある入力フォームにC列他の値を入力

  7. OKボタンをクリック

  8. 上記の工程をエクセルのリストの行数分繰り返す

上記のようなことのようでした。
まぁ、普通にありそうな条件でしたので、自分でやるならすぐにできそうなのですが、初心者の方のために解決方法を検討してみた記事になります。

まず「1.UWSCを準備する
これは、大丈夫そうですね。

次に「2.画面を分析できるようにする
これは、準備して欲しいですね。

というのも例えば、「電卓」の「C」ボタンを押したい場合

id=GETID("電卓",,-1)	//IDを取得できるまで待つ
clkitem(id,"クリア",CLK_ACC) //初期化	//クリアのボタンを押す

上記のようにすればよいのですが、「C」ボタンの名称がカタカナで「クリア」であることは、外観からではわからないですよね。ここでは便利なものを使わせていただきましょう。

1.エクセルのリストのA列の値を

//----------------------------------------------------------------------
//ガード条件(例:EXCEL を使う場合)
//----------------------------------------------------------------------
GETALLWIN() //全ウィンドウ数の取得
FLAG=0
FOR i = 0 TO (LENGTH(ALL_WIN_ID) - 1) 
 IF pos("Excel",STATUS(ALL_WIN_ID[i],ST_TITLE))>0  then
 FLAG=1
 ENDIF
NEXT
IF FLAG=1 THEN
 //MSGBOX("Excel が見つかりました") // 画面がない処理
 //PRINT "あり(例:何もしない)"
ELSE
 MSGBOX("Excel が見つかりません!") // 画面がない処理
 PRINT "なし(例:メッセージボックスを表示)"
 EXITEXIT
ENDIF
//----------------------------------------------------------------------
//最終レコードを把握する(例)
//----------------------------------------------------------------------
Excel=GETACTIVEOLEOBJ("Excel.Application")
//最後のセルを選択
//EXCEL.Sheets("Sheet1").Select	 // シートを指定する場合
EXCEL.Range("A1048576").Select	 // A列の最終行を取得する場合の最終行
EXCEL.ActiveCell.End(-4162).Select //上へ
MAXROW= EXCEL.ActiveCell.Row
//----------------------------------------------------------------------
//開始、終了レコード指定(例)
//----------------------------------------------------------------------
a=2	//開始行初期値:2
z=MAXROW	//開始行初期値:MAXROW
a = INPUT("「開始行」を入力してください。", a)
IFB VARTYPE(a) = VAR_EMPTY
MSGBOX("キャンセルされました。")
PRINT "キャンセルされました。"
EXITEXIT
ELSEIF VAL(a) = ERR_VALUE
PRINT "無効な値です:a"
ENDIF

z = INPUT("「終了行」を入力してください。", z)
IFB VARTYPE(z) = VAR_EMPTY
MSGBOX("キャンセルされました。")
PRINT "キャンセルされました。"
EXITEXIT
ELSEIF VAL(z) = ERR_VALUE
PRINT "無効な値です:z"
ELSE	//有効な値が指定された場合に実行される処理を以降に記述
//----------------------------------------------------------------------
ID=GETID("EXCEL",-1)
//----------------------------------------------------------------------
//FOR ~ NEXT で処理する(例)
//----------------------------------------------------------------------
FOR r = a TO z	//FOR ~ NEXT 開始
//----------------------------------------------------------------------
Fukidasi (r)
C1=Excel.ActiveSheet.Cells(r,1).Value
print C1

//この位置に処理を追加していきます

//この位置に処理を追加していきます

//----------------------------------------------------------------------
NEXT	//FOR ~ NEXT 終了
//----------------------------------------------------------------------
ENDIF	//有効な値が指定された場合に実行される処理を以前に記述
//----------------------------------------------------------------------

上記のようにすればA列の値を2行目から最終行まで確認できます。
コード上では、「C1」という変数に行数「r」が「a」(初期値は2)~「z」(初期値は最終行を事前に取得)まで次々に格納されていく仕組みですね。
この例では、Excel がないと実行できないようにガードが掛かっているのと、指定の行範囲だけ実行できる仕組みも入っています。

2.所定の入力欄に入力
これは、所定の入力欄がどんな入力欄なんだか調べてみないとわかりませんね。そこで実際に所定の入力欄にダミーの値を入力した状態で画面の分析をして、入力した値がどのように扱われているかを確認します。「システム画面へのデータ入力と検索、結果のExcel へのデータ取得のサンプル」の「文字コード表」の例では、「検索する文字の名前」という入力欄に「hoge」と入力した状態で分析を掛けてみます。
getstr(id,3,STR_ACC_EDIT)="hoge" // sendstr(id,"hoge",3,TRUE,TRUE)
すると上記のように「hoge」を探すことで、入力欄がどのように扱えるかがわかります。例では

c2=Excel.ActiveSheet.Cells(r,2).Value

REPEAT
sendstr(id,C2,3,TRUE,TRUE)
UNTIL getstr(id,3,STR_ACC_EDIT)=c2

行数「r」行目のB列の値を「C2」に取得した後、「sendstr」関数で、「C2」を送信して、「getstr」関数で同じ入力欄の値を取得、取得結果が入力値と同じになるまでリピートさせています。

3.検索ボタンをクリック
同じように分析結果の中から「検索」ボタンを探します。
clkitem(id,"検索",CLK_BTN)
検索ボタンは、名称も「検索」でしたね。「電卓」の「C」ボタンのように名称が異なる場合もあるので、注意が必要です。また、「文字コード表」の例では、「検索」ボタンを押下すると「リセット」ボタンと入れ替わってしまいます。データを入力した状態で分析したり、「検索」ボタンを押下後に分析したりと必要な情報を取得するためには分析時の状態をどのようにすれば探せるのかを考える必要があります。

4.B列の値にマッチングしたチェックボックスにチェックを入れる
システム画面へのデータ入力と検索、結果のExcel へのデータ取得のサンプル」の「文字コード表」の例では、

WHILE !CHKBTN(ID, "詳細表示")
	CLKITEM(id,"詳細表示",CLK_BTN)
WEND

上記の様にして、「詳細表示」というチェックボックスにチェックを入れています。ですので想像になってしますが、

c2=Excel.ActiveSheet.Cells(r,2).Value

WHILE !CHKBTN(ID, c2)
	CLKITEM(id,c2,CLK_BTN)
WEND

上記の様にすればよいのではないかと想定しています。

5~8.OKボタンをクリック、複数ある入力フォームにC列他の値を入力、上記の工程をエクセルのリストの行数分繰り返す
5と7のOKボタンについては、3の検索ボタンと同様です。
6の複数ある入力フォームにC列他の値を入力については、2の所定の入力欄と同様です。8の上記の工程をエクセルのリストの行数分繰り返すについては、1の「エクセルのリストのA列の値を」の中で、指定した行数の範囲で処理を継続する例示がしてあります。

独自のシステムへチャレンジしていく際の参考になるのではないかと思い計画しました。

有料エリアには何も情報がありません
記事を評価してくれた方はサポートもお願いします

誰もが無料でWindows自動化を始め、生産性を向上し続けられるようにする」

ここから先は

15字

¥ 100

この記事が気に入ったらサポートをしてみませんか?