我正在尝试仅为数据透视图上的一个图表值创建永久趋势线。我已经为此编写了一个宏,但是似乎我的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
这就是我得到的:
这是我想看到的:
任何建议将不胜感激。
答案 0 :(得分:1)
当前对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