タイトル | : MSFlexGrid での作成結果(差し替え分) |
記事No | : 12665 |
投稿日 | : 2008/07/02(Wed) 09:23 |
投稿者 | : 花ちゃん |
Option Explicit Private Sub Form_Load() Dim i As Long Dim j As Long '仮データの作成部分(CSVファイル 等を使っても OK ) Dim KDat(3, 2) As Variant KDat(0, 0) = "タイトル": KDat(0, 1) = "開始日時": KDat(0, 2) = "終了日時" KDat(1, 0) = "工 程 1": KDat(1, 1) = "1:08": KDat(1, 2) = "2:08" KDat(2, 0) = "工 程 2": KDat(2, 1) = "1:18": KDat(2, 2) = "2:18" KDat(3, 0) = "工 程 3": KDat(3, 1) = "2:04": KDat(3, 2) = "3:04" Form1.Move 0, 0, 10400, 4000 With MSHFlexGrid1 'MSFlexGrid の初期設定 .FocusRect = flexFocusNone 'フォーカスを示す四角形を描かない .HighLight = flexHighlightAlways '選択されたセルを常に強調表示 .Move 150, 150, 10000, 3000 '表示位置と大きさを設定 .FixedRows = 1 '固定行の数 Rowsより1以上少ない事 .FixedCols = 0 '固定列の数 .Cols = 34 '列数の設定(31日分) .Rows = 10 '行数の設定(必要分) .RowHeightMin = 400 '行の高さを設定 .ColWidth(0) = 1000 '列幅を設定 .ColWidth(1) = 900 '列幅を設定 .ColWidth(2) = 900 '列幅を設定 For i = 0 To .Cols - 1 .Col = i: .Row = 0 .CellAlignment = flexAlignCenterCenter '表示位置を中央揃えに設定 If i > 2 Then .ColWidth(i) = 2250 '半角で24文字分 '日付の表示 .TextMatrix(0, i) = "8月" & CStr(i - 2) & "日" End If Next i '初期のカーソル位置 .Col = 0: .Row = 1 'データ部分の表示(CSVファイルから読み込んでも OK ) For i = 0 To 3 For j = 0 To 2 .TextMatrix(i, j) = KDat(i, j) 'データの表示 Next j Next i End With 'グラフ部分の表示 Call SetData End Sub Private Sub SetData() Dim i As Long Dim j As Long Dim SD As Integer '開始日 Dim ED As Integer '終了日 Dim ST As Integer '開始時間 Dim ET As Integer '終了時間 Dim myDat As Variant Dim s1 As String '当日分 Dim s2 As String '翌日分 With MSHFlexGrid1 For i = 1 To 3 myDat = Split(.TextMatrix(i, 1), ":") SD = myDat(0) '開始日の取得 myDat = Split(.TextMatrix(i, 2), ":") ED = myDat(0) '終了日の取得 myDat = Split(.TextMatrix(i, 1), ":") ST = myDat(1) 'スタート時間の取得 myDat = Split(.TextMatrix(i, 2), ":") ET = myDat(1) '終了時間の取得 If SD = ED Then '開始日と終了日が同じ場合 '開始時間までの時間数分スペースを付加し当日内の時間分 > を表示 s1 = String$(ST, " ") & String$(ET - ST, ">") .TextMatrix(i, SD) = s1 Else s1 = String$(ST, " ") & String$(24 - ST, ">") s2 = String$(ET, ">") & String$(24 - ET, " ") .TextMatrix(i, SD + 2) = s1 '開始日の分 .TextMatrix(i, ED + 2) = s2 '終了日の分 End If Next i End With End Sub
最近同じような質問が結構多いのでサンプルを作り直しました。 但し、汎用ではないし、叩き台的なものなので、後はご自分で工夫して下さい。 ここのサンプルの セルに直接データーを入力する(エクセルのように)No.34 と 組み合わせれば、直接データを編集する事も簡単にできます。
結果の図 http://www.hanatyan.sakura.ne.jp/samplepic/gantt.gif
MSHFlexGrid コントロールの詳しい使い方は下記をどうぞ。 http://hanatyan.sakura.ne.jp/vbhlp/MSFlexind.htm
|