在数据透视图中为单个图表值创建永久趋势线
Creating a permanente trendline in Pivot Chart for a single chart value
我正在尝试仅为数据透视图上的一个图表值创建永久趋势线。我已经为此编写了一个宏,但我的 for 循环中的 if-else 语句似乎被忽略了。
这是我在 Moduel1 中的代码:
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
这是我在 Sheet2 中的代码:
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Call AddTrendLine
End Sub
这是我得到的:
这是我想看的:
如有任何建议,我们将不胜感激。
&
forces string concatenation and is not a logical operator; 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
我想通了。这是我的最终解决方案:
模块:
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
工作表 2:
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Call AddTrendLine
End Sub
我正在尝试仅为数据透视图上的一个图表值创建永久趋势线。我已经为此编写了一个宏,但我的 for 循环中的 if-else 语句似乎被忽略了。
这是我在 Moduel1 中的代码:
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
这是我在 Sheet2 中的代码:
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Call AddTrendLine
End Sub
这是我得到的:
这是我想看的:
如有任何建议,我们将不胜感激。
&
forces string concatenation and is not a logical operator; 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
我想通了。这是我的最终解决方案:
模块:
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
工作表 2:
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Call AddTrendLine
End Sub