OpenOffice.org Basicでガントチャート
OpenOffice.org Basicを使ってガントチャート作成用マクロ ガントチャートforOOoを開発する手順を紹介していきます。
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
If ... 条件による処理の分岐

マクロの実行時に条件を判断しながら処理を分けるのに利用します。僕の作ってきたプログラムでこの処理を利用しないものはほとんどありません。基本中の基本の機能であり、また欠く事の出来ない機能であります。

[用法]

If 条件式 Then
    処理
End If

これが一番単純な使い方となります。

[例]

a = InputBox("「何か」と入力して下さい。")
If a = "何か" Then
    MsgBox "ありがとうございます"
End If

これは条件が一致したときのみの処理をしますが、次は条件が一致しなかった場合の処理を追加方法を示します。

[用法]

If 条件式 Then
    処理
Else
    別の処理
End If

[例]

a = InputBox("「何か」と入力して下さい。")
If a = "何か" Then
    MsgBox "ありがとうございます"
Else
    MsgBox "「何か」と入力して下さいよ!"
End If

また、いくつかの条件を処理したい場合は次のようにします。

[用法]

If 条件式 Then
    処理
ElseIf 別の条件式 Then
    別の処理
End If

[例]

a = InputBox("「何か」と入力して下さい。")
If a = "何か" Then
    MsgBox "ありがとうございます"
ElseIf a = "" Then
    MsgBox "そのまま閉じたか空白ですね"
End If

このようにいくつか処理を分岐し、それまでの内容に合わせて実行するマクロを切り分ける事ができます。大げさな表現をするならば、プログラミングのほとんどはこの分岐処理の組み合わせのような物だとも言えると思います。

スポンサーサイト

テーマ:Officeソフト - ジャンル:コンピュータ

CInt - 文字列を数値に変換

InputBoxなどで取得した文字列をそのまま計算に使用する事はできません。そこで、文字列を用途に合わせて数値に変換する必要が生じてきます。そのような時に役立つのがCInt関数です。CInt関数は文字列をInteger型の数値に変換してくれます。

[用法]

CInt(文字列)

[例]

Dim msg
msg = "123.456"

MsgBox(CInt(msg) * 3)

ちなみにCInt関数は文字列に限らず、実数型の数値を入力して使用する事も出来ます。その時は、小数点以下を丸めた整数型の数値に変換します。

他にも文字列から数値データに変換する関数がありますので、表にまとめてみます。

CInt 整数値に変換
CLng ロング整数値に変換
CSng 単精度の数値に変換
CDbl 倍精度の数値に変換

テーマ:OpenOffice.org - ジャンル:コンピュータ

InputBox - 値の入力

マクロの実行時にちょっとした入力をユーザーに行ってもらいたい時、とても役立つのがInputBox関数です。

[用法]

InputBox (メッセージ[, タイトル[, 初期値[, 横位置, 縦位置]]]])

[例]

InputBox("何か値を入力して下さい。")
InputBox("何か値を入力して下さい。", "InputBoxの例")
InputBox("何か値を入力して下さい。", "InputBoxの例", "初期値を入力します。")

ここで、注意点が2つあります。

  1. InputBoxにはOKとキャンセルのボタンがあります。ここで、キャンセルボタンを押すと文字数が0の文字列が戻ってきます。よって何も入力しない状態でOKを押した時とキャンセルボタンを押した時は同意義になります。
  2. 戻り値の型は文字列なので、数値を入力したい時は型の変換を行う必要があります。
これらの事を踏まえた実例を下記に示します。

Sub Main
    
    Dim ans
    Dim msg
    
    ans = InputBox("入力テスト")
    msg = TypeName(ans)
    
    If ans = "" Then
        ans = "キャンセル"
    End If
    
    MsgBox(ans & chr(13) & msg)
    
End Sub

色々な入力を試してみて下さい。

テーマ:OpenOffice.org - ジャンル:コンピュータ

図形オブジェクトの追加

シート上に図形オブジェクトを追加する方法を解説します。

まず、正方形を追加する例を示します。

Sub Main

    Dim oSheet As Object
    Dim oDrawPage As Object
    Dim oDraw As Object
    
    oSheet = ThisComponent.CurrentController.ActiveSheet
    oDrawPage = oSheet.getDrawPage
    
    oDraw = ThisComponent.createInstance( _
        "com.sun.star.drawing.RectangleShape")
    
    Dim Width As Long
    Dim Height As Long
    Dim X As Long
    Dim Y As Long
    
    Width = 1000
    Height = 1000
    X = 2000
    Y = 2000
    
    setDrawSizePosition(oDraw, Width, Height, X, Y)
    
    oDrawPage.Add(oDraw)
    
End Sub
 
Sub setDrawSizePosition(oDraw As Object, _
    Width As Long, Height As Long,  X As Long, Y As Long)
    
    setDrawSize(oDraw, Width, Height)
    setDrawPosition(oDraw, X, Y)
    
End Sub

手順としては、createInstanceで図形オブジェクトを生成してから、シートに追加するということになります。ここで、createInstanceに渡す文字列を変更する事で円、曲線、直線など様々な図形を描画する事ができます。
また、サイズと位置を設定するために、前回までで作成した2つの関数を一つにまとめるsetDrawSizePosition関数を作って利用しています。この時に設定する数値も単位は1/100mmなので、1cmならば「10000」となります。

種類 文字列
四角 com.sun.star.drawing.RectangleShape
直線 com.sun.star.drawing.LineShape
com.sun.star.drawing.EllipseShape
曲線 com.sun.star.drawing.OpenBezierShape

しかし、これらの文字列がわからないと目的の図形が描けずに困る事になります。そんな時、膨大な量のマニュアルから情報を探すのも楽ではないので、僕は実際に目的の図形を描画してから、下記に示す関数で文字列を取得するようにしています。

Sub showShapeType(oDraw As Object)
    
    InputBox "This is a Shape Type that you want to know.", _
        "Shape Type", oDraw.getShapeType
    
End Sub

この関数の利用例を下記に示します。

Sub Main

    Dim oSheet As Object
    Dim oDrawPage As Object
    Dim oDraw As Object
    
    oSheet = ThisComponent.CurrentController.ActiveSheet
    oDrawPage = oSheet.getDrawPage
    
    oDraw = oDrawPage.getByIndex(0)
    
    showShapeType(oDraw)
    
End Sub

後は実行して、InputBoxに表示された文字列をコピー&ペースとして使っています。

テーマ:OpenOffice.org - ジャンル:コンピュータ

図形オブジェクトの位置

前回取得した図形オブジェクトの位置を取得したり、設定する方法を解説します。

まず、図形オブジェクトの左端からの距離をメッセージボックスに表示する例を示します。

Sub showDrawWidth
    
    Dim oSheet As Object
    Dim oDrawPage As Object
    Dim oDraw As Object
    
    oSheet = ThisComponent.CurrentController.ActiveSheet
    oDrawPage = oSheet.getDrawPage
    
    oDraw = oDrawPage.getByIndex(0)
    MsgBox oDraw.Position.X
    
End Sub

取得された数値の単位は1/100 mmです。例えば、1cmならは「10000」となります。
同様に、上端からの距離を取得するためにはXをYに変えます。

次に設定する方法をsetDrawSize関数の作例を使って示します。

Sub setDrawPosition(oDraw As Object, X As Long, Y As Long)
    
    Dim aPos As New com.sun.star.awt.Point
    
    aPos.X = X
    aPos.Y = Y
    
    oDraw.setPosition(aPos)
    
End Sub

位置の設定にはsetPositionメソッドを使いますが、そのメソッドに渡す変数はcom.sun.star.awt.Point型です。
Newステートメントで新しいPosition用の変数を作成し、それぞれにXとYを設定しsetPositionメソッドで割り当てます。この時に設定する数値も単位は1/100mmなので、1cmならば「10000」となります。

テーマ:OpenOffice.org - ジャンル:コンピュータ

COPYRIGHT(C) 2004 POWERD BY FC2 ALLRIGHT RESERVED.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。