这是我的两个工作表的小例子。
原单 :
如您所见,此工作表有两个单元格等待在后期重新计算。 (即带有红色#Eval 标记的单元格)
结果表 :
在上面的结果表中,我们得到了两个结果,分别是草莓和桃子。这两个结果是为两个#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;
}
最佳答案
就个人而言,我会重新考虑并按照 Excel 期望 UDFS 的方式编写您的 UDF:
然后您在原始工作表中的 UDF =DataResult(ResultSheet!A1)
如果这种方法不适合您的整体任务,您可能需要创建一个由某个事件触发器或按钮调用的 C# 宏,而不是 UDF。
关于c# - 如何从另一个工作表中获取单元格值并将其分配给 UDF 的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7513077/