Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在透视图中为单个图表值创建永久趋势线_Excel_Vba_Pivot Table_Pivot Chart - Fatal编程技术网

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

Excel 在透视图中为单个图表值创建永久趋势线,excel,vba,pivot-table,pivot-chart,Excel,Vba,Pivot Table,Pivot Chart,我试图为透视图上的一个图表值创建一条永久趋势线。我已经为此编写了一个宏,但似乎忽略了for循环中的if-else语句 以下是我在Moduel1中的代码: Sub AddTrendLine() Dim mySeriesCol As SeriesCollection Set mySeriesCol = ActiveSheet.ChartObjects.Chart.SeriesCollection For i = 1 To mySeriesCol.Count If mySeriesCol(

我试图为透视图上的一个图表值创建一条永久趋势线。我已经为此编写了一个宏,但似乎忽略了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
以下是我得到的:

以下是我想看到的:

任何建议都将不胜感激。

强制字符串连接,而不是逻辑运算符;是

当前,mySeriesColi.Trendlines.Count>0被计算,结果True/False与&连接到文本Actual

因此,您当前的代码相当于

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

编辑2:

没有趋势线。删除方法;它是:


我能弄明白。以下是我的最终解决方案:

模块:

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

并且是逻辑运算符,不是&。谢谢,现在我得到另一个错误,显示运行时错误“438”:对象不支持Set mySeriesCol=ActiveSheet.ChartObjects.Chart.SeriesCollection的此属性或方法。这是什么意思?我提前道歉,我是VBA新手。我想那会出错。您希望使用特定的ChartObject,而不是ChartObjects集合:ActiveSheet.ChartObjectsyourChartName…我将我的pivot图表计划命名为vs Actual,但它一直说找不到具有特定名称的项。下面是我的代码:设置mySeriesCol=ActiveSheet.ChartObjectsPlan与Actual.Chart.SeriesCollection。我注意到Model1的两个孩子是mySeriesCol,Chart1和I。我尝试将其更改为设置mySeriesCol=ActiveSheet.ChartObjectsPlan与Actual.Chart1.SeriesCollection,但仍然出现相同的错误。会发生什么?是否在即时窗口中返回ActiveSheet.chartObjects1.Name?你也可以索引到ChartObjects集合中。是吗?活动Sheet.ChartObjects1.Name旁边有一个断点,表示如果没有合适的对象,方法无效。
Sheet1.ChartObjects("your chart name").Chart.SeriesCollection
Sheet1.ChartObjects(1).Chart.SeriesCollection
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
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Call AddTrendLine
End Sub