在数据透视图中为单个图表值创建永久趋势线

时间:2019-12-19 18:26:01

标签: excel vba pivot-table pivot-chart

我正在尝试仅为数据透视图上的一个图表值创建永久趋势线。我已经为此编写了一个宏,但是似乎我的for循环中的if-else语句被忽略了。

这是我在Moduel1中的代码:

/usr/local/bin/firebase

这是我在Sheet2中的代码:

Sub AddTrendLine()
Dim mySeriesCol As SeriesCollection

Set mySeriesCol = ActiveSheet.ChartObjects.Chart.SeriesCollection

For i = 1 To mySeriesCol.Count
    If mySeriesCol(i).Name <> "Actual" & mySeriesCol(i).Trendlines.Count > 0 Then
        mySeriesCol(i).Trendlines.Delete
    ElseIf mySeriesCol(i).Name = "Actual" & mySeriesCol(i).Trendlines.Count = 0 Then
        mySeriesCol(i).Trendlines.Add
End If
Next
End Sub

这就是我得到的:

Here is what I am getting

这是我想看到的:

Here is what I want to see

任何建议将不胜感激。

2 个答案:

答案 0 :(得分:1)

&强制进行字符串连接,并且不是逻辑运算符; And是。

当前对mySeriesCol(i).Trendlines.Count > 0进行求值,并且将结果(True / False)与& 串联为文本“ Actual”。

所以您当前的代码等同于

If mySeriesCol(i).Name <> "ActualFalse" '<~ or "ActualTrue" 

使用And

编辑:

还有问题:Set mySeriesCol = ActiveSheet.ChartObjects.Chart.SeriesCollection

您要使用特定的ChartObject

Sheet1.ChartObjects("your chart name").Chart.SeriesCollection

Sheet1.ChartObjects(1).Chart.SeriesCollection

编辑2:

没有Trendlines.Delete方法;是Trendline.Delete

mySeriesCol(i).Trendlines(1).Delete

答案 1 :(得分:0)

我能够弄清楚。这是我的最终解决方案:

模块:

Sub AddTrendLine()
Dim mySeriesCol As SeriesCollection

Set mySeriesCol = Sheet2.ChartObjects(1).Chart.SeriesCollection

For i = 1 To mySeriesCol.Count
    If mySeriesCol(i).Name <> "Actual" And mySeriesCol(i).Trendlines.Count > 0 Then
    mySeriesCol(i).Trendlines(1).Delete
ElseIf mySeriesCol(i).Name = "Actual" And mySeriesCol(i).Trendlines.Count = 0 Then
    mySeriesCol(i).Trendlines.Add
ElseIf mySeriesCol(i).Name = "Actual" And mySeriesCol(i).Trendlines.Count > 1 Then
    mySeriesCol(i).Trendlines(1).Delete
End If
Next
End Sub

Sheet2:

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Call AddTrendLine
End Sub