[Windows XP SP2 & OOo 3.0.0]
http://blog.livedoor.jp/addinbox/archives/51225904.html
配列の要素数を ReDim Preserve で1つずつ増やす場合、
ReDim Preserve vntArray(0 to (UBound(vntArray) + 1))
このようなコードを使います。『現在の添字の上限値+1』で配列定義するコードです。
コード: 全て選択
Sub Main1
Dim vntArray() As Variant
ReDim vntArray ( 0 to 5 )
ReDim Preserve vntArray ( 0 to ( UBound( vntArray ) + 1) )
vntArray(UBound(vntArray)) = "Test"
MsgBox UBound(vntArray) & Chr(13) & vntArray(UBound(vntArray))
End Sub「Err:91 オブジェクト変数は設定できていません」
以下のように修正するとエラーは無くなり、正しく動作します。
コード: 全て選択
Sub Main2
Dim vntArray() As Variant
Dim i As Integer
ReDim vntArray ( 0 to 5 )
i = UBound(vntArray)
ReDim Preserve vntArray ( 0 to ( i + 1 ) )
vntArray(UBound(vntArray)) = "Test"
MsgBox UBound(vntArray) & Chr(13) & vntArray(UBound(vntArray))
End SubOOo.Basic が【式を評価する順番】を誤った事が、このエラーの原因と思われます。
カッコ内の UBound(vntArray) を先に評価して、
それから ReDim Preserve vntArray を評価するのが正しい順番です。
しかし、OOo.Basic では、
(1) 先に ReDim Preserve vntArray が評価される。
(2) その結果、【現在、vntArray は配列サイズ変更中でサイズが不定】という扱いになる。
(3) その後で、カッコ内の UBound(vntArray) を評価する。
という順番で処理しているのだと思います。
vntArray のサイズ情報(オブジェクト?)が不定になっている状況下で、
UBound によって vntArray のサイズを取り出そうとした為に、
サイズ情報の 「オブジェクト変数が設定できていません」
というエラーになっているのでしょう。
なお、Preserve が無くても同じ結果です。
バグ報告ですので、[解決]マークは付けません。
PS:現在、私が気付いたバグ(と思われるもの)は以下の通りです。
http://blog.livedoor.jp/addinbox/archiv ... 39937.html