我开发了一个Excel插件。它将三个用户定义的公式公开给Excel应用程序。一切正常。现在我需要添加一个刷新按钮,单击该按钮将仅刷新工作表中的那些公式。那么在按钮的单击处理程序中,我需要编写什么代码?
使用Application.CalculateFull()
我可以刷新工作表中的所有公式。有没有办法只刷新工作表中的特定公式而不是整个工作表?
答案 0 :(得分:2)
Range("A3:C5").Calculate 'calculate all the cells from A3 to C5
OR
Range("A3").Calculate 'only calculate cell A3
答案 1 :(得分:0)
我的意思是我开发了一个excel插件..它暴露了 3个用户定义的公式(x,y,z) excel应用程序。一切正常 很好..现在我需要添加刷新 单击时将刷新的按钮 只有那些(x,y和z)公式 工作表。所以在按钮中 点击处理程序我需要什么代码 写??写作 Application.CalculateFull()刷新 所有的公式。那不是我的意思 想。
我实现这一目标的最重要建议是在整个工作簿中查找/替换用户定义函数(UDF)的名称。例如,如果您的UDF名为“MyFunction”,您可能希望将“MyFunction(”替换为“MyFunction(”。
假设您的Excel.Application引用被命名为“excelApp”,使用C#在所有工作簿中进行查找/替换的代码可能如下所示:
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);
}
}
其他较少的想法:
(a)利用实时数据(RTD)服务器。这通常用于频繁或连续更新股票价格等数据。但是,这也可以用于执行“按需刷新”方法。我个人认为在这种情况下这样做会有点过分,因为Find / Replace工作100%完美并且更容易实现,但RTD绝对可以在这里使用。有关如何执行此操作的文章,请参阅Building Excel Real-Time Data Components in Visual Basic .NET它面向VB.NET,而不是C#,但原则是相同的。
(b)在函数MyFunction(x,y,z,Refresh)中添加另一个参数。通过让每个函数引用“刷新”单元格(可以放在隐藏的工作表或隐藏的工作簿上),您可以更改“刷新”单元格以强制重新计算所有函数。缺点是它需要这个额外的虚拟参数。
(c)坚持使用Application.CalculateFull(),因为这是迄今为止最容易编码的。我理解性能问题,但编码非常简单(只需一行)并且100%可靠。
总的来说,我认为我会选择Find / Replace方法。这是一种干净,简单,非常有效的选择性重新计算技术。
- 迈克