2011-12-30 2 views
0

Я пытался вставить формулу непосредственно в ячейку и привязать ее к ячейкам вокруг нее на основе того, где она размещена (R1C1). Я включил функцию макроса записи в excel и отредактировал ячейку с требуемой формулой и нажал enter. Excel предоставил мне следующую функцию. Нечетная часть этого вопроса заключается в том, что это точная формула excel дала мне, и когда я пытаюсь запустить эту функцию, она выдает ошибку «ошибка времени выполнения 1004»: ошибка, определяемая приложением или объектом. Фон на use: сама функция предназначена только для бюджета, который я создаю, и он использует ячейку для двух столбцов для принятия решения о продолжении нумерации или создании подмножества числа выше (TR - обозначение для общего запроса, поэтому все, что не является ТР, является подмножеством общего запроса, и будет обозначен последний известный номер & «A», «B», и т.д.)Ручная запись Excel Macro error - вставить формулу в ячейку

ActiveCell.FormulaR1C1 = _ 
     "=IF(RC[2]=""TR"",IF(R[-1]C[2]<>""TR"",IF(R[-2]C[2]<>""TR"",IF(R[-3]C[2]<>""TR"",IF(R[-4]C[2]<>""TR"",IF(R[-5]C[2]<>""TR"",IF(R[-6]C[2]<>""TR"",IF(R[-7]C[2]<>""TR"",""add more"",R[-7]C+1),R[-6]C+1),R[-5]C+1),R[-4]C+1),R[-3]C+1),R[-2]C+1),R[-1]C+1), IF(R[-1]C[2]=""TR"",IF(RC[2]<>""TR"",R[-1]C&""A"",R[-1]C+1),IF(R[-2]C[2]=""TR"",R[-2]C&""B"",IF(R[-3]C[2]=""TR"",R[-3]C&" & "(R[-4]C[2]=""TR"",R[-4]C&""D"",IF(R[-5]C[2]=""TR"",R[-5]C&""E"",IF(R[-6]C[2]=""TR"",R[-6]C&""F"",IF(R[-7]C[2]=""TR"",R[-7]C&""G"",""""))))))))" 

Любая помощь на этом будет понятно, благодаря

Редактировать: Я на работе, и я не могу ответить в строке, поэтому я решил попробовать здесь: Ниже записанный макрос как есть.

Sub Macro7() 
' 
' Macro7 Macro 
' 

' 
ActiveCell.FormulaR1C1 = _ 
    "=IF(RC[2]="""","""",IF(RC[2]=""TR"",IF(R[-1]C[2]<>""TR"",IF(R[-2]C[2]<>""TR"",IF(R[-3]C[2]<>""TR"",IF(R[-4]C[2]<>""TR"",IF(R[-5]C[2]<>""TR"",IF(R[-6]C[2]<>""TR"",IF(R[-7]C[2]<>""TR"",""add more"",R[-7]C+1),R[-6]C+1),R[-5]C+1),R[-4]C+1),R[-3]C+1),R[-2]C+1),R[-1]C+1), IF(R[-1]C[2]=""TR"",IF(RC[2]<>""TR"",R[-1]C&""A"",R[-1]C+1),IF(R[-2]C[2]=""TR"",R[-2]C&""B"",IF(R[-3]" & _ 
    "R"",R[-3]C&""C"",IF(R[-4]C[2]=""TR"",R[-4]C&""D"",IF(R[-5]C[2]=""TR"",R[-5]C&""E"",IF(R[-6]C[2]=""TR"",R[-6]C&""F"",IF(R[-7]C[2]=""TR"",R[-7]C&""G"","""")))))))))" 


Range("C121").Select 


End Sub 

Это записанный макрос из функции макроса записи.

Формула была разработана в excel, и я пытаюсь ее повторно использовать внутри макроса. причина, по которой я не пробовал случай выбора или что-то в этом роде, потому что эта формула была разработана для динамического изменения основанных на ней ячеек. Поэтому, если я добавлю строку над ней и вставляю новую строку бюджета (это для бюджета, как указано выше), строки ниже этого будут соответственно изменяться.

редактировать: ех, что он выглядит как первенствует:

enter image description here

+2

может вы просто describe что ты хочешь делать? Ваша чудовищная серия вложенных IFs предполагает, что выбор VBA Select или цикл будет лучшим решением. Но я не могу сказать, каков предполагаемый результат ... –

+0

Я хотел бы увидеть снимок вашей записанной формулы как - он дает правильный ответ? – brettdj

+0

Я сделал снимок записанного макроса выше: В качестве примера того, что он делает: Если у вас есть бюджетная строка, он будет занимать номер над ним и добавить 1, если у вас есть корректировка бюджета item, вы можете сохранить один и тот же номер (чтобы позволить группировать элементы вместе) и просто добавить буквы, a, b, c и т. д. В качестве ссылки выше причина, по которой я хотел использовать формулу, заключается в том, что этот бюджет будет часто используется, и эта формула используется для обеспечения автоматической корректировки нумерованных элементов. Хотя я открыт для предложений. – JWysocki

ответ

1

У вас ошибка в формуле, поэтому VBA не добавляет формулу.

Я вытащил формулу и попытался поместить ее вручную, и excel выдает сообщение о том, что есть ошибка.

+0

Я тоже вытащил его, и скопировал его в excel, это сработало для меня ... однако, если бы я схватил '-' после последнего ')' (обозначая конец комментария), это будет ошибка ... – JWysocki

+0

Не из комментария, а из макроса. –

+0

Правильно, это была моя цель. Он был создан с использованием функции «record macro» в excel ... которая, как я думал, всегда даст вам результат, который Excel сможет использовать. – JWysocki

0

Со всеми взад и вперед по возможным ошибкам в формуле, это явно слишком громоздкой, чтобы легко отлаживать, так вот альтернатива:

=COUNTIF(E$16:E128,"TR")&IF(E128="TR","",IF(E127="TR","A",CHAR(CODE(MID(C127,2,1))+1))) 

или в R1C1 формате

=COUNTIF(R16C[2]:RC[2],"TR")&IF(RC[2]="TR","",IF(R[-1]C[2]="TR","A",CHAR(CODE(MID(R[-1]C,2,1))+1))) 

и VBA код для добавления его в активную ячейку

ActiveCell.FormulaR1C1 = _ 
    "=COUNTIF(R2C[2]:RC[2],""TR"")& _ 
    IF(RC[2]=""TR"","""",IF(R[-1]C[2]=""TR"",""A"",CHAR(CODE(MID(R[-1]C,2,1))+1)))" 

У этого есть добавленный benifit не ограничивается 7 уровнями (ну, на практике это ограничение ограничено 26 уровнями, после чего будет добавлено несколько нечетных символов)

Примечание: может потребоваться корректировка первой ссылки на ячейку R2C[2] в соответствии со стартовой строкой ваших данных , например, если первый ранг в строке 128 изменений его R128C[2]

Как это работает:

  • Подсчитайте количество TR-й в таблице вплоть до этой строки.
  • Если столбец типа является TR, вернуть этот счет
  • В противном случае, если тип в строке выше TR, добавьте A
  • В противном случае, получить символ от конца Rank в строке выше, приращение это следующий характер и добавьте его
  • Примечание: Если первый тип неTR вы получите неожиданные результаты вниз к в first TR
Смежные вопросы