以下行无效:
If Worksheets(Specialist).Cells(projectrow, WeekLoop + 4).Interior.Color = ReferenceCellColorPlanned.Interior.Color Then
其中" ReferenceCellColorPlanned"是公式
中的用户输入范围其中"专家"是一个字符串(工作表确实存在)
其中" projectrow"和" WeekLoop"是整数
问题是它总是经历过" If"标准,无论实际背景如何。所以我尝试调试并设置以下内容(简化代码,只取出所需的位)
Dim Cel1 as Range
Set Cel1 = Worksheets(Specialist).Cells(projectrow, WeekLoop + 4)
If Cel1.Interior.Color = ....
然后我注意到Cel1实际上返回了一个字符串值,该值是单元格的值,而不是范围值(据我所知,我觉得很奇怪,#34) ; Cells"默认为范围对象,我将Cel1声明为范围变量。
请帮助我理解为什么worksheets.cells返回一个字符串而不是一个范围,以及如何让它返回范围以便我可以检查它的背景颜色。谢谢!
编辑:我总是尝试过workheets.Range(Cells()),它也不起作用答案 0 :(得分:1)
Excel和VBA通常是用户友好的。因此,对象Cell
返回一些对用户有意义的东西 - 它的值,而不是像对象的地址那样有点无用的东西,这对于使用java的人来说是期望的(参见{ {3}}):
int[] intArray = new int[] {1, 2, 3, 4, 5};
System.out.println(intArray); // prints something like '[I@3343c8b3'
如果您熟悉What's the simplest way to print a Java array?,请考虑对象Cells
已实施__repr__
方法,该方法会返回其值 - python
在Difference between __str__ and __repr__?中,使用 默认会员 属性实现__repr__
:
关于.Interior.Color
属性,您可以像这样轻松访问它,并查看您要比较的值:
Public Sub TestMe()
Debug.Print Worksheets(1).Cells(1, 1).Interior.Color
Debug.Print Worksheets(2).Range("A10").Interior.Color
End Sub
答案 1 :(得分:0)
即使Cell在通过MsgBox打印时返回其值,您仍然可以比较单元格颜色,因为变量本身仍然是一个范围对象。
以下示例代码对我来说很好。
Sub test()
Dim Cel2 As Range
Dim Cel3 As Range
Set Cel2 = Worksheets(1).Cells(1, 1)
Set Cel3 = Worksheets(1).Cells(2, 2)
If Cel2.Interior.Color = Cel3.Interior.Color Then
MsgBox ("YES")
Else
MsgBox ("NO")
End If
End Sub