2011-04-06 37 views
1

我試圖使用VBA將許多系列添加到圖表中,如下面的代碼所示。在Excel圖表上添加一個空系列

For i = 0 To 9 
    Set serNew = chtMap.SeriesCollection.NewSeries 
    With serNew 
     .XValues = Range("Y4").Cells(1, 1 + 2 * i).Resize(32000, 1) 
     .Values = Range("Y4").Cells(1, 2 + 2 * i).Resize(32000, 1) 
    End With 
Next i 

一些系列的範圍在他們的細胞沒有數據;用戶稍後將寫入/加載此數據。這個想法是讓他們做好準備。

問題:當循環遇到這樣一個空的範圍時,出現錯誤1004:無法設置Series類的XValues屬性。爲什麼還有解決方法?

奇怪的是,在圖表菜單 - > |源數據...手動執行此操作完全正常。其實,如果你錄製宏,而手動這樣做,結果如下:

ActiveChart.SeriesCollection.NewSeries 
ActiveChart.SeriesCollection(4).XValues = "=Sheet2!R4C31:R32003C31" 
ActiveChart.SeriesCollection(4).Values = "=Sheet2!R4C32:R32003C32" 

但隨後Excel中給出了一個錯誤,當重新玩這個宏!

這樣做手動不是一個愉快的前景。我想我可以在單元格中粘貼假數據,創建系列,然後刪除假數據。我真的必須拉這樣的誘餌並開啓Excel嗎?

回答

0

我已經決定增加一個工作表按鈕調用子,可以添加已輸入數據。它還會在實際添加每個系列之前檢查各個範圍是否爲空。這感覺就像是最乾淨的解決方案。

0

我建議(如我自己做的那樣)在某處隱藏一些假數據,並將所有系列默認值指向那裏。用.LineStyle=xlNone.MarkeStyle=xlNone甚至ActiveChart.Legend.LegendEntries(i).Delete來隱藏該圖。然後,當客戶填寫數據時,運行一個替換系列指向位置的宏,並設置線條/標記樣式以及ActiveChart.HasLegend = True以重新創建圖例條目。如果事實上我必須關閉圖例,然後再重新開始,以便正確重置。

祝你好運。

+0

是的,這部分是我在問題中提出的自我...排序令人沮喪的解決方案,不是。 – 2011-04-12 16:53:45

1

你可以嘗試複製的範圍內(兩列),並使用選擇性粘貼將其添加到圖表:

TwoColumnRange.Copy 
chtMap.SeriesCollection.Paste Rowcol:=xlColumns, SeriesLabels:=False, _ 
    CategoryLabels:=True, Replace:=False, NewSeries:=True 
0

老問題,但...

我剛纔寫的代碼,並在Excel 2010進行測試和2016年它增加了一個新的系列,以現有的XY散點圖,並使用了新系列公式鏈接到空白範圍對於.name和.Values和.XValues:

Sub AddBlankSeries() 
    Dim srs As Series 

    Set srs = ActiveChart.SeriesCollection.NewSeries 

    With srs 
    .Name = "=" & ActiveSheet.Range("E2").Address(, , , True) 
    .Values = ActiveSheet.Range("E3:E8") 
    .XValues = ActiveSheet.Range("D3:D8") 
    End With 
End Sub 

然後我又回到了原來的代碼:

Sub AddSeveralBlankSeries() 
    Dim i As Long 
    Dim chtMap As Chart 
    Dim serNew As Series 

    Set chtMap = ActiveSheet.Shapes.AddChart(xlXYScatterLines).Chart 

    For i = 0 To 9 
    Set serNew = chtMap.SeriesCollection.NewSeries 
    With serNew 
     .XValues = Range("Y4").Cells(1, 1 + 2 * i).Resize(32000, 1) 
     .Values = Range("Y4").Cells(1, 2 + 2 * i).Resize(32000, 1) 
    End With 
    Next i 
End Sub 

這也運行得很好,並且該系列引用預期範圍在工作表中。

所以我不知道問題是什麼。

相關問題