-1

Я пытаюсь создать (и, возможно, мне вообще не следует использовать Excel) календарь с отображением стиля диаграммы Ганта в Excel. Я знаю, что есть программное обеспечение, которое разработано для диаграмм Ганта самостоятельно. Это не то, что мне нужно.

Я в основном буду отвечать за обеспечение моего босса календарем, подобным этому:

Но мне нужно отобразить даты начала, даты окончания и вехи в этом. Итак, я имею в виду, что я мог бы иметь функцию автоматического создания формы, а затем автоматически заполнять текст в этой форме (имя события и т.д.).

Если это займет немного реального программирования, это нормально. Я не беспокоюсь об изучении VBA, но я хочу убедиться, что это правильный путь, прежде чем идти по этому пути. Если я должен использовать для этого какое-то программное обеспечение, отличное от Excel, я тоже с этим согласен.

Совет? Мнения?

1 ответ1

0

Это похоже на то, что календарь Outlook может сделать.

Однако то, что вы описываете, выполнимо. Вы изучите программирование на VBA.

Кое-что из этого будет выглядеть так, чтобы поместить гантоподобный бар (пока без текста) ...

Option Explicit
Sub main()
    Call InsertBar(0, 800)
End Sub
Sub InsertBar(LeftStart As Long, TotalWidth As Long)
Dim myWkSht As Worksheet
Dim myShp As Shape
Dim MaxWidth As Long, nBars As Long
Dim bDone As Boolean, iLoop As Long
Dim myStart() As Long, myWidth() As Long

If LeftStart < 0 Then Exit Sub
If TotalWidth <= 0 Then Exit Sub

Set myWkSht = Worksheets("Sheet2")
MaxWidth = myWkSht.Range("O1").Left
bDone = False
nBars = 1
ReDim myStart(1 To nBars)
ReDim myWidth(1 To nBars)
myStart(nBars) = LeftStart
myWidth(nBars) = TotalWidth
Do While Not bDone
    If myStart(nBars) + myWidth(nBars) < MaxWidth Then
        bDone = True
    Else
        nBars = nBars + 1
        ReDim Preserve myStart(1 To nBars)
        ReDim Preserve myWidth(1 To nBars)
        myStart(nBars) = 0
        myWidth(nBars - 1) = MaxWidth - myStart(nBars - 1)
        myWidth(nBars) = TotalWidth - myWidth(nBars - 1)
    End If
Loop
For iLoop = 1 To nBars
    With myWkSht
        Set myShp = .Shapes.AddShape(msoShapeRectangle, _
            myStart(iLoop), .Range("A10").Offset((iLoop - 1) * 6, 0).Top, _
            myWidth(iLoop), .Range("A10").Offset((iLoop - 1) * 6, 0).Height)
    End With
    With myShp
        .Fill.ForeColor.ObjectThemeColor = msoThemeColorBackground2
        .Fill.ForeColor.TintAndShade = 0
        .Fill.ForeColor.Brightness = 0
        .Fill.Transparency = 0
        .Fill.Solid

        .Line.ForeColor.ObjectThemeColor = msoThemeColorBackground2
        .Line.ForeColor.TintAndShade = 0
        .Line.ForeColor.Brightness = 0
        .Line.Transparency = 0
    End With
Next iLoop
End Sub

Мой стартовый элементарный календарь начинается следующим образом ...

... и выглядит так после запуска примера кода ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .