2012-12-17 17 views
0

如何讓圖形填充特定範圍?前一段時間,我發現如何使用VBA來做到這一點,但是我不能爲了我的生活找出如何再做一次。我想要一個圖表來填充特定的範圍,如F1到K8。這樣,如果左側的其他列由於用戶輸入而發生更改,圖形仍然保持在該範圍內,使所有內容都看起來不錯。如何讓圖形填充特定範圍?另外,如何使用VBA更改圖形中標記的大小?

我的第二個問題是,如何使用VBA更改Excel圖表上標記的大小?我繪製了數千個數據點,默認標記是巨大的鑽石,所以圖形看起來很可笑,其中有成千上萬個。這條線就是這件令人難以置信的事情。

還有一個額外的獎勵問題!我使用VBA製作整個圖表。我正在製作兩個系列。但是,插入兩個系列時,它會添加第三個系列,其中沒有數據點。如果它沒有出現在圖例中,它不會令人討厭。我如何刪除一個系列?

謝謝!這是相關的代碼。 Counter和NewTracker是基於用戶輸入的變量。對於我正在使用的數據,我相信Counter = 13和NewTracker = 1202,但我不認爲這是基於我的問題!如果你喜歡使用一個例子,只需用更好的東西替換範圍。 :)

Sub Makingthechart() 
    ActiveSheet.Shapes.AddChart.Select 
    ActiveChart.ChartType = xlXYScatter 
    ActiveChart.SeriesCollection.NewSeries 
    ActiveChart.SeriesCollection(1).Name = "=Sheet1!$B$1" 
    ActiveChart.SeriesCollection(1).XValues = "=Sheet1!$A$2:$A$" & Counter + 1 
    ActiveChart.SeriesCollection(1).Values = "=Sheet1!$B$2:$B$" & Counter + 1 
    ActiveChart.SeriesCollection.NewSeries 
    ActiveChart.SeriesCollection(2).Name = "CFL Calculated" 
    ActiveChart.SeriesCollection(2).XValues = "=Sheet1!$XFB$1:$XFB$" & NewTracker 
    ActiveChart.SeriesCollection(2).Values = "=Sheet1!$XFC$1:$XFC$" & NewTracker 
    With ActiveWorkbook.ActiveChart 
     .HasTitle = True 
     .ChartTitle.Characters.Text = "CFL Over Time" 
     .Axes(xlCategory, xlPrimary).HasTitle = True 
     .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Time (Days)" 
     .Axes(xlValue, xlPrimary).HasTitle = True 
     .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "CFL" 
     .Axes(xlCategory).HasMajorGridlines = True 
     .Axes(xlCategory).HasMinorGridlines = True 
    End With 
End Sub 

我非常感謝您的幫助!你們是我迄今爲止在我的實習中一直非常成功的原因!我無法相信你們都知道我無法通過谷歌找到的關於VBA的所有這些微小的事情。

+2

'ChartObject'具有'Top'和'Left'屬性,您可以將它們設置爲單元格F1的頂部和左側。然後將「寬度」和「高度」設置爲要繪製的範圍的寬度和高度。 –

+0

我想相信,但我找不到這方面的證據。我覺得我應該可以像**一樣使用ActiveChart,.Left = Cells(something)**,但我找不到像這樣的東西。 – TheTreeMan

+0

在工作表上,圖表託管在一個「ChartObject」中,因此它是您需要設置其頂部和左側的這個對象。您不能設置圖表本身的位置,只能是容器。 –

回答

2
Sub Makingthechart() 
    Dim co As Shape, cht As Chart 
    Dim rngChart As Range, sc As SeriesCollection 

    Set rngChart = ActiveSheet.Range("F2:J15") 


    Set co = ActiveSheet.Shapes.AddChart(xlXYScatter, rngChart.Cells(1).Left, _ 
              rngChart.Cells(1).Top, _ 
              rngChart.Width, rngChart.Height) 

    Set cht = co.Chart 
    Set sc = cht.SeriesCollection 

    'remove any default series 
    Do While sc.Count > 0 
     sc(1).Delete 
    Loop 

    With sc.NewSeries 
     .Name = "=Sheet1!$B$1" 
     .XValues = "=Sheet1!$A$2:$A$" & counter + 1 
     .Values = "=Sheet1!$B$2:$B$" & counter + 1 
     .MarkerSize = 3 
    End With 

    With sc.NewSeries 
     .Name = "CFL Calculated" 
     .XValues = "=Sheet1!$XFB$1:$XFB$" & newtracker 
     .Values = "=Sheet1!$XFC$1:$XFC$" & newtracker 
     .MarkerSize = 3 
    End With 

    With cht 
     .HasTitle = True 
     .ChartTitle.Characters.Text = "CFL Over Time" 
     .Axes(xlCategory, xlPrimary).HasTitle = True 
     .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Time (Days)" 
     .Axes(xlValue, xlPrimary).HasTitle = True 
     .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "CFL" 
     .Axes(xlCategory).HasMajorGridlines = True 
     .Axes(xlCategory).HasMinorGridlines = True 
    End With 
End Sub 
+0

這個工程!謝謝! sc.Count圖表上的系列數量是多少?那麼Do While循環刪除了系列,直到零爲止? – TheTreeMan

+0

是的,就是這樣。很高興聽到它適合你。 –

相關問題