当然,您将使用要在上述单元格中编写的=""公式回答这个问题,但这不是我的情况。

实际上,我有一个函数仅在起作用(如果其参数等于一个空单元格),也就是说,已按del或诸如此类的东西将其完全擦除的单元格。

显然,我不能简单地擦除单元格的内容,因为它是从外部来源获取数据的,有时我需要在我的电子表格中显示该单元格的内容并使其可见。

当前单元格的公式类似于

=if([condition], "", [formula])

但是,如果单元格的值等于""而不是简单地为空,则该函数不再起作用(相反,如果内容等于[formula],则可以正常工作)。

不能修改该功能,但是我可以写一个附加的VBA代码来获得结果。

根据Daniel Cook要求发布我的代码的要求,以下是 QuantLibXL qlFloatingRateBond函数的公式:
=qlFloatingRateBond(,,"EUR",3,,,"obj_0005#007",2,,"Actual/365",,,"obj_0004#008",,,,,,,)

如果您修改它
=qlFloatingRateBond(,,"EUR",3,,,"obj_0005#007",2,,"Actual/365",0,,"obj_0004#008",,,,,,,)

或者
=qlFloatingRateBond(,,"EUR",3,,,"obj_0005#007",2,,"Actual/365","",,"obj_0004#008",,,,,,,)

由于提供了错误的参数,您会收到对象处理程序错误(修改涉及Floors参数,我希望不要对逗号和empty-default参数做任何错误...)。

使其管理无底价债券的唯一方法是为其提供一个真正的空单元格,但是如果您有一个外部数据源,该数据源根据是否存在底价而在该单元格中返回一些值,则不会能够使其工作。

最佳答案

这可能无法解决您的问题,因为我没有QuantLibXL,但是如果您要删除工作表上所有评估为“”的单元格,可以尝试:

sheet.UsedRange.SpecialCells(xlCellTypeFormulas, 2).Select
Selection.ClearContents

这将找到所有导致文本的公式,然后将其删除。注意:如果没有,这可能会失败,并且可能过于激进。

另一个技巧是将公式更改为:
=if([condition], NA(), [formula])

现在,这些值将代替一个空单元格,而将是一个错误(#N/A)。也许库理解错误,而不是0或“”的值。

如果要从工作表中删除所有错误,则可以修改上面的VBA代码以查找所有导致错误的公式:
sheet.UsedRange.SpecialCells(xlCellTypeFormulas, 16).Select
Selection.ClearContents

同样,如果没有,这将出错。

不是最好的答案,但也许可以让我们深思。

关于vba - 如何通过VBA代码使Excel单元格等于空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18881053/

10-13 07:17
查看更多