VBA的使用(2)

1. 图表操作

Sub InsertGraph()
Dim myChtObj As ChartObject
Dim rngChtData As Range
Dim rngChtXVal As Range
Dim iColumn As Long
Dim mySrs As Series
 
 ' make sure a range is selected
 If TypeName(Selection) <> "Range" Then Exit Sub
 
 ' define chart data
 Set rngChtData = Sheets("Graph").Range("d5:bc25")
 
 ' define chart's X values
 With rngChtData
   Set rngChtXVal = .Columns(1).Offset(1).Resize(.Rows.Count - 1)
 End With
 
  ' add the chart
  Set myChtObj = ActiveSheet.ChartObjects.Add _
  (Left:=250, Width:=800, Top:=75, Height:=350)
  With myChtObj.Chart
    .Legend.Delete                                           'delete legend
    .Axes(xlValue).MinimumScale = 0                          'set min time value
    .Axes(xlValue).MaximumScale = 1                          'set max time value
    .Axes(xlValue).MajorUnit = 0.0416666666                  'set time increments to 1 hr
    .Axes(xlValue).TickLabels.Orientation = 55               'set time label angle
    .Axes(xlCategory).CategoryType = xlCategoryScale         'set date labels to text
    .Axes(xlCategory).ReversePlotOrder = True                'set order to reverse order
    .ChartType = xlBarStacked                                ' make an XY chart
    .HasTitle = True                                         'add chart title
    .ChartTitle.Characters.Text = Sheets(1).Range("a1") & Chr(10) & "DUTY TIME RECORD FOR WEEK ENDING" _
      & " " & Format(Sheets(20).Range("D24"), "mm/dd/yyyy") & Chr(10) & Chr(10) & Sheets(20).Range("b3") _
      & Chr(10) & "EMP ID - " & Sheets(20).Range("b2")       'set chart title
    .ChartGroups(1).GapWidth = 0
    Do Until .SeriesCollection.Count = 0                     ' remove extra series
      .SeriesCollection(1).Delete
    Loop
 
    ' add series from selected range, column by column
    For iColumn = 2 To rngChtData.Columns.Count
      With .SeriesCollection.NewSeries
        .Values = rngChtXVal.Offset(, iColumn - 1)
        .XValues = "=GRAPH!$D$6:$D$25"                       'set verticle labels
      End With
    Next
 
  'set all bar colors to blue
  For i = 1 To .SeriesCollection.Count
    With .SeriesCollection(i)
      .Interior.Color = RGB(114, 137, 234)
    End With
     i = i + 1
    Next

  'set flight time bar colors to yellow
  For m = 1 To .SeriesCollection.Count
    For x = 2 To .SeriesCollection(m).Points.Count
      With .SeriesCollection(m).Points(x)
        .Interior.Color = RGB(248, 240, 86)
      End With
      x = x + 2
   Next
  Next

    'set even numbered series to transparent
  For n = 2 To .SeriesCollection.Count
    With .SeriesCollection(n)
      .Interior.ColorIndex = xlNone
    End With
   n = n + 1
  Next
 End With
End Sub

 

posted @ 2013-03-31 10:46  马语者  阅读(992)  评论(0编辑  收藏  举报