这是我的两个工作表的小例子。
原始表:
如您所见,此工作表有两个单元格等待在稍后阶段重新计算。 (即带有红色#Eval标记的细胞)
结果表:
在上面的结果表中,我们得到了两个结果,分别是草莓和桃子。这两个结果是为两个#Eval单元格准备的,需要替换#Eval标记。
请注意,UDF实际上返回了#Eval,表示需要重新计算此单元格。重新计算将通过单击按钮等手动启动。
另请注意,位置映射在两张纸上 - 如果#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;
}
答案 0 :(得分:2)
就个人而言,我会重新思考并按照Excel期望UDFS的方式编写UDF:
然后原始工作表中的UDF = DataResult(ResultSheet!A1)
如果此方法不适合您的整体任务,您可能需要创建一个C#宏,该宏由一些事件触发器或按钮而不是UDF调用。
答案 1 :(得分:1)
从UDF中调用 Application.Caller 将返回调用单元格的Range对象。然后,您的UDF可以从另一个工作表中的相应位置读取数据。