|
Excelから読み込んだ値を 社内のアプリのフォームに文字列を自動で入力し、 操作していくものを作っています。
バージョン2 の社内アプリ用ツール完成したのですが、 バージョン1 の社内アプリ用に修正し、実行したところ
GetValue:Variant or safe array index out of bounds とエラーが出ます。 同じパソコンで検証しております。
エラーが出る箇所は、 Cells[I][3](B列I行)ですが、 見てみると、その行は空欄でした。 (値を入れたい場合と、入れたくない場合がありますので…)
値が無いからエラーになってしまうのかと思いますが、 If Cells[I][3]<>"" then SENDSTR(id, Cells[i][3], 3, True) Endif
とやっても、同様に GetValue:Variant or safe array index out of bounds とエラーがでてしまいます。
また、自動記録(高度)でバージョン2と同じように行うと、 バージョン2で記録できていた SENDSTR(id, Cells[i][3], 3, True) が無く、クリック操作のみしか記録されていませんでした。 (高度な自動記録で記録したものを実行しても、思い通りの操作になりませんでした)
SENDSTR(id, Cells[i][3], 1, True)//←上手く行く i=i+1 SENDSTR(id, Cells[i][3], 2, True)//←上手く行く i=i+1 SENDSTR(id, Cells[i][3], 3, True)//←失敗 となります。
社内アプリフォームの、テキストボックスの名前の取得方法(高度な自動記録では出来ないため) または、GetValue:Variant or safe array index out of bounds の回避策を教えて頂けると嬉しいです。
|
No.826 2015/02/10(Tue) 09:41:47
|
☆ Re: アプリのフォームに文字を入力したい / ざろん |
|
|
補足します。
空欄ではない場合は、正常に動作します。 空欄がある場合のみ、エラーが出て動作が停止します。
回避策が分かる方いらっしゃいましたら、 よろしくお願い致します。
|
No.827 2015/02/10(Tue) 10:30:19
|
|
☆ Re: アプリのフォームに文字を入力したい / ある |
|
|
アプリのフォームの名前の取得はこれでいけるかもです(自信なし)。
//IE生成 IE = CREATEOLEOBJ("InternetExplorer.Application") IE.visible = true url="http://------------------" //業務アプリのURLを入れる IE.navigate(url) while IE.busy and IE.readystate<>4 sleep(0.2) wend
//アプリフォームの名前を取得 for n=0 to IE.document.forms.length-1 for i=0 to IE.document.forms[n].elements.length-1 print n+":"+i+":"+IE.document.forms[n].elements[i].name //n個目のフォームのi個目の要素名 next next
//番号[0][1]の要素に100と入力する場合 IE.document.forms[0].elements[1].name=100
|
No.832 2015/02/10(Tue) 22:23:53
|
|
☆ Re: アプリのフォームに文字を入力したい / ある |
|
|
あ、最後nameでなくvalueでした(汗
//番号[0][1]の要素に100と入力する場合 IE.document.forms[0].elements[1].value=100
|
No.833 2015/02/10(Tue) 22:27:20
|
|
☆ Re: アプリのフォームに文字を入力したい / ざろん |
|
|
ある様、回答頂きありがとうございます。
色々と情報不足で申し訳ありません。 IEではなく、ExcelのUserFormのような見た目のものになります。
ExcelのC列にデータが入っていたとして、 i=1 SENDSTR(id, Cells[i][3], 1, True)//←C1セルに「A」と入力されているため上手く行く i=i+1 SENDSTR(id, Cells[i][3], 2, True)//←C2セルに「B」と入力されているため上手く行く i=i+1 SENDSTR(id, Cells[i][3], 3, True)//←C3セルに何も入力されてないため失敗
という流れになります。 何も入っていないからエラーというのも分かりますが、 どうにか回避できないものかと思い、質問させていただきました。
私の考えでは If Cells[I][3]<>"" then SENDSTR(id, Cells[i][3], 3, True) Endif とやれば上手く動作するのかと思いましたが、 IF文でエラーが出てしまい、上手く進みません。
|
No.840 2015/02/12(Thu) 13:24:26
|
|
☆ Re: アプリのフォームに文字を入力したい / routa |
|
|
>GetValue:Variant or safe array index out of bounds 配列のインデックスが範囲外だと言われているのだから 配列のサイズを大きくしましょう。
|
No.841 2015/02/12(Thu) 19:35:00
|
|
☆ Re: アプリのフォームに文字を入力したい / Liners |
|
|
このエラー自体の回避方法はありません。そもそもコレは配列の範囲外を指定したから出るので、空欄とか関係ありません。
考えられるのは、突然出てくるCells配列の取得範囲がデータがある場合のみ有効となっているなど。 十分な大きさを指定するか、直接読み取れば良いだけなのでは?
|
No.842 2015/02/12(Thu) 19:45:33
|
|
☆ Re: アプリのフォームに文字を入力したい / ざろん |
|
|
routa様、Liners様 回答頂きありがとうございます。
自分のプログラムを見直してみました。 Cells = Excel.ActiveSheet.Range("A1").CurrentRegion.Value
3行目はデータが何も入ってなかったので CurrentRegionで3行目以降のデータが取れないのは当たり前でした!
3行目の、UWSCの操作で使わない部分に文字を追加して 回避しようと思います! 回答してくださった皆様、ありがとうございました^^
|
No.844 2015/02/13(Fri) 09:31:21
|
|