OpenOffice.org Basicでガントチャート
OpenOffice.org Basicを使ってガントチャート作成用マクロ ガントチャートforOOoを開発する手順を紹介していきます。
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
データ読込み「項目」その1

項目型を使って、「項目」シートからデータを取り出す仕組みを作りますが、ここで、準備で紹介したシート選択、セルの値取得関数を利用します。
項目に関するプログラムをまとめるため、新しいモジュールを作成して「mdlItem」とし、以下はそのモジュール内に書きます。
「分類」と同様にユーザー定義型を作成するのですが、今後の便利のために進捗データを取得・設定する方法に一工夫を加えます。

mdlItem
Option Explicit

Type ItemType
    _Id As Integer
    _Name As String
    _CategoryId As Integer
    _PersonId As Integer
    _Note As String
    _Complete As Boolean
    _Status As Integer
    _Hyperlink As String
    _UpperId As Integer
    _Spare As String
    _Progress1 As Date
    _Progress2 As Date
    _Progress3 As Date
    _Progress4 As Date
    _Progress5 As Date
    _Progress6 As Date
    _Progress7 As Date
    _Progress8 As Date
    _Progress9 As Date
    _Progress10 As Date
    _Progress11 As Date
    _Progress12 As Date
    _Progress13 As Date
    _Progress14 As Date
    _Progress15 As Date
    _Progress16 As Date
    _Progress17 As Date
    _Progress18 As Date
    _Progress19 As Date
    _Progress20 As Date
End Type
 
Public Sub setProgress(Item As ItemType, _
    ByVal Num As Integer, Value As Date) '---(1)
    
    Select Case Num
        Case 1	:Item._Progress1 = Value
        Case 2	:Item._Progress2 = Value
        Case 3	:Item._Progress3 = Value
        Case 4	:Item._Progress4 = Value
        Case 5	:Item._Progress5 = Value
        Case 6	:Item._Progress6 = Value
        Case 7	:Item._Progress7 = Value
        Case 8	:Item._Progress8 = Value
        Case 9	:Item._Progress9 = Value
        Case 10	:Item._Progress10 = Value
        Case 11	:Item._Progress11 = Value
        Case 12	:Item._Progress12 = Value
        Case 13	:Item._Progress13 = Value
        Case 14	:Item._Progress14 = Value
        Case 15	:Item._Progress15 = Value
        Case 16	:Item._Progress16 = Value
        Case 17	:Item._Progress17 = Value
        Case 18	:Item._Progress18 = Value
        Case 19	:Item._Progress19 = Value
        Case 20	:Item._Progress20 = Value
    End Select
    
End Sub
 
Public Function getProgress(Item As ItemType, _
    ByVal Num As Integer) As Date '---(2)
    
    Dim wk As Date
    
    Select Case Num
        Case 1	:wk = Item._Progress1
        Case 2	:wk = Item._Progress2
        Case 3	:wk = Item._Progress3
        Case 4	:wk = Item._Progress4
        Case 5	:wk = Item._Progress5
        Case 6	:wk = Item._Progress6
        Case 7	:wk = Item._Progress7
        Case 8	:wk = Item._Progress8
        Case 9	:wk = Item._Progress9
        Case 10	:wk = Item._Progress10
        Case 11	:wk = Item._Progress11
        Case 12	:wk = Item._Progress12
        Case 13	:wk = Item._Progress13
        Case 14	:wk = Item._Progress14
        Case 15	:wk = Item._Progress15
        Case 16	:wk = Item._Progress16
        Case 17	:wk = Item._Progress17
        Case 18	:wk = Item._Progress18
        Case 19	:wk = Item._Progress19
        Case 20	:wk = Item._Progress20
    End Select
    
    getProgress = wk
    
End Function

内容について説明します。

  1. 進捗データを設定する関数です
  2. 進捗データを取得する関数です

この関数を作成する意味はなかなか理解しづらいかもしれませんが、こうしておく事でプログラミングがとても簡便になります。例として、一つの工程データから進捗データ1~20を全て「2006/1/1」に設定する必要がある場合の違いを示します。

定義しない場合
Sub Sample
    Dim Item As ItemType
    Dim tmp As Date
    tmp = CDate("2006/1/1")
    
    With Item
        ._Progress1 = tmp
        ._Progress2 = tmp
        ._Progress3 = tmp
        ._Progress4 = tmp
        ._Progress5 = tmp
        ._Progress6 = tmp
        ._Progress7 = tmp
        ._Progress8 = tmp
        ._Progress9 = tmp
        ._Progress10 = tmp
        ._Progress11 = tmp
        ._Progress12 = tmp
        ._Progress13 = tmp
        ._Progress14 = tmp
        ._Progress15 = tmp
        ._Progress16 = tmp
        ._Progress17 = tmp
        ._Progress18 = tmp
        ._Progress19 = tmp
        ._Progress20 = tmp
    End Item
End Sub
定義した場合
Sub Sample
    Dim Item As ItemType
    Dim tmp As Date
    tmp = CDate("2006/1/1")
    
    Dim i As Integer
    For i = 1 To 20
        setProgress(Item, i, tmp)
    Next i
End Sub

ただ処理速度の面から考えるとこのような関数の定義は良くないかもしれませんし、好みの問題もあるかもしれません。以降のマクロ開発にはこの関数を用いますが、問題だと感じる方は好きな方を使って下さい。

スポンサーサイト
コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://shinob.blog42.fc2.com/tb.php/22-dcf96acd
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック
COPYRIGHT(C) 2004 POWERD BY FC2 ALLRIGHT RESERVED.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。