選択セル範囲
選択セル範囲にアクセスします。 選択セル範囲の取得
現在のコントローラから Selection プロパティーまたは getSelection メソッドを使用することで選択セル範囲のオブジェクトが取得できます。 Sub get_selection() Dim oSelection As Object, oCellRangeAddress As Object oSelection = ThisComponent.CurrentController.Selection oCellRangeAddress = ThisComponent.createInstance( _ "com.sun.star.sheet.SheetCellRanges" ) oCellRangeAddress.InsertByName( "", oSelection ) MsgBox oCellRangeAddress.getRangeAddressesAsString() End Sub 上のコードでは,選択セル範囲が文字列として表示されます。 また, ThisComponent から CurrentSelection, getCurrentSelection で選択セル範囲を取得することもできます。 oSelection = ThisComponent.getCurrentSelection のようにすることで,選択セル範囲を取得できます。 使用しているメソッドは選択セル範囲の取得のみに使用するものではなく,選択中の全てのオブジェクトを取得します。そのため,選択状態によってはメニューバーのボタンやグラフのコントローラーやオブジェクトが取得されるときがあります。 選択セル範囲の設定
選択セル範囲を設定します。 Calc ドキュメントの CurrentController の select メソッドを使用することで選択セル範囲を設定できます。 Sub set_selection1() 'in calc documents Dim oDoc As Object, oController As Object Dim oSelectedCellRange As Object oDoc = ThisComponent oController = oDoc.getCurrentController() oSelectedCellRange = _ oController.getActiveSheet().getCellRangeByName( "A4" ) oController.select( oSelectedCellRange ) End Sub 上のようにすることでセル範囲を選択した状態にできます。ここではアクティブシートの "A4" セルを選択状態にしています。アクティブシートの設定も同時に使用すればシートとセルの両方をえらんで選択状態にできます。 アクティブシートを設定しなくても,フォーカスはアクティブセルへ移ります。 ここで注意することは select メソッドがセル範囲専用ではなく全てのオブジェクトなどを選択状態にできるということです。 選択の解除
セルのカーソルを移動させるために、select メソッドを使えます。しかし、その後ではセルが選択状態になっているためすこし不都合があります。 選択状態の解除は次のように行えます。 下記のコードでは,セル "C1" にセルカーソルを select メソッドを使って移動させます。セルカーソルが移動したあとではセルが選択状態になっています。それをスロットコマンドを使って解除します。 Sub selection Dim oDoc As Object, oController As Object Dim oActiveSheet As Object, oCell As Object Dim oFrame As Object oDoc = ThisComponent oController = oDoc.getCurrentController() oFrame = oController.getFrame() oActiveSheet = oController.getActiveSheet() oCell = oActiveSheet.getCellRangeByName("C1") oController.select(oCell) msgbox "unselect" aURL = CreateUnoStruct("com.sun.star.util.URL") aURL.Complete = ".uno:Deselect" CreateUnoService("com.sun.star.util.URLTransformer")._ parseStrict(aURL) oDisp = oController.queryDispatch(aURL,"_self",0) oDisp.dispatch(aURL,Array() End Sub .uno:Deselect コマンドを利用して選択を解除します。コマンドについてはコマンド ページを参照してください。 キーワード: 選択解除 セルカーソルのあるセルを取得
シート上に見えているセルカーソルはいつもどこか一つのセルを指します。API のメソッドなどからは取得できませんが、次のようにして無理やり取得します。 Sub GetCellTest oDoc = ThisComponent oCell = GetCellViewCursor(oDoc) If NOT IsNull(oCell) Then msgbox oCell.AbsoluteName End If End Sub Function GetCellViewCursor(oDoc As Object) As Object Dim oCell As Object oController = oDoc.getCurrentController() oSheets = oDoc.getSheets() sViewData = oController.getViewData() aData = Split(sViewData, ";") If UBound(aData) >= 3 Then nSheetIndex = CInt(aData(1)) If UBound(aData) >= (nSheetIndex + 3) Then aSheetData = Split(aData(nSheetIndex + 3), "/") If UBound(aSheetData) >= 10 Then oCell = oSheets.getCellByPosition(aSheetData(0), aSheetData(1), nSheetIndex) End If End If End If GetCellViewCursor = oCell End Function まとめ
|