用VBA改变系列公式。错误代码1004

时间:2015-06-01 22:59:02

标签: excel vba charts excel-formula series

我正在开展一个excel项目,该项目有助于在为每个单一值生成图表时可视化血液工作。

由于我试图阻止图表中的空值,我添加了两张实际管理数据("#data")和图表(" #chart")的表格。在"数据"一个人输入值和日期,在"图表"你会看到图表(不会显示空图表),#34; #data"有助于生成系列和#34; #chart"实际上带有图表。

目前我正在开发一个VBA脚本,这个脚本可以帮助我在" #chart"上复制图表。并改变重复的系列(我需要大约100个)。它适用于第一个副本,但在第二个我得到运行时错误#1004:应用程序定义的对象定义错误。 我认为它可能与图表的系列有关,所以我使系列的范围相同 - 不幸的是,这并没有解决问题。第一个重复完美,第二个没有。

这是指向我文件的链接: http://ovh.to/ZkmYCUk

复制脚本:

Sub tt()

    j = 3
    L = "C"
    s = 4 * (j - 1)

    Cr = Int((j - 1) / 4) + 1
    cc = (j - 1) Mod 4 + 1

    Dim oldc As ChartObject
    Dim newc As Object
    Set ws = Sheets("#charts")
    no = "CH_A"
    nn = "CH_" & L

    Set oldc = ws.ChartObjects(no)
    Set newc = oldc.Duplicate
    newc.Name = nn

    newc.Left = ws.Cells(Cr, cc).Left
    newc.Top = ws.Cells(Cr, cc).Top
    newc.Height = ws.Cells(Cr, cc).Height
    newc.Width = ws.Cells(Cr, cc).Width

    For k = 1 To newc.Chart.SeriesCollection.Count
        With newc.Chart.SeriesCollection(k)
            .Formula = Replace(.Formula, "A", L)
        End With
    Next k

    newc.Chart.ChartTitle.Text = "='#data'!$A$" & (s + 2)
End Sub

图表系列:

A_L = IF(COUNT(data!$F$3:$S$3)>0; OFFSET('#data'!$B$1; 0; 0; 1; COUNT(data!$F$3:$S$3)); 0)
A_V = IF(COUNT(data!$F$3:$S$3)>0; OFFSET('#data'!$B$2; 0; 0; 1; COUNT(data!$F$3:$S$3)); 0)
A_M = IF(COUNT(data!$F$3:$S$3)>0; OFFSET('#data'!$B$3; 0; 0; 1; COUNT(data!$F$3:$S$3)); 0)
A_D = IF(COUNT(data!$F$3:$S$3)>0; OFFSET('#data'!$B$4; 0; 0; 1; COUNT(data!$F$3:$S$3)); 0)

B_L = IF(COUNT(data!$F$4:$S$4)>0; OFFSET('#data'!$B$5; 0; 0; 1; COUNT(data!$F$4:$S$4)); 0)
B_V = IF(COUNT(data!$F$4:$S$4)>0; OFFSET('#data'!$B$6; 0; 0; 1; COUNT(data!$F$4:$S$4)); 0)
B_M = IF(COUNT(data!$F$4:$S$4)>0; OFFSET('#data'!$B$7; 0; 0; 1; COUNT(data!$F$4:$S$4)); 0)
B_D = IF(COUNT(data!$F$4:$S$4)>0; OFFSET('#data'!$B$8; 0; 0; 1; COUNT(data!$F$4:$S$4)); 0)

C_L = IF(COUNT(data!$F$5:$S$5)>0; OFFSET('#data'!$B$9; 0; 0; 1; COUNT(data!$F$5:$S$5)); 0)
C_V = IF(COUNT(data!$F$5:$S$5)>0; OFFSET('#data'!$B$10; 0; 0; 1; COUNT(data!$F$5:$S$5)); 0)
C_M = IF(COUNT(data!$F$5:$S$5)>0; OFFSET('#data'!$B$11; 0; 0; 1; COUNT(data!$F$5:$S$5)); 0)
C_D = IF(COUNT(data!$F$5:$S$5)>0; OFFSET('#data'!$B$12; 0; 0; 1; COUNT(data!$F$5:$S$5)); 0)

1 个答案:

答案 0 :(得分:1)

如果您使用

.FormulaR1C1 = Replace(.FormulaR1C1 , "A", L)

而不是

.Formula = Replace(.Formula, "A", L)
'1004'消失了。打败我为什么,但当'.formula'导致错误时,它总是值得尝试。你仍然需要考虑一下图表的位置。目前,它们都堆叠在一起。但这应该是可行的。