2016-03-06 162 views
0

我編譯了以下宏以在Excel工作表的右側創建3個圖表。VBA Excel在圖表上設置水平軸

Sub CreateChart() 
Dim objChart As ChartObject 
Dim myChtRange As Range 
Dim myDataRange As Range 
With ActiveSheet 

Set myChtRange = Range("M10:Q23") 
' What range contains data for chart 
Set myDataRange = ActiveSheet.ListObjects("Table2").Range 
' Cover chart range with chart 
Set objChart = .ChartObjects.Add(_ 
    Left:=myChtRange.Left, Top:=myChtRange.Top, _ 
    Width:=myChtRange.Width, Height:=myChtRange.Height) 
' Put all the right stuff in the chart 
With objChart.Chart 
    .ChartArea.AutoScaleFont = False 
    .ChartType = xlLine 
    .ChartStyle = 245 
    .SetSourceData Source:=myDataRange 
    .HasTitle = True 
    .HasLegend = False 
    .ChartTitle.Characters.Text = "PO By Year" 
    .ChartTitle.Font.Bold = True 
    .ChartTitle.Font.Size = 12 

    With .Axes(xlCategory, xlPrimary) 
     .HasTitle = True 
     With .AxisTitle 
      .Characters.Text = "Year" 
      .Font.Size = 10 
      .Font.Bold = True 
     End With 
    End With 
    With .Axes(xlValue, xlPrimary) 
     .HasTitle = True 
     .DisplayUnit = xlMillions 
     .HasDisplayUnitLabel = False 
     With .AxisTitle 
      .Characters.Text = "Millions" 
      .Font.Size = 10 
      .Font.Bold = True 
     End With 
    End With 
End With 

Set myChtRange = Range("S10:W23") 
' What range contains data for chart 
Set myDataRange = ActiveSheet.ListObjects("Table17").ListColumns(5).Range 
' Cover chart range with chart 
Set objChart = .ChartObjects.Add(_ 
    Left:=myChtRange.Left, Top:=myChtRange.Top, _ 
    Width:=myChtRange.Width, Height:=myChtRange.Height) 
' Put all the right stuff in the chart 
With objChart.Chart 
    .ChartArea.AutoScaleFont = False 
    .ChartType = xlLine 
    .ChartStyle = 245 
    .SetSourceData Source:=myDataRange 
    .HasTitle = True 
    .HasLegend = False 
    .ChartTitle.Characters.Text = "Invoices By Year" 
    .ChartTitle.Font.Bold = True 
    .ChartTitle.Font.Size = 12 
    With .Axes(xlCategory, xlPrimary) 
     .HasTitle = True 
     With .AxisTitle 
      .Characters.Text = "Years" 
      .Font.Size = 10 
      .Font.Bold = True 
     End With 
    End With 
    With .Axes(xlValue, xlPrimary) 
     .HasTitle = True 
     .DisplayUnit = xlMillions 
     .HasDisplayUnitLabel = False 
     With .AxisTitle 
      .Characters.Text = "Millions" 
      .Font.Size = 10 
      .Font.Bold = True 
     End With 
    End With 
End With 

Set myChtRange = Range("Y10:AC23") 
' What range contains data for chart 
Set myDataRange = ActiveSheet.ListObjects("Table30").ListColumns(5).Range 
' Cover chart range with chart 
Set objChart = .ChartObjects.Add(_ 
    Left:=myChtRange.Left, Top:=myChtRange.Top, _ 
    Width:=myChtRange.Width, Height:=myChtRange.Height) 
' Put all the right stuff in the chart 
With objChart.Chart 
    .ChartArea.AutoScaleFont = False 
    .ChartType = xlLine 
    .ChartStyle = 245 
    .SetSourceData Source:=myDataRange 
    .HasTitle = True 
    .HasLegend = False 
    .ChartTitle.Characters.Text = "Req to PO" 
    .ChartTitle.Font.Bold = True 
    .ChartTitle.Font.Size = 12 
    With .Axes(xlCategory, xlPrimary) 
     .HasTitle = True 
     With .AxisTitle 
      .Characters.Text = "Time" 
      .Font.Size = 10 
      .Font.Bold = True 
     End With 
    End With 
    With .Axes(xlValue, xlPrimary) 
     .HasTitle = True 
     .DisplayUnit = xlMillions 
     .HasDisplayUnitLabel = False 
     With .AxisTitle 
      .Characters.Text = "Days" 
      .Font.Size = 10 
      .Font.Bold = True 
     End With 
    End With 
End With 
End With 
End Sub 

我引用的第一個圖表表如下所示:

Table Example

,所得圖表如下所示: enter image description here

的問題是我不能確定如何獲得在橫軸上顯示的年份而不是點1,2,3,4 ....

我是否需要引用整個表格,正如我爲表2所做的那樣,還是需要參考第5列,如我對錶17所做的操作?

宏記錄器沒有顯示從圖示圖表到水平軸上年份的圖表的步驟。

回答

1

你嘗試過這樣的事情:

ActiveChart.SeriesCollection(1).XValues = "='Sheet1'!$A$1:$A$4" 

其中的SeriesCollection(1)是該系列的名稱,當然使用的地方實際上多年的而不是Sheet1等

+0

隨着範圍objChart.Chart ........ .SeriesCollection(1).XValues = ActiveSheet.ListObjects(「Table2」).ListColumns(2).Range –

相關問題