在VSTO工作表中,更改事件/范围更改事件包含Range类型的参数“Target”,Target.Value始终为double类型,并且具有decimal值。而VBA中的相同类型为double,但也可以没有小数。
例如,如果我将单元格的值更改为 40 。 VSTO更改事件中的Target.Value 40.0 ,而在VBA中, 40 。两者的类型都是双倍的。
为什么两个值都有差异?
为了澄清我附加了一个示例项目的用例。请查看示例项目的以下链接。
在这个项目中,我已经注册了两个事件工作簿打开和工作表更改。在工作簿打开事件中,我在范围上写了一些值,这些值是从某些外部系统接收的。在工作表更改事件中,我将更改的值与工作表上的值进行比较。如果相同,则显示一个消息框,该值相同。
要执行用例,只需打开附带的TestBook.xlsx即可。这只是一本空白的书。两个值40和40.42将分别写在单元格A1和A2上。 现在只需双击单元格A1并单击其他位置,即可触发更改。在更改事件中,如果检查其值,即Target.Value则为40.0,其类型为double。由于我没有更改值,我应该收到消息“值是相同的”但是没有发生。
有人可以帮助我实现上述用例。
提前致谢。
答案 0 :(得分:1)
我在你的代码中找到了这个;
if (Object.Equals(Target.Value2, value1) || Object.Equals(Target.Value2, value2))
请勿使用 Object.Equals
来比较2种值类型!
使用==
相等运算符比较两个值类型/值。
if (ws.get_Range("A1").Value == value1)