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

我正在开发一个excel项目,帮助可视化血液工作,为每个单一值生成图表。

正如我试图阻止图表中的空值,我添加了两张实际pipe理数据(“#data”)和图表(“#charts”)的表单。 在“数据”中input数值和date,在“图表”中您将看到图表(空白图表不会显示),“#数据”有助于生成系列,“#图表”实际上带有图表。

目前,我正在研究一个VBA脚本,它将帮助我复制“#charts”的图表并更改重复的系列(我需要大约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) 

如果你使用

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

代替

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

'1004'消失了。 打败我为什么,但总是值得尝试,当'.formula'导致一个错误。 尽pipe如此,你仍然需要考虑图表的位置。 目前他们都堆叠在一起。 但是这应该是可行的。