以编程方式刷新工作表中的特定公式

我开发了一个Excel插件。 它向Excel应用程序公开了三个用户定义的公式。 所有的工作正常。 现在我需要添加一个刷新button,单击时只会刷新工作表中的那些公式。 所以在button的点击处理程序中,我需要写什么代码?

使用Application.CalculateFull()我可以刷新工作表中的所有公式。 有没有办法只刷新工作表中的特定公式而不是整个工作表?

 Range("A3:C5").Calculate 'calculate all the cells from A3 to C5 

要么

 Range("A3").Calculate 'only calculate cell A3 

我的意思是我开发了一个excel插件。它公开了3个用户定义的公式(x,y,z)来优化应用程序。 所有的工作正常..现在我需要添加一个刷新button,单击时将只刷新工作表中的那些(x,y和z)公式。 所以在button的点击处理程序我需要写什么代码? 编写Application.CalculateFull()刷新所有公式。 那不是我想要的。

我最好的build议是在整个工作簿中查找/replace用户定义函数(UDF)的名称。 例如,如果你的UDF被命名为“MyFunction”,你可能想用“MyFunction(”replace“MyFunction(”)。

假设您的Excel.Application引用被命名为“excelApp”,则使用C#在所有工作簿中执行查找/replace的代码可能如下所示:

 foreach (Excel.Workbook workbook in excelApp.Workbooks) { foreach (Excel.Worksheet worksheet in workbook.Worksheets) { worksheet.Cells.Replace( "MyFunction(", "MyFunction(", Excel.XlLookAt.xlPart, Excel.XlSearchOrder.xlByRows, false, Type.Missing, Type.Missing, Type.Missing); } } 

其他较less的想法:

(a)使用实时数据(RTD)服务器。 这通常用于使股票价格等数据频繁或连续更新。 这也可以用来执行“按需刷新”方法。 我个人认为,在这种情况下,这将是矫枉过正,因为查找/replace工作完美100%,实施起来要容易得多,但RTD绝对可以在这里使用。 有关如何执行此操作的文章,请参阅在Visual Basic .NET中构buildExcel实时数据组件,它面向VB.NET,而不是C#,但原理是相同的。

(b)将另一个参数添加到函数MyFunction(x,y,z,Refresh)中。 通过使每个函数引用可放置在隐藏工作表或隐藏工作簿上的“刷新”单元格,可以更改“刷新”单元格以强制所有函数重新计算。 缺点是它需要这个额外的虚拟参数。

(c)坚持Application.CalculateFull(),因为这是迄今为止最简单的代码。 我了解性能问题,但编码(只有一行)非常简单,而且100%可靠。

总的来说,我认为我会采用查找/replace方法。 这是一个干净,简单,非常有效的select性重新计算技术。

迈克