Lis*_*Ann 5 excel vba excel-vba
当然,您将使用=""在上述单元格中编写的公式来回答这个问题,但这不是我的情况。
实际上,我有一个仅在其参数等于空单元格(即,将其压del在该单元格上或已将其完全擦除的单元格)上才起作用的函数。
显然,我不能简单地擦除单元格的内容,因为它是从外部来源获取数据的,有时我需要该单元格的内容在电子表格中显示并可见。
当前单元格的公式类似于
=if([condition], "", [formula])
Run Code Online (Sandbox Code Playgroud)
但是如果单元格的值等于""而不是简单地为空,则该函数将不再起作用(相反,如果内容等于,则可以正常工作[formula])。
我无法修改该功能,但可以编写其他VBA代码以实现结果。
根据Daniel Cook要求发布我的代码的要求,这是QuantLibXL的qlFloatingRateBond函数的公式:
=qlFloatingRateBond(,,"EUR",3,,,"obj_0005#007",2,,"Actual/365",,,"obj_0004#008",,,,,,,)
Run Code Online (Sandbox Code Playgroud)
如果您修改它
=qlFloatingRateBond(,,"EUR",3,,,"obj_0005#007",2,,"Actual/365",0,,"obj_0004#008",,,,,,,)
Run Code Online (Sandbox Code Playgroud)
要么
=qlFloatingRateBond(,,"EUR",3,,,"obj_0005#007",2,,"Actual/365","",,"obj_0004#008",,,,,,,)
Run Code Online (Sandbox Code Playgroud)
由于提供了错误的参数,您会收到对象处理程序错误(修改涉及Floors参数,我希望不要对逗号和空默认参数做任何错误...)。
使其管理没有底线的绑定的唯一方法是为其提供一个真正的空单元格,但是如果您有一个外部数据源,该数据源根据底线的存在或不存在在该单元格中返回一些值,那么您将不会能够使其工作。
由于我没有QuantLibXL,这可能无法解决您的问题,但是,如果您要删除工作表上所有评估为“”的单元格,可以尝试:
sheet.UsedRange.SpecialCells(xlCellTypeFormulas, 2).Select
Selection.ClearContents
Run Code Online (Sandbox Code Playgroud)
这将找到所有导致文本的公式,然后将其删除。注意:如果没有,这可能会失败,并且可能过于激进。
另一个技巧是将公式更改为:
=if([condition], NA(), [formula])
Run Code Online (Sandbox Code Playgroud)
现在,这些值将代替错误而不是空单元格(#N / A)。也许库理解错误,而不是值0或“”。
如果要从工作表中删除所有错误,则可以修改上面的VBA代码以查找所有导致错误的公式:
sheet.UsedRange.SpecialCells(xlCellTypeFormulas, 16).Select
Selection.ClearContents
Run Code Online (Sandbox Code Playgroud)
同样,如果没有,这将出错。
不是最好的答案,但也许有些值得深思。