Тема: Вписать формулу в отчет MS Excel
Добрый день.
Спрашивают - как это сделать. Написать тут стесняются;-), поэтому напишу сам про свои наблюдения.
Есть 2 варианта.
1. Текст формулы задается в теле запроса отчета в spFormBuilder примерно так (формулы пишутся на языке локализации вашего Excel):
SELECT f1, ..., fn, "=ЕСЛИ(RC[-3]-RC[-2]>0;ЕСЛИ(RC[-3]-RC[-2]>RC[-1];RC[-1];RC[-3]-RC[-2]);0)" AS myFormula FROM myTable
2. На отчет вешается Дополнительный Макрос примерно такого содержания (формулы пишутся на английском, это VBA):
Sub SetFormula()
Dim StartRow, EndRow, LastRow
Dim ws As Worksheet
Dim rng As Range
Const FooterHeight = 3 'это смещение вверх последней строки, куда вписываются формулы, относительно последней строки отчета (высота подножия)
Const FormulaColumn = 3 ' колонка, куда вписываем формулу
Const FormulaText = "=RC[-2]*RC[-1]" ' впишите сюда свою формулу в формате ссылок R1C1
Set ws = ActiveSheet
StartRow = ws.AutoFilter.Range.Columns(2).SpecialCells(xlCellTypeVisible).Row + 1 'первая строка данных отчета определяется как следующая за строкой фильтра
LastRow = ws.Cells.SpecialCells(xlLastCell).Row
EndRow = LastRow - FooterHeight
Set rng = ws.Range(Cells(StartRow, 3), Cells(EndRow, 3))
rng.FormulaR1C1 = FormulaText
End Sub
Мне кажется, что второй вариант правильнее, т.к. формулу нужно вписать именно в свойство ячейки Formula, а не Value (а именно так происходит при импорте текстового файла), ибо во втором случае пути Excel неисповедимы - захочет он этот текст интерпретировать как формулу или оставит текстом. Практика показывает, что один и тот же отчет на разных машинах получался и так, и так.
Напишите, пожалуйста, о своем опыте.