将VBA的Interior.Color判断代码转换为VB.NET代码的问题
解决方案:VB.NET中判断Excel单元格Interior.Color
你的核心问题是误用了Is运算符——它用于比较引用类型的引用是否一致,但cell.Interior.Color是值类型(Integer),应该用值相等运算符=来比较。结合Option Strict On和Option Explicit On,以下几种写法都能正常运行:
方法1:直接使用VB.NET的RGB函数
VB.NET的RGB()函数返回Integer类型,和cell.Interior.Color类型匹配,可直接比较:
If cell.Interior.Color = RGB(255, 255, 204) Then ' 执行你的业务逻辑 End If
方法2:使用颜色的十进制数值
RGB(255,255,204)对应的十进制颜色值是13434828,可以直接用这个数值比较,避免函数调用:
If cell.Interior.Color = 13434828 Then ' 执行你的业务逻辑 End If
方法3:使用ColorTranslator类(更面向对象的写法)
通过ColorTranslator.ToOle()将Color对象转换为Excel兼容的OLE颜色值:
Imports System.Drawing ' 后续代码 If cell.Interior.Color = ColorTranslator.ToOle(Color.FromArgb(255, 255, 204)) Then ' 执行你的业务逻辑 End If
为什么你的原代码无效?
你之前用Is TryCast(RGB(...), Object)的写法,会把RGB返回的Integer值装箱为Object引用。Is比较的是两个装箱对象的引用地址,而非值本身,所以永远不会匹配,导致逻辑失效。
内容的提问来源于stack exchange,提问作者HenriP
相关产品推荐
相关产品推荐

