LibreOffice Calc Basic - シートを選択する方法

◆setActiveSheetメソッド

インデックスでシートを選択するには、カレントコントローラのsetActiveSheetメソッドの引数にScTableSheetObjオブジェクトへの参照を指定します。

 ScTableSheetObjオブジェクトへの参照は次の構文で取得できます。
[構文]
DocumentObject.CurrentController.ActiveSheet
DocumentObject.Sheets.getByIndex(シート番号)
DocumentObject.Sheets.getByName("シート名")
DocumentObject.Sheets(シート番号)

DocumentObject.CurrentController.ActiveSheetは、現在アクティブなシートのオブジェクトを表します。
シート番号は、Excelの場合は1から始まりますがLibreOfficeは0から始まります。つまり、最初のシートが0になります。

サンプルコード ActiveSheets
Sub oActiveSheet 
   oDoc = ThisComponent
   oController = oDoc.getCurrentController() 
   oSheets = oDoc.getSheets() 
   oController.ActiveSheet

End sub
 
サンプルコード getByIndex
Sub SelectShet
    oDoc = ThisComponent 
    oController = oDoc.getCurrentController() 
    oSheets = oDoc.getSheets()
    oController.setActiveSheet(oSheets.getByIndex(0))
End Sub

 
サンプルコード getByName
Sub ActivateSheet
    oDoc = ThisComponent 
    oController = oDoc.getCurrentController() 
    oSheets = oDoc.getSheets()
    oController.setActiveSheet(oSheets.getByName("Sheet1"))
End sub
サンプルコード Sheets(シート番号)
Sub ActivateSheet
    oDoc = ThisComponent 
    oController = oDoc.getCurrentController() 
    oSheets = oDoc.getSheets()
    oController.setActiveSheet(oSheets(0))
End sub


▼ページトップへ

◆関数化する

 基本形は上のとおりですが、何カ所もボタンで指定する場合は何度も何度も書くのは面倒なので、サブプロシージャーとして作成し、引数でシート名を指定するようにすると便利です。
次のコードでは、ActivateSheetという関数を作成しています。このコードを利用してtestActivateプロシージャでは一行で済ますことができています。

Sub ActivateSheet(SheetName as string)
    oDoc = ThisComponent 
    oController = oDoc.getCurrentController() 
    oSheets = oDoc.getSheets()
    oController.setActiveSheet(oSheets.getByName(SheetName))
End sub
sub testActivate()
    ActivateSheet("Sheet2")
End sub