如何创建动态范围变量

时间:2018-07-10 11:07:19

标签: excel vba

我正在尝试写入列中某个范围内的单元格。

Range("B7:B(noOfTests)") = "Not Tested"

我想念什么?对于要达到的目标,是否有更好的做法?

3 个答案:

答案 0 :(得分:5)

您需要:

Range("B7:B" & noOfTests) = "Not Tested"

答案 1 :(得分:2)

这里是替补。

Range("B7").resize(noOfTests, 1) = "Not Tested"

答案 2 :(得分:2)

详细说明@Rory的答案或代码为何无效的原因:


双引号表示VBA中的String文字 (以及几乎所有其他编程语言)

Range对象的工作方式是,您指定1个或2个单元(可选)。单元格1是起始单元格(如果未指定,则是结束单元格),而单元格2是结束单元格,定义了您选择的范围。

有多种方法可以将参数传递给范围,但是最常见的方法是使用上述字符串文字。例如。 Range("B7:B12") <请注意括号内的引号

但是,您想要做的是在字符串文字中取消引用变量的值。在VBA中,可以通过&符号表达式实现。

这就是您要尝试执行的操作(如果解释可以读取伪代码)

Range("B7:B"<insert row value>) = "Not Tested"

但是,您要做的实际上是将变量作为字符串的一部分输入,所以:

Range("B7:BnoOfTests") = "Not Tested"

显然,交际者感到困惑。 BnoOfTests不是常见的Cell引用格式,并且它不知道该用什么。您需要做的就是将变量重新引用为一个值,如我上面所暗示的,所以正确的解决方案是:

Range("B7:B" & noOfTests) = "Not Tested"

避免字符串引用混淆的另一种好的做法是引用定义您的范围的两个单元格。就像我上面从字面上描述的一样:

  

Range对象的工作方式是指定1或可选地2   细胞。其中单元格1是开始单元格(如果不是,则是结束单元格   指定),单元格2是结束单元格,定义了您选择的范围

因此,为确保您不会搞砸,可以使用以下定义:

Range(Cells(7, "B"), Cells(noOfTests, "B")) = "Not Tested"

以我的拙见,这实际上是更清晰的转录,此外,它更不容易出错!