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

工程型を使って、「工程」シートからデータを取り出す仕組みを作りますが、ここで、準備で紹介したシート選択、セルの値取得関数を利用します。
工程に関するプログラムをまとめるため、新しいモジュールを作成して「mdlSchedule」とし、以下はそのモジュール内に書きます。

まず工程データを取得する関数を作成し、その他に必要な設定を「mdlMain」に追記します。

mdlSchedule
Option Explicit '---(1)
 
Type ScheduleType '---(2)
    _Id As Integer
    _Name As String
    _ItemId As Integer
    _PlanBegin As Date
    _PlanEnd As Date
    _PlanColor As Long
    _ActBegin As Date
    _ActEnd As Date
    _ActColor As Long
    _LineType As Integer
    _Weight As Long
End Type
 
Public ScheduleSheetName As String '---(3)
Public ScheduleSheet As Object
 
Public Schedules() As ScheduleType '---(4)
 
Public Function LoadAll() As Integer '---(5)
    
    Dim i As Integer
    
    If flgLoaded Then
        LoadAll = UBound(Schedules())
        Exit Function
    End If
    
    Redim Preserve Schedules(0)
    
    i = 1
    Do
        If Cells(ScheduleSheet, 1, i + 1).Value = 0  Then Exit Do '---(6)
        Redim Preserve Schedules(i)
        LoadById(Schedules(i), i)
        i = i + 1
    Loop
    
    flgLoaded = True
    LoadAll = i - 1
    
End Function
 
Public Function LoadById(Schedule As ScheduleType, _
    ByVal Id As Integer) As Boolean '---(5)
    
    Dim i As Integer
    
    Id = Id + 1
    If Id < 2 Or Cells(ScheduleSheet, 1, Id).Value = 0 Then '---(7)
        LoadById = False
        Exit Function
    End If
    
    i = 1 '---(8)
    With Schedule
        ._Id = Cells(ScheduleSheet, i, Id).Value: i = i + 1
        ._Name = Cells(ScheduleSheet, i, Id).String: i = i + 1
        ._ItemId = Cells(ScheduleSheet, i, Id).Value: i = i + 1
        ._PlanBegin = Cells(ScheduleSheet, i, Id).Value: i = i + 1
        ._PlanEnd = Cells(ScheduleSheet, i, Id).Value: i = i + 1
        ._PlanColor = Cells(ScheduleSheet, i, Id).Value: i = i + 1
        ._ActBegin = Cells(ScheduleSheet, i, Id).Value: i = i + 1
        ._ActEnd = Cells(ScheduleSheet, i, Id).Value: i = i + 1
        ._ActColor = Cells(ScheduleSheet, i, Id).Value: i = i + 1
        ._LineType = Cells(ScheduleSheet, i, Id).Value: i = i + 1
        ._Weight = Cells(ScheduleSheet, i, Id).Value: i = i + 1
    End With
    
    LoadById = True
    
End Function

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

  1. 変数の宣言を強制します。OOoBasicでは(VBAでも)、変数は宣言せずとも使用できるのですが、そのままマクロを作成していると、タイプミスなどでおかしな挙動をした時のデバッグが大変です。そこで、可能な限りこのオプションを使用することをお薦めします。
  2. 分類型を宣言します。
  3. 後々のためにデータシート名を記録する変数を用意します。
  4. データシート用のオブジェクトを生成しておきます。
  5. 個別データの読み込み関数と全データの読み込み関数を別で作ります。
  6. Idデータのセルを確認し、Idの記載が無ければ終了します。
  7. 不正なId値を指定された場合にFalseを返し、処理を終了します。
  8. 自作のCells関数は、1から始まるので左端の列を指定し、データを取り出す度に列を移動しながら全てのデータを取得します。

そして「mdlMain」モジュールに下記を追加します。これは今後の項目や工程の設定も同じようにすることで、今後のコーディングを楽にするための工夫です。そして今後、読み込みや書込み等のマクロを実行する際には、必ずmdlMain.Initiarizaという一文を入れておきます。

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