ページ 11

Calcシート内の値があるすべてのセルを範囲とするプロパティ

Posted: 12月 27, 2008, 12:00 am
by opop
openoffice のマクロ言語についてお聞きしたいのですが
Calcシートにびっしりと数値を入力している場合
その中の最終の行番号や列番号を表すためにはExcelなら
Worksheetオブジェクトの値があるすべてのセルを範囲とする UsedRange プロパティというものがあり

Sub CellCnt()
Dim lngYCnt As Long
Dim intXCnt As Integer

lngYCnt = Worksheets("Sheet1").UsedRange.Rows.Count
intXCnt = Worksheets("Sheet1").UsedRange.Columns.Count
MsgBox "最終行は" & intYCnt &"行、" & _
"最終列は" & lngXCnt & "列です"
End Sub

のように使うらしいですが
UsedRangeのようなプロパティはopenofficeに存在するのですか。
またそれは 「.プロパティ.Rows.Count」 や 「.プロパティ.Columns.Count」 のように使っても良いのですか。

Re: Calcシート内の値があるすべてのセルを範囲とするプロパティ

Posted: 12月 27, 2008, 4:45 pm
by tani
OOo Basic(UNO)のCursorオブジェクトには
collapseToCurrentRegion
とか
gotoEndOfUsedArea
とかいうメソッドがあります。それらを使えばお望みの情報は取得できると思いますが、
VBAと同じかといわれると、同じじゃないという回答になると思います。
(Cursorオブジェクトの取得方法だったりこれらのメソッドの使い方/サンプルコードだったりは
適当にググったりapi.openoffice.orgで調べたりすると出てきます)

ただ元のVBAのコードはひょっとしたら「Option VBASupport 1」をつけるとOpenOffice.orgでも
そのまま通ったりするかもしれません。そちらの可能性も調べてみると良いかもしれません。

追記: ちょっと不親切すぎるかなと思ったので、サンプルを。

コード: 全て選択

Sub Main
oRange_A1 = ThisComponent.getSheets().getByIndex(0).getCellRangeByName("A1")
oCursor = ThisComponent.getSheets().getByIndex(0).createCursorByRange(oRange_A1)

oCursor.collapseToCurrentRegion 
Msgbox oCursor.getRows.Count
Msgbox oCursor.getColumns.Count

oCursor.gotoEndOfUsedArea(true)
Msgbox oCursor.getRows.Count
Msgbox oCursor.getColumns.Count
End Sub

Re: Calcシート内の値があるすべてのセルを範囲とするプロパティ

Posted: 12月 28, 2008, 7:52 pm
by opop
役に立つコードをどうもありがとうございます。