Top > OOobbs > 28

OOobbs/28 Edit

  • サマリ: CellRangeについてのDataArray, getDataArray, setDataArrayの使い方
  • 環境: Calc
  • 状態: 解決
  • 投稿者: suou?
  • 投稿日: 2004-06-23 (水) 18:25:41

質問 Edit

次のようなSubを書き実行させると、?ではErrorが表示されず、?で「オブジェクト変数は設定されていません」とErrorメッセージが出ます。LBoundもUBoundも正しく表示し、しかも、IsArray()の内側に入ってからErrorが出ます。したがって、aRAが配列を格納したことは分かります。セル範囲についてのDataArray、setDataArrayの使い方のサンプルを教えていただければ大変うれしいです。;

Sub Test()
 Dim oSheet As Object
 Dim oRange As Object
 Dim aRA()
 oSheet = StarDesktop.CurrentComponent.CurrentController.ActiveSheet  '?
 oRange = oSheet.getCellRangeByPosition(11, 5841, 11,6645) '?
 aRA() = oRange.DataArray()  '?
 msgbox LBound(aRA()) & "|" & UBound(aRA())
 If IsArray(aRA()) then
  MsgBox aRA(0)  '?
 End If
End Sub

どうも多次元配列の参照の仕方に問題があるような気がしてきました。下のプログラムでは参照できません。ExcelVBAでの二次元配列要素の参照はa()()の形でできるのですが、OOoBasicの場合はどうすればいいのでしょうか?どなたか教えて頂ければ大変有難いです。

Sub Test()
Dim a()
 a() = Array(Array(1,1),Array(2,1),Array(3,1),Array(4,1))
 If IsArray(a()) then
	msgbox a(0)(1)
 End If
End Sub

回答 Edit

  • こんな感じでいいはずなんですが,DataArray が戻す配列の時にはうまくいかないような器がします。
Sub TestArray
  Dim aARRe(1,2) As String
  aARRe(1,1) = "main"
  MsgBox aARRe(1,1)
End Sub

なぜなんでしょう?

暇なときに,他のドキュメントも探してみます。

  • はにゃ?? 2004-07-09 (金) 00:48:55
  • 次のようにマクロを書き換えたら出来ました。シート上のA1からC20にいろいろな値をまず入力し、その値を取込んだ上で行毎にすべてのセルの値を表示していきます。
    Sub MyTest()
     Dim oSheet, oCell As Object
     Dim nCurCol, nCurRow As Integer
     Dim oRange As Object
     Dim oData
     Dim oDataRow
     oSheet = ThisComponent.CurrentController.ActiveSheet  '?
     oRange = oSheet.getCellRangeByPosition(0, 0, 2, 19) '?
     oData = oRange.DataArray()  '?
     For nCurRow = LBound(oData) To UBound(oData)
      oDataRow = oData(nCurRow)
      For nCurCol = LBound(oDataRow) To UBound(oDataRow)
       msgbox oDataRow(nCurCol)
      Next
     Next
    End Sub
    ここでのgetDataArray()使用上のポイントは、 ?oDataRow=oData(行番号)とoDataRow(列番号)という2段構えでの配列へのアクセス方法をとっていること(ドキュメントでは"The outer sequence represents the rows and the inner sequence the columns of the array"と小書きがあり、これはこの2段構えのことかと今になって気づきましたが、これだけではどうすればいいか皆目見当が付きませんでした) ? Dim oData/Dim oDataRowという配列らしからぬ変数宣言 の2点にあるように思います。 なお、2段構えをはしょり、直接oData(nCurRow)(nCurCol)をもってoDataRow(nCurCol)に代替させることはできませんでした。ところで、上のSampleはこのHPでも紹介されているAndrew Pitonyakさんのhttp://www.pitonyak.org/oo.phpらダウンロードした OpenOffice.org Macro documentのなかのgetDataArray()の節に基づいて多少の変更を加えてあります。記して謝意を表します。6月以来の懸案が解決し、とてもうれしいです。これでいろいろなデータ処理のスピード・アップを図れそうです。
    • suou? 2004-11-04 (木) 10:54:14
  • setDataArrayの使い方のサンプルが漏れていました。
    Sub MyTest2()
    	Dim oSheet As Object
    	Dim oRange, yCursor As object
    	Dim zDR() as object
    	Dim yDR(3)
    	oSheet = ThisComponent.CurrentController.ActiveSheet
    	For i=0 to 3
    		yDR(i) = Array("A" & CStr(i), "B" & CStr(i)) 
    	Next i
    	zDR() = Array(yDR(0),yDR(1),yDR(2),yDR(3))
    	yCursor = oSheet.getCellRangeByPosition(1, 1, 2, 4)
    	yCursor.setDataArray(zDR())
    End Sub
    • suou? 2004-11-06 (土) 19:44:52


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes