2016-01-11 4 views
1

Я пытаюсь создать простой макрос, который в основном добавляет новый colum, называя его, вставляя формулу и заполняя ее. Я получаю ошибку как в теме:Ошибка времени выполнения '1004': метод 'FormulaR1C1' объекта 'Range' failed

Ошибка выполнения '1004': Метод 'FormulaR1C1' объекта 'Range' не удалось

Вот формула:

=IF(OR($G2=DATA!$L$3;G2=DATA!$L$4;$G2=DATA!$L$5;$G2=DATA!$L$6;$G2=DATA!$L$7;$G2=DATA!$L$8;$G2=DATA!$L$9;$G2=DATA!$L$10);DATA!$L$2; IF(OR($G2=DATA!$M$3;G2=DATA!$M$4;$G2=DATA!$M$5;$G2=DATA!$M$6;$G2=DATA!$M$7;$G2=DATA!$M$8;$G2=DATA!$M$9;$G2=DATA!$M$10);DATA!$M$2; IF(OR($G2=DATA!$N$3;G2=DATA!$N$4;$G2=DATA!$N$5;$G2=DATA!$N$6;$G2=DATA!$N$7;$G2=DATA!$N$8;$G2=DATA!$N$9;$G2=DATA!$N$10);DATA!$N$2; IF(OR($G2=DATA!$O$3;G2=DATA!$O$4;$G2=DATA!$O$5;$G2=DATA!$O$6;$G2=DATA!$O$7;$G2=DATA!$O$8;$G2=DATA!$O$9;$G2=DATA!$O$10);DATA!$O$2; IF(OR($G2=DATA!$P$3;G2=DATA!$P$4;$G2=DATA!$P$5;$G2=DATA!$P$6;$G2=DATA!$P$7;$G2=DATA!$P$8;$G2=DATA!$P$9;$G2=DATA!$P$10);DATA!$P$2; "OTHER"))))) 

И макрос:

Sub Macro16() 
' 
' Macro16 Macro 
' 

' 
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 
    Range("I1").Select 
    ActiveCell.FormulaR1C1 = "CSS Team" 
    Range("I2").Select 
    ActiveCell.FormulaR1C1 = _ 
     "=IF(OR(RC7=DATA!R3C12,RC[-2]=DATA!R4C12,RC7=DATA!R5C12,RC7=DATA!R6C12,RC7=DATA!R7C12,RC7=DATA!R8C12,RC7=DATA!R9C12,RC7=DATA!R10C12),DATA!R2C12, IF(OR(RC7=DATA!R3C13,RC[-2]=DATA!R4C13,RC7=DATA!R5C13,RC7=DATA!R6C13,RC7=DATA!R7C13,RC7=DATA!R8C13,RC7=DATA!R9C13,RC7=DATA!R10C13),DATA!R2C13, IF(OR(RC7=DATA!R3C14,RC[-2]=DATA!R4C14,RC7=DATA!R5C14,RC7=DATA!R6C14,RC7=DATA!R7C" & _ 
     "ATA!R8C14,RC7=DATA!R9C14,RC7=DATA!R10C14),DATA!R2C14, IF(OR(RC7=DATA!R3C15,RC[-2]=DATA!R4C15,RC7=DATA!R5C15,RC7=DATA!R6C15,RC7=DATA!R7C15,RC7=DATA!R8C15,RC7=DATA!R9C15,RC7=DATA!R10C15),DATA!R2C15, IF(OR(RC7=DATA!R3C16,RC[-2]=DATA!R4C16,RC7=DATA!R5C16,RC7=DATA!R6C16,RC7=DATA!R7C16,RC7=DATA!R8C16,RC7=DATA!R9C16,RC7=DATA!R10C16),DATA!R2C16, ""OTHER"")))))" 
    Range("I2").Select 
    Selection.AutoFill Destination:=Range("I2:I21445") 
    Range("I2:I21445").Select 
End Sub 

ответ

2

в 663 символов, ваша формула может быть слишком долго, чтобы быть засунуты в клетку, как Range.Formula property или Range.FormulaR1C1 property, но главной проблемой является тот факт, что VBA очень ориентирован на EN-US, и ваша формула должна быть передана в свойство запятыми как разделители списков, а не полуколонны, независимо от того, что региональная система вашего компьютера указывает полу -colon как символ разделителя списков и что при вводе формулы на рабочий лист вы используете полуточку.

=IF(OR($G2=DATA!$L$3,G2=DATA!$L$4,$G2=DATA!$L$5,$G2=DATA!$L$6,$G2=DATA!$L$7,$G2=DATA!$L$8,$G2=DATA!$L$9,$G2=DATA!$L$10), DATA!$L$2, 
IF(OR($G2=DATA!$M$3,G2=DATA!$M$4,$G2=DATA!$M$5,$G2=DATA!$M$6,$G2=DATA!$M$7,$G2=DATA!$M$8,$G2=DATA!$M$9,$G2=DATA!$M$10), DATA!$M$2, 
IF(OR($G2=DATA!$N$3,G2=DATA!$N$4,$G2=DATA!$N$5,$G2=DATA!$N$6,$G2=DATA!$N$7,$G2=DATA!$N$8,$G2=DATA!$N$9,$G2=DATA!$N$10), DATA!$N$2, 
IF(OR($G2=DATA!$O$3,G2=DATA!$O$4,$G2=DATA!$O$5,$G2=DATA!$O$6,$G2=DATA!$O$7,$G2=DATA!$O$8,$G2=DATA!$O$9,$G2=DATA!$O$10), DATA!$O$2, 
IF(OR($G2=DATA!$P$3,G2=DATA!$P$4,$G2=DATA!$P$5,$G2=DATA!$P$6,$G2=DATA!$P$7,$G2=DATA!$P$8,$G2=DATA!$P$9,$G2=DATA!$P$10), DATA!$P$2, 
    "OTHER"))))) 

Если вам абсолютно необходимо использовать точку с запятой, вы можете применить Remi-двоеточия формулы с Range.FormulaLocal property.

-Addendum:

Я сократить формулу вниз до 98 символов в xlA1 стиле.

=IFERROR(INDEX(Data!L$2:P$2, 1, AGGREGATE(15, 6, COLUMN($A:$E)/(Data!$L$3:$P$10=G2), 1)), "OTHER") 

Ваша исходная формула находится в F2, заполненном до F8. Предложенная выше формула находится в E2, заполненном до E8.

semi_colon_formula

+1

'FormulaR1C1' может содержать формулу гораздо больше, чем что - 8192 символов я думаю –

+0

спасибо Крис. Я постараюсь проверить это. Я работал под впечатлением, что ограничение при использовании VBA было намного меньше, но я проверю. – Jeeped

+1

[Эта страница] (https://msdn.microsoft.com/en-us/library/office/ff700514 (v = office.14) .aspx) требует 8000 для Excel 2010 (от 1000 в Excel 2003). И [эта страница] (https://support.office.com/en-nz/article/Excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3) претензии 8192 –

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