あまプロではLibreOfficeBasicを使ってマクロを作る事が有ります。
LibreOfficeBasicの配列追加で少し嵌まったんであメログ。
LibreOfficeBasicで配列を追加するにはReDim Preserveを使います。
例えば配列の末尾に一つ追加するのはこちら。
Sub test↑を実行するとこうなります。
Dim stringArray( 0) As String
stringArray( 0) = "文字列0"
Redim Preserve stringArray( Ubound( stringArray) + 1)
stringArray( 1) = "文字列1"
Msgbox stringArray( 0) &" "& stringArray( 1)
End Sub
意図した通りです。
なんですが、Functionの戻り値で配列を受け取る時は要注意です。
String型なんで、配列の戻り値もStringにすんのかなと考え
Function addArray( stringArray As String) As String↑を実行してみると
Redim Preserve stringArray( Ubound( stringArray) + 1)
addArray = stringArray
End Function
Sub test
Dim stringArray( 0) As String
stringArray( 0) = "文字列0"
stringArray = addArray( stringArray)
stringArray( 1) = "文字列1"
Msgbox stringArray( 0) &" "& stringArray( 1)
End Sub
実行エラーになります。
ほなVariant型にすんのかなと考え
Function addArray( stringArray As String) As Variant
Redim Preserve stringArray( Ubound( stringArray) + 1)
addArray = stringArray
End Function
Sub test
Dim stringArray( 0) As Variant
stringArray( 0) = "文字列0"
stringArray = addArray( stringArray)
stringArray( 1) = "文字列1"
Msgbox stringArray( 0) &" "& stringArray( 1)
End Sub
↑を実行しても同じく
実行エラー…。
色々試した挙げ句VariantをStringで受け取ると良ぇ様です。
Function addArray( stringArray As String) As Variant
ReDim Preserve stringArray( Ubound( stringArray) + 1)
addArray = stringArray
End Function
Sub test
Dim stringArray( 0) As String
stringArray( 0) = "文字列0"
stringArray = addArray( stringArray)
stringArray( 1) = "文字列1"
Msgbox stringArray( 0) &" "& stringArray( 1)
End Sub
↑を実行すると
意図した通りになりました。
でも、VariantをVariantで受け取っても動く場合が有るんすよね…良ぉ解らん。
マクロ本体はGithubで公開しています。
環境はバージョン: 6.4.7.2 Build ID: 1:6.4.7-0ubuntu0.20.04.1です。
0 件のコメント:
コメントを投稿
つっこみ