Проблема со сложной формулой, помещаемой на лист через VBA и взаимодействующей с сводной таблицей - PullRequest
0 голосов
/ 10 мая 2019

У меня проблема с формулой, размещенной на моем листе через vba. Формула взаимодействует с данными в сводной таблице. При помещении в ячейку Y8 на листе следующая формула работает как нужно (не vba):

=IF(OR(L8="(blank)",L8=""),IF((K8-$A$2)/(365/12)<0,0,(K8-$A$2)/(365/12)),IF((L8-$A$2)/(365/12)<0,0,(L8-$A$2)/(365/12)))

Идея состоит в том, чтобы проверить, является ли L8 null или (blank), если так, то используйте эту формулу: IF((K8-$A$2)/(365/12)<0,0,(K8-$A$2)/(365/12)). Если L8 имеет значение (будет датой), тогда я хочу использовать эту слегка отличную формулу: IF((L8-$A$2)/(365/12)<0,0,(L8-$A$2)/(365/12))).

Столбцы L и K находятся в сводной таблице.

Я использовал activecell.formulaR1C1, чтобы перевести мою формулу на листе в R1C1. Единственное изменение, которое я сделал, было добавление набора кавычек вокруг "(blank)" -> ""(blank)"".

Я все еще получаю сообщение 1004 во время выполнения в строке формулы vba.

Мой VBA-код здесь:

Sub PerformFormulas()
Dim LastRow As Long

LastRow = Worksheets("Calculator").Range("C" & Rows.Count).End(xlUp).Row

Worksheets("Calculator").Range("Y8:Y" & LastRow - 1).FormulaR1C1 = "=IF(OR(RC[-13]=""(blank)"",RC[-13]=""),IF((RC[-14]-R2C1)/(365/12)<0,0,(RC[-14]-R2C1)/(365/12)),IF((RC[-13]-R2C1)/(365/12)<0,0,(RC[-13]-R2C1)/(365/12)))"

End Sub

Я проверил, что LastRow и Calculator распознаются правильно и они есть (я сменил простую формулу .select, и эта часть кода работает нормально).

Заранее спасибо за любую помощь!

1 Ответ

1 голос
/ 10 мая 2019

Вы не избежали другой пары кавычек:

"=IF(OR(RC[-13]=""(blank)"",RC[-13]=""), ...

должно быть

"=IF(OR(RC[-13]=""(blank)"",RC[-13]=""""), ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...