Я работаю над проектом excel, который помогает визуализировать работу крови при создании диаграммы для каждого отдельного значения.Изменение формулы серии с VBA. Код ошибки 1004
Как я пытаюсь предотвратить пустые значения в диаграммах, я добавил два листа, которые фактически управляют данными («#data») и диаграммами («#charts»). В «данных» вводится значения и даты, в «диаграммах» вы увидите диаграммы (пустые диаграммы не будут отображаться), «#data» помогает генерировать серии, а «#charts» фактически переносит диаграммы.
На данный момент я работаю над сценарием VBA, который поможет мне дублировать диаграмму на «#charts» и сменить серию для дубликатов (мне нужно около 100 из них). Он отлично работает для первого дубликата, но во втором я получаю ошибку времени выполнения # 1004: определение приложения для объектной ошибки. Я предположил, что это может иметь отношение к серии для диаграммы, поэтому я сделал диапазон для серии идентичным - к сожалению, это не решило проблему. 1-й дубликат отлично работает, второй нет.
Вот ссылка на мой файл: http://ovh.to/ZkmYCUk
Script для копировально:
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'. Меня озадачивает, почему это работает. Позиционирование работает отлично для меня (4 строки, начинающиеся с 'newc.Left = ...' делает это. – Moldevort
Да, тайны MS. -.- В любом случае, рад это слышать. Можете ли вы закрыть это/принять ответ? – burtelli