vba - 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()) ,但它也不起作用
解决方案
Excel 和 VBA 通常是用户友好的。因此,对象Cell
返回一些对用户有意义的东西——它的值,而不是像对象的地址那样有点无用的东西,这是使用java的人所期望的(请参阅打印 Java 数组的最简单方法是什么? ):
int[] intArray = new int[] {1, 2, 3, 4, 5};
System.out.println(intArray); // prints something like '[I@3343c8b3'
如果您熟悉python,请考虑该对象Cells
已__repr__
实现一个方法,该方法返回其值 - __str__ 和 __repr__ 之间的区别?
在vba中,__repr__
使用Default Member属性实现:
- 默认成员 (CPearson)
- “值”实际上是 Range 对象的默认属性吗?
- VBA 属性 - 高端 VBA (MySite)
- VB 属性 - 它们是什么以及我们为什么要使用它们 (ChristopherMcClellan)
关于.Interior.Color
属性,您可以像这样轻松访问它并查看您正在比较的值:
Public Sub TestMe()
Debug.Print Worksheets(1).Cells(1, 1).Interior.Color
Debug.Print Worksheets(2).Range("A10").Interior.Color
End Sub
推荐阅读
- php - 如何匹配或替换正则表达式中一个语句的两次出现的模式?
- google-apps-script - 应用脚本 - function () { [本机代码] }
- javascript - 返回组件消息 5 秒,然后重定向
- python - Matplotlib:如何删除轴并在旋转轴中设置 facecolor?
- python - 如果元素包含特殊字符,则从 python 列表中删除元素
- google-cloud-bigtable - 获取整行的最佳方法,其中某列 = 某个值?
- azure - IoT Hub 的 ip 过滤规则的 Terraform 顺序
- apache-kafka - Kafka 生产者将消息发布到辅助集群
- mavlink - Mavlink命令中的[180]是什么意思?
- c# - 如何将此 sql 转换为 efcore linq