Действительно, формула должна быть .FormulaArray
, и что-то вроде этого работает вполне нормально, как упомянуто @ Domenic :
`formulaText = "=IF(INDEX(Tabelle1!$A$2000:$M$2000,MATCH(Tabelle1!$E16&$I16&$J16,Tabelle1!$D:$D&Tabelle1!$E:$E&Tabelle1!$F:$F,0),9)>=$M16,""materials supplied"","""")"`
В любом случае, это случай VBA, где некоторые тестовые разработки могут быть полезны, чтобы иметь возможность сделать это самостоятельно. В чем идея тестирования? Одним предложением вы продолжаете писать код, пока ваш код не будет соответствовать ожидаемым значениям.
Итак, очевидно, что вы можете написать формулу самостоятельно в Excel, не используя VBA. Вы хотите использовать VBA по какой-то причине (и причина в том, что это отличный язык программирования). Таким образом, вы пишете формулу в Excel в ячейке C15
и продолжаете работать, пока не получите ту же формулу с VBA в C16
. Тест может выглядеть следующим образом, отображая различия в двух формулах:
Sub FirstTest()
With Worksheets(1)
Debug.Print .Cells(16, "C").Formula = .Cells(15, "C").Formula
Debug.Print .Cells(16, "C").Formula
Debug.Print .Cells(15, "C").Formula
End With
End Sub
Если вы запустите код сейчас, ничего не написав, он вернет False
и разницу двух ячеек. Итак, в VBA вы можете начать с выбора уже работающей формулы и запустить следующий код:
Public Sub PrintMeUsefulFormula()
Dim strFormula As String
Dim strParenth As String
strParenth = """"
strFormula = Selection.Formula
strFormula = Replace(strFormula, """", """""")
strFormula = strParenth & strFormula & strParenth
Debug.Print strFormula
End Sub
Затем посмотрите, что вы получаете в ближайшем окне Ctrl + G и замените его точно на месте формулы. Это выглядит так (в немецком Excel):
"=IF(INDEX(Tabelle1!$A$2000:$M$2000,MATCH(Tabelle1!$E16&$I16&$J16,Tabelle1!$D:$D&Tabelle1!$E:$E&Tabelle1!$F:$F,0),9)>=$M16,""materials supplied"","""")"
Теперь начинается самое интересное - у вас уже есть рабочий код, который проходит тесты - в Excel имена рабочих листов предварительно кодируются, поэтому все в порядке. Однако , вам нужно сделать формулы "гибкими" с переменными для рабочих листов и рабочих книг. Вот где тесты действительно ценны. Вы можете начать замену в строке формулы и убедиться, что она пройдет тесты до конца. Если что-то не получается, вы всегда можете вернуться к последнему изменению и продолжить попытки. Попробуйте:)