Вот небольшой пример моих двух рабочих листов.
Исходный лист :
![Original Sheet](https://i.stack.imgur.com/Eg4P1.jpg)
Как видите, в этом рабочем листе есть две ячейки, ожидающие пересчета на более позднем этапе.(т.е. ячейки с красным маркером #Eval)
Таблица результатов :
![Result Sheet](https://i.stack.imgur.com/p5B7h.jpg)
В приведенной выше таблице результатов мы получили два результата, Клубника и персик соответственно.Эти два результата подготовлены для двух ячеек #Eval и должны заменить маркер #Eval.
Обратите внимание, что #Eval фактически возвращается UDF, указывая на то, что эту ячейку необходимо пересчитать.Пересчет будет инициирован вручную нажатием кнопки или чего-то еще.
Также обратите внимание, что позиция отображается на двух листах - если #Eval находится в ячейке A3, то также будет отображаться результат вЯчейка A3 в таблице результатов также.
Итак, моя основная задача - заменить ячейку #Eval на соответствующий результат.Но у меня проблемы с передачей результатов в мой UDF - я не знаю, как программно получить ссылку / адрес ячейки, которая в настоящее время пересчитывается.
Ниже приведен код, который я получил в настоящее время, и я не думаю, что он был реализован правильно.Кто-нибудь может помочь?Или есть другой способ реализовать это?
Заранее спасибо.
//assign value from result sheet back to result variable
private string getResultFromResultSheet(Excel.Worksheet originalSheet, Excel.Worksheet resultSheet)
{
string DataResult = null;
//Excel.Range resultSheetRange = resultSheet.UsedRange;
//string addresse = resultSheetRange.get_Address(Type.Missing, Type.Missing, Excel.XlReferenceStyle.xlA1, Type.Missing, Type.Missing);
Excel.Range originalSheetRange = originalSheet.UsedRange; //<= I think it's incorrect here
string os_currentAddress = originalSheetRange.get_Address(Type.Missing, Type.Missing, Excel.XlReferenceStyle.xlA1, Type.Missing, Type.Missing);
Excel.Range currentRRange = null;
currentRRange = resultSheet.get_Range(os_currentAddress, Type.Missing);
if (currentRRange != null)
{
DataResult = currentRRange.Text;
}
return DataResult;
}