月別アーカイブ: 2014年1月

Libre:015 別のブックにワークシートを移動する

Libreにはブックという概念がないので、

なかなか難しい。

構造的には、以下のよう対応しています。

——————————————————–

EXCELの場合 => Libreの場合

——————————————————–

ThisWorkbook => ThisComponent

ActiveWorkbook => StarDesktop.CurrentComponent

——————————————————–

 

マクロとしては、以下のようになりますが、

色々と不満です。これは、ダイアログを出すとか

工夫が必要だと思います。

sub ksSheetMoveBetween

dim movingSheetByIndex as integer
dim targetSheetByName as string

movingSheetByIndex = 0
targetSheetByName = “無題3”


dim document as object
dim dispatcher as object

document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService(“com.sun.star.frame.DispatchHelper”)

dim args1(2) as new com.sun.star.beans.PropertyValue
args1(0).Name = “DocName”
args1(0).Value = targetSheetByName
args1(1).Name = “Index”
args1(1).Value = 32767  <= 一番後ろに移動させる場合
args1(2).Name = “Copy”
args1(2).Value = false  <= 移動の場合false, copy は true

dispatcher.executeDispatch(document, “.uno:Move”, “”, movingSheetByIndex, args1())end

sub

Libre:013 シートをアクティブにする

 

Sub ksSheetsActive

dim controller as object
dim sheet as object

With ThisComponent
controller = .getCurrentController()
sheet = .getSheets.getByName(“test1”)
‘ sheet = .getSheets.getByIndex(0)
controller.setActiveSheet(sheet)
End With

End Sub

 

sheetの名前が明らかなときは、getByNameメソッドの方が

便利そうです。

sheetのインデックスで指定する場合は、getByIndexメソッドを

使用します。