excel - 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"))
给出“编译错误:预期 =”(我试过带括号和不带括号)
有人可以给我一些指示我在这里出错的地方吗?
解决方案
Sheets("Main").Range(DestCells).Interior.Color = DestColour
应该
DestCells.Interior.Color = DestColour
其他几点注意事项:
- 设置范围后,您可以像上面一样直接引用它
- 您可以删除所有锁定的单元格引用 (
$
)。他们在降低可读性的同时没有对您的代码有任何帮助 - 您正在使用两种颜色的拼写(不是问题,只是有趣)
推荐阅读
- reactjs - Redux Form onsubmit 调用 API
- ruby-on-rails - 什么是 active_record 实例方法?
- python - TextInput:更改字体大小时出现意外的光标移动
- css - 如何在 CSS 中创建响应式棋盘背景?
- python - 如何计算二叉树中的左孩子数量?(Python)
- c++ - 向量中向量的 push_back 导致 bad_alloc
- ansible - 如何使用另一个变量声明字典
- python - 如何在 OpenCV Haar 分类器中显示最大的矩形
- jquery - 如何使用 Wix 代码将产品从数据库引用到“结果”元素
- python - 将字符串转换为数字