首页 > 解决方案 > VBA 新手,在 Ranges 中苦苦挣扎

问题描述

多年来,我使用多种语言/数据库进行了编程——但对 VBA 来说是全新的。好的,实际上我已经深陷其中并且正在苦苦挣扎。

我正在尝试编写一些代码,这些代码将从工作表中的单元格中获取一些 RGB 值,并将另一个范围(多个区域)的单元格背景格式化为该颜色 - 作为奖励,如果颜色将文本格式化为白色是黑暗的。有多组价值观,影响不同的领域。许多单元格都有选择颜色的菜单,最终我希望在那里进行任何更改以自动触发相关单元格的格式设置。如果您想知道,我们正在尝试从公司通讯允许使用的列表中选择一组颜色用于技术报告。所以有一个网格,我们可以在其中看到所有的组合,并找出我们是否可以区分它们——完全视力的,以及我们这些有颜色缺陷的人。显然是'

最终的计划将是调用几个外部例程之一来设置范围,或者传递一个变量以在 case 语句中使用。但我需要先让基本位工作。

这有效:

DestColor = RGB(Range("d4"), Range("e4"), Range("f4"))
Sheets("Main").Range("$B$5:$P$5,$B$4,$I$2,$I$4,$I$6,$I$8,$I$10,$I$12,$I$14,$I$16,$I$18").Interior.Color = DestColor

这给出“1004:应用程序定义的或对象定义的错误”

Set DestCells = Sheets("Main").Range("$B$5:$P$5,$B$4,$I$2,$I$4,$I$6,$I$8,$I$10,$I$12,$I$14,$I$16,$I$18")
DestColor = RGB(Range("d4"), Range("e4"), Range("f4"))
Sheets("Main").Range(DestCells).Interior.Color = DestColour

我有一种感觉,我只是没有掌握正确处理范围的语法。当我阅读内容时,我创建了一个名为 DestCells 的 Range 类型的对象,所以我应该能够在任何我使用“Range(...)”的地方使用它。是我从根本上误解了某些东西,还是我在语法上遇到了根本错误?

最终,我希望有一个像这样的子:

Sub SetCells(DestCells As Range, ColorVals As Range)
  
  vRed = ColorVals.Columns(1)
  vGreen = ColorVals.Columns(2)
  vBlue = ColorVals.Columns(3)
' some more stuff to go in here ...
End Sub

但是尝试将其称为(并简化测试范围):

SetCells(Sheets("Main").Range("$B$5:$P$5"), Sheets("Main").Range("d4:f4"))

给出“编译错误:预期 =”(我试过带括号和不带括号)

有人可以给我一些指示我在这里出错的地方吗?

标签: excelvba

解决方案


Sheets("Main").Range(DestCells).Interior.Color = DestColour

应该

DestCells.Interior.Color = DestColour

其他几点注意事项:

  1. 设置范围后,您可以像上面一样直接引用它
  2. 您可以删除所有锁定的单元格引用 ( $)。他们在降低可读性的同时没有对您的代码有任何帮助
  3. 您正在使用两种颜色的拼写(不是问题,只是有趣)

推荐阅读