Top > OOobbs3 > 87

OOobbs3/87 Edit

  • サマリ: calcシート上に配置したボタンの位置とサイズを変更したい
  • 環境: Calc
  • 状態: 解決
  • 投稿者: いしみず?
  • 投稿日: 2012-03-18 (日) 19:03:42

質問 Edit

Calcシート上に配置したボタンの位置とサイズをマクロ(Basic)で変更したいのですが、どのようにすればよいでしょうか? 以上、よろしくお願いします。

回答 Edit

  • 次のようにします。 フォームコントロールオブジェクトは表示は図形描写ですが、図形描写オブジェクトへの参照を持っていないので、ひとつずつ探すしか方法がありません。
Sub ChangeButtonSizeAndPosition
 oCurrentController = ThisComponent.getCurrentController()
 oSheets = ThisComponent.getSheets()
 oSheet = oSheets.getByIndex(0)
 oDrawPage = oSheet.getDrawPage()
 oForms = oDrawPage.getForms()
 oForm = oForms.getByIndex(0)
 
 oButtonModel = oForm.getByName("btn")
 
 oShape = FindControlDrawingObject(oDrawPage, oButtonModel)
 If NOT IsNull(oShape) Then
   Dim aPos As New com.sun.star.awt.Point
   Dim aSize As New com.sun.star.awt.Size
   oCell = oShape.getAnchor()
   aPos.X = oCell.Position.X
   aPos.Y = oCell.Position.Y
   
   aSize.Width = oCell.Size.Width
   aSize.Height = oCell.Size.Height
   
   oShape.setPosition(aPos)
   oShape.setSize(aSize)
 End If
End Sub

' コントロールに対応した図形描写オブジェクトをドローページから見つける
Function FindControlDrawingObject( _
   oDrawPage As Object, oControlModel As Variant) As Variant
 Dim oFound As Variant
 
 For i = 0 To oDrawPage.getCount() -1 step 1
   oShape = oDrawPage.getByIndex(i)
   If HasUnoInterfaces(oShape, "com.sun.star.drawing.XControlShape") Then
     If EqualUnoObjects(oShape.getControl(), oControlModel) Then
       oFound = oShape
     End If
   End If
 Next
 FindControlDrawingObject = oFound
End Function

この例ではセルにアンカーされたボタンのサイズをセルのサイズと位置に合わせています。FindControlDrawingObject 関数はグループ化された場合見つけられませんので、その場合はもう少し複雑な関数を書く必要があります。

  • はにゃ? 2012-03-18 (日) 22:35:51

感想,コメント,メモ Edit

  • うまく位置とサイズの変更ができました。ありがとうございました。 -- いしみず 2012-03-20 (火) 18:38:41


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