2017-08-30 1 views
2

Ich versuche, einen Trend im Laufe der Zeit basierend auf dem Fortschritt pro Woche mit einem Excel-Diagramm zu zeigen. Wie erzwinge ich mithilfe von VBA, dass die Hilfsstrichsbeschriftungen für die xlCategory-Achse an jedem Montag in meinem Datensatz gefangen werden? Ist das möglich? Ich weiß, wie man die Achsen formatiert, aber ich weiß nicht, wie ich es jeden Montag erzählen soll. Vielen Dank!Wie machen Sie Ticklabels für Chart am Montag jeder Woche?

Ich bin mir bewusst, dass es eine Option gibt, die Majorunit und Minorunit zu ändern, vielleicht kann ich diese irgendwie verwenden? Das ist, was ich habe, so weit:

On Error Resume Next 
ActiveSheet.ChartObjects.Delete 
On Error GoTo 0 

Set metricschart = sht.Shapes.AddChart.Chart 

With metricschart 
    .Parent.Name = "metricschart" 
    .HasTitle = True 
    .ChartTitle.Text = "Business Requirements Tested Over Time" 
    .ChartTitle.Characters.Font.Size = 14 
    .ChartType = xlXYScatterSmoothNoMarkers 
    .SetSourceData Source:=sht2.Range("A1:DA2") 
    .Location where:=xlLocationAsObject, Name:=sht.Name 
    .Parent.Height = 325 
    .Parent.Width = 600 
    .Parent.Top = 70 
    .Parent.Left = 350 
    .Legend.LegendEntries(1).Delete 
    .Axes(xlCategory).MinimumScale = sht2.Range("A1") 
    .Axes(xlCategory).MaximumScale = sht2.Range("DA1") 
    .Axes(xlCategory).TickLabels.NumberFormat = "m/d" 
    .Axes(xlCategory).MajorUnit = vbMonday 'this doesn't work, shows way too many days 
End With 

Der obige Code macht die Achse wie folgt (alle 2 Tage): enter image description here

Dies ist, was meine Daten wie folgt aussieht: enter image description here

+0

Können Sie die Daten Ihres Blattes anzeigen? –

+0

"Verwenden von VBA" ... Welchen Code haben Sie bisher und wo stecken Sie fest? –

Antwort

3

Die Trick besteht darin, die Kategorieachse auf die Zeitskala zu setzen, einen Montag für den Startwert zu bestimmen und einfach die Ticks an jedem siebten Tag hinzuzufügen.

Sub Test() 
Dim cht As Chart 
Dim ax As Axis 

Set cht = Worksheets(1).ChartObjects(1).Chart 
Set ax = cht.Axes(xlCategory) 

With ax 
    .CategoryType = xlTimeScale 'For dates 
    .MajorUnit = 7 'Only 1 tick every 7 days 
    .AxisBetweenCategories = False 'Tick exactly on the date, not between the values. 
    .CrossesAt = 42975 'the integer value of the date you wish to be the first one. In this case 2017-08-28. 
End With 

End Sub 
+0

Das Einstellen des Kategorietyps, der Haupteinheit auf 7 und der Achse zwischen den Kategorien hat genau das gemacht, was ich brauchte. Früher im Code habe ich die MinimumScale und MaximumScale gesetzt, so dass ich alles für den Anfang der Achse eingestellt bin. Vielen Dank! –

Verwandte Themen