0

我正在尝试为数据透视图上的一个图表值创建一个永久趋势线。我为此编写了一个宏,但似乎我的 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

这是我得到的:

这是我得到的

这是我想看到的:

这是我想看到的

任何建议将不胜感激。

4

2 回答 2

1

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

当前mySeriesCol(i).Trendlines.Count > 0被评估,结果(真/假)与文本“实际”连接。&

所以你当前的代码相当于

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
于 2019-12-19T18:29:23.677 回答
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

表2:

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Call AddTrendLine
End Sub
于 2019-12-20T00:36:51.467 回答