使用 VBA 更改级数公式。错误代码 1004

Changing series formula with VBA. Error Code 1004

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

因为我试图防止图表中出现空值,所以我添加了两张实际管理数据(“#data”)和图表(“#charts”)的工作表。在 "data" 中输入值和日期,在 "charts" 中您将看到图表(不会显示空图表),“#data”帮助生成系列,“#charts”实际携带图表。

目前我正在编写一个 VBA 脚本,它将帮助我在“#charts”上复制图表并更改副本的系列(我需要大约 100 个)。它适用于第一个副本,但在第二个副本上我得到一个 运行-time Error #1004: Application-defined of object-defined 错误。 我认为这可能与图表的系列有关,所以我将系列的范围设为相同 - 不幸的是,这并没有解决问题。第一个副本完美地工作,第二个没有。

这是我文件的 link: 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:$S)>0; OFFSET('#data'!$B; 0; 0; 1; COUNT(data!$F:$S)); 0)
A_V = IF(COUNT(data!$F:$S)>0; OFFSET('#data'!$B; 0; 0; 1; COUNT(data!$F:$S)); 0)
A_M = IF(COUNT(data!$F:$S)>0; OFFSET('#data'!$B; 0; 0; 1; COUNT(data!$F:$S)); 0)
A_D = IF(COUNT(data!$F:$S)>0; OFFSET('#data'!$B; 0; 0; 1; COUNT(data!$F:$S)); 0)

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

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

如果你使用

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

而不是

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

“1004”消失了。打败我为什么但是当'.formula'导致错误时总是值得尝试。不过,您仍然需要考虑一下图表的定位。目前,它们都堆叠在一起。但这应该是可行的。