2015-06-01 5 views
1

Я работаю над проектом 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) 

ответ

1

Если вы используете

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

вместо

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

'1004' уходит. Избавляет меня, почему, но это всегда стоит попробовать, когда «.formula» приводит к ошибке. Однако вам все равно придется поразмышлять над позиционированием диаграмм. В настоящее время они все сложены друг на друга. Но это должно быть выполнимо.

+0

Спасибо! В самом деле, нет ошибки при использовании '.FormulaR1C1'. Меня озадачивает, почему это работает. Позиционирование работает отлично для меня (4 строки, начинающиеся с 'newc.Left = ...' делает это. – Moldevort

+0

Да, тайны MS. -.- В любом случае, рад это слышать. Можете ли вы закрыть это/принять ответ? – burtelli

Смежные вопросы