【问题标题】:Creating a permanente trendline in Pivot Chart for a single chart value在数据透视图中为单个图表值创建永久趋势线
【发布时间】:2020-04-12 08:50:23
【问题描述】:

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

这是我得到的:

这是我想看到的:

任何建议将不胜感激。

【问题讨论】:

  • And 是逻辑运算符,而不是 &amp;

标签: excel vba pivot-table pivot-chart


【解决方案1】:

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

目前mySeriesCol(i).Trendlines.Count &gt; 0 正在评估,结果(真/假)与&amp;连接到文本“实际”。

所以你当前的代码相当于

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

【讨论】:

  • 谢谢,现在我收到另一个错误消息,显示 Set mySeriesCol = ActiveSheet.ChartObjects.Chart.SeriesCollection 的“运行时错误 '438':对象不支持此属性或方法”。这是什么意思?我提前道歉,我是 VBA 新手。
  • 我认为这会引发错误。您想使用特定的 ChartObject,而不是 ChartObjects 集合:ActiveSheet.ChartObjects("yourChartName")...
  • 我将数据透视图命名为“计划与实际”,但它一直显示“未找到具有特定名称的项目”。这是我的代码:Set mySeriesCol = ActiveSheet.ChartObjects("Plan vs Actual").Chart.SeriesCollection。我注意到 Model1 的两个孩子是 mySeriesCol、Chart1 和 i。我尝试将其更改为Set mySeriesCol = ActiveSheet.ChartObjects("Plan vs Actual").Chart1.SeriesCollection,但仍然出现相同的错误。
  • ? ActiveSheet.chartObjects(1).Name 在即时窗口中返回什么?您还可以索引到ChartObjects 集合。
  • 我做了? Active Sheet.ChartObjects(1).Name,旁边有一个断点,上面写着“没有合适的对象,方法无效”。
【解决方案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

表2:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    • 1970-01-01
    相关资源
    最近更新 更多