使用 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'导致错误时总是值得尝试。不过,您仍然需要考虑一下图表的定位。目前,它们都堆叠在一起。但这应该是可行的。
我正在开展一个 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'导致错误时总是值得尝试。不过,您仍然需要考虑一下图表的定位。目前,它们都堆叠在一起。但这应该是可行的。