AutoIt Excel UDF $oExcel.Transpose()でエラー

AutoIt Excel transpose Excel

RPAキーワードでよく出てくる「エクセル操作を自動化」AutoItで簡単に実装できるExcel UDFですが、これだけでは当然機能が足りず結局VBAの知識が必要になります。

しかしVBAの話の前にそもそもExcelUDFを使うのをやめて自作しました。

使っていて、セルに255文字を超える文字があると_Excel_RangeRead(),_Excel_RangeWrite()の$oExcel.Transpose($data)がうまくいかない・・・
どうやらこれはExcel->Transposeの仕様のようですが、最初何が起こっているのかわからず原因解明に時間がかかっていました。

スポンサーリンク

1. Excel UDFでは引数$bForceFuncで分岐

Excel.au3を見てみましょう。_Excel_RangeRead()、_Excel_RangeWrite()あたりを。
すると、Defaultでは$bForceFunc = Falseに設定され、$oExcel.Transpose($vValue)を使うようになっています。

1.1 $bForceFunc=Trueの場合分けは文字数とかセル数などで事前に調べる必要がある

引数の$bForceFuncをTrueにすると、_ArrayDisplay($vValue)を使います。
で、$oExcel.Transpose($vValue)だと255文字超えると失敗することがあるので、そういう時は$bForceFunc=Trueにする。

それをやるには各セル(データ)の文字数を調べなければなりませんね・・・面倒だ。

2. Excel UDFの各関数の引数$bForceFunc = Trueにしておく

これが一番簡単ですね。基本_ArrayTranspose()を使うようになります。
ただ、筆者はExcelUDFは各関数でObjEvent()呼んで空の関数に渡しているのと、SetError()にメッセージも追加したいのもあり、Excel UDFをベースに自前で作っています。

RPAときたらエクセルな記事が多く、需要はそれなりにあると思うのでエクセル操作する関数は自前しておくのが良いかと思いますね。

コメント

タイトルとURLをコピーしました