首页 > 解决方案 > Excel VBA Worksheets.Cells 返回值而不是范围

问题描述

以下行不起作用:

If Worksheets(Specialist).Cells(projectrow, WeekLoop + 4).Interior.Color = ReferenceCellColorPlanned.Interior.Color Then

其中“ReferenceCellColorPlanned”是公式中的用户输入范围

其中“专家”是一个字符串(并且工作表确实存在)

其中“projectrow”和“WeekLoop”是整数

问题是它总是通过“如果”标准,无论实际背景是什么。所以我尝试调试并设置以下(简化代码,只取出需要的位)

Dim Cel1 as Range
Set Cel1 = Worksheets(Specialist).Cells(projectrow, WeekLoop + 4)
If Cel1.Interior.Color = ....

然后我注意到 Cel1 实际上返回一个字符串值,该值是单元格的值,而不是范围值(我觉得这很奇怪,因为据我所知,“Cells”默认是一个范围对象,我声明了 Cel1作为范围变量)。

请帮助我了解为什么 worksheets.cells 返回字符串而不是范围,以及如何使其返回范围以便我可以检查其背景颜色。谢谢!

编辑:我也一直尝试过 worksheets.Range(Cells()) ,但它也不起作用

标签: vbaexcel

解决方案


Excel 和 VBA 通常是用户友好的。因此,对象Cell返回一些对用户有意义的东西——它的值,而不是像对象的地址那样有点无用的东西,这是使用的人所期望的(请参阅打印 Java 数组的最简单方法是什么? ):

int[] intArray = new int[] {1, 2, 3, 4, 5};
System.out.println(intArray);     // prints something like '[I@3343c8b3'

如果您熟悉,请考虑该对象Cells__repr__实现一个方法,该方法返回其值 - __str__ 和 __repr__ 之间的区别?

中,__repr__使用Default Member属性实现:


关于.Interior.Color属性,您可以像这样轻松访问它并查看您正在比较的值:

Public Sub TestMe()

    Debug.Print Worksheets(1).Cells(1, 1).Interior.Color
    Debug.Print Worksheets(2).Range("A10").Interior.Color

End Sub

推荐阅读