更新不同系列的图表

时间:2016-05-30 10:05:12

标签: excel vba charts macros

我在excel宏中使用这段代码强制更新大量重叠图表:

Set sht = ActiveSheet
For Each co In sht.ChartObjects
    co.Activate

    For Each sc In ActiveChart.SeriesCollection
        sc.Select
        temp = sc.Formula
        MsgBox temp
        sc.Formula = "=SERIES(,,1,1)"
        sc.Formula = temp
    Next sc
Next co

代码很好但是在一个包含5个元素(而不是4个)系列的图表上,我在这一行上出错:

sc.Formula = "=SERIES(,,1,1)"

您能否建议我如何修改代码以使其适用于我的所有图表?

2 个答案:

答案 0 :(得分:1)

好的,我已经用这段代码解决了:

import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;

public class ConcatObservabeList {

    public static void main(String[] args) {

        ObservableList<IntegerProperty> list1 = FXCollections.observableArrayList();
        IntegerProperty ip = new SimpleIntegerProperty(0);
        ip.addListener(System.out::println);
        list1.add(ip);
        ObservableList<IntegerProperty> list2 = FXCollections.observableArrayList();
        ObservableList<IntegerProperty> concat = FXCollections.concat(list1, list2);
        concat.get(0).setValue(42);
        concat.addListener(new ListChangeListener<IntegerProperty>() {
            @Override
            public void onChanged(ListChangeListener.Change<? extends IntegerProperty> c) {
                System.out.println("concat changed " + c);
            }
        });
        concat.add(new SimpleIntegerProperty(Integer.MAX_VALUE));
    }
}

答案 1 :(得分:0)

= SERIES(,, 1,1)中有4个值,因为它是一系列4个元素。

如果有5个元素(或更多或更少),您必须计算这些元素。

我不知道 ActiveChart.SeriesCollection.Count 是否会计算系列集合的元素。

Dim tmpText As String

tmpText = ""

For i = 3 To ActiveChart.SeriesCollection.Count

    tmpText = tmpText & ",1"

Next i

sc.Formula = "=SERIES(," & tmpText & ")"

我从 3 开始,因为 = SERIES(,, 1,1)中的前2个值为空。

结果将是 ActiveChart.SeriesCollection.Count 5

  

sc.Formula =&#34; = SERIES(,, 1,1,1)&#34;

如果少于3个元素,必须在for循环中设置 i = 1

你应该自己尝试一下。 :)

修改

SeriesCollection.Count