VBA Evaluate не работает без ручного вмешательства с первого раза - PullRequest
0 голосов
/ 14 февраля 2020

У меня странная проблема с Evaluate. StrFormula - это строка с формулой. При выполнении этого кода я получаю ошибку времени выполнения 13: несоответствие типов. Я проверил, что формула в strFormula действительна (я скопировал и вставил ее в ячейку Excel, и она оценивает и возвращает TRUE / FALSE). Также длина строки не превышает 255 символов, так как я считаю, что Evaluate может обрабатывать только до 255 символов.

'Reading the formula template from a cell
strFormula = Trim(ThisWorkbook.Sheets("Validation").Cells(1, 3))

'Replacing the R# in the formula with the Row# to build the actual formula to evaluate
strFormula = Replace(strFormula, "R#", iRowCounter)

blnTest = Evaluate(strFormula)

Теперь вот странная часть - когда я получаю ошибку Несоответствия типов, если я нажимаю Отладка, а затем, если я go на вкладке Формула и нажимаю «Рассчитать сейчас» или «Рассчитать лист» "ИЛИ если я наберу любую формулу (например, = 1 + 1) в любой ячейке в Excel, а затем нажму F8 или F5, чтобы продолжить выполнение в режиме отладки, то оценка работает нормально! (возвращает TRUE / FALSE и выполнение продолжается). Я проверил, что опция расчета установлена ​​в Automati c, и в коде я не изменяю ее.

Есть идеи, почему Evaluate не работает в первом случае? Я попытался поместить несколько фиктивных (как показано ниже) операторов Evaluate перед этим, чтобы посмотреть, помогает ли это, но эти операторы оценки работали нормально, и в моем утверждении появилась ошибка несоответствия типов. Я попытался поместить ActiveSheet.Calculate перед оператором Evaluate, чтобы заставить Excel вычислить перед выполнением фактической оценки, но это тоже не помогло.

temp = Evaluate("=1 * 1")
temp = Evaluate("=1 + 1")
blnTest = Evaluate(strFormula)

Любые указания о том, как решить эту проблему, будут великолепны!

...