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

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

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

mdlPerson
Option Explicit '---(1)

Type PersonType '---(2)
    _Id As Integer
    _Name As String
    _Phone1 As String
    _Phone2 As String
    _FAX As String
    _EMail As String
    _Note As String
End Type

Public PersonSheetName As String '---(3)
Public PersonSheet As Object '---(4)
 
Public Persons() As PersonType
 
Public Function LoadAll As Integer '---(5)
    
    Dim i As Integer
    
    If flgLoaded Then
        LoadAll = UBound(Persons())
        Exit Function
    End If
    
    Redim Preserve Persons(0)
    
    i = 1
    Do
        If Cells(PersonSheet, 1, i + 1).Value = 0  Then Exit Do '---(6)
        Redim Preserve Persons(i)
        LoadById(Persons(i), i)
        i = i + 1
    Loop
    
    flgLoaded = True
    LoadAll = i - 1
    
End Function

Public Function LoadById(Person As PersonType, _
    ByVal Id As Integer) As Boolean '---(5)
    
    Dim i As Integer
    
    Id = Id + 1
    If Id < 2 Or Cells(PersonSheet, 1, Id).Value = 0 Then '---(7)
        LoadById = False
        Exit Function
    End If
    
    i = 1 '---(8)
    With Person
        ._Id = Cells(PersonSheet, i, Id).Value: i = i + 1
        ._Name = Cells(PersonSheet, i, Id).String: i = i + 1
        ._Phone1 = Cells(PersonSheet, i, Id).String: i = i + 1
        ._Phone2 = Cells(PersonSheet, i, Id).String: i = i + 1
        ._FAX = Cells(PersonSheet, i, Id).String: i = i + 1
        ._EMail = Cells(PersonSheet, i, Id).String: i = i + 1
        ._Note = Cells(PersonSheet, i, Id).String: 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へ追記
PersonSheetName = "担当"
PersonSheet = Sheets(PersonSheetName)
スポンサーサイト
コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://shinob.blog42.fc2.com/tb.php/31-0fe3800a
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック
COPYRIGHT(C) 2004 POWERD BY FC2 ALLRIGHT RESERVED.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。