tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル MSFlexGrid での作成結果(差し替え分)
投稿日: 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

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。