提取范围值并分配给字符串变量

时间:2016-09-15 23:34:37

标签: excel excel-vba validation excel-2010 vba

我想提取一个范围值并将其分配给字符串变量。

在下图中,我想要存储到字符串变量的值来自Range("E10:J11").Value(1,1),其中包含字符串“Disputes / Appeals”。

Range values

我用于实施的代码是:

Dim P3 As String

'This line gives me Run-time error '13'
'Type mismatch
P3 = Worksheets("NameofmySheet").Range("E10:J11").Value

发生此错误后,我知道我需要特定于.Value的参数,以便我的分配同意相同的数据类型。

根据图片,遵循Range("E10:J11").Value(1,1)规范,这就是我所做的:

'This line gives me Run-Time error '450'
'Wrong number of arguments or invalid property assignment
P3 = Worksheets("NameofmySheet").Range("E10:J11").Value(1, 1)

现在我认为我走在正确的轨道上,但我可能无法找到正确的语法或这种类型的赋值的正确参数。

2 个答案:

答案 0 :(得分:1)

Range.Value返回Variant(基本上是一个“容器”类型,几乎可以容纳任何东西)。如果Range中只有一个单元格,则它将包含单元格的基础内容。如果Range中有多个单元格,则返回Variant的二维数组,每个元素包含一个单元格的基础内容。如果单元格不包含任何内容或导致错误的公式,它也可以返回Variant类型vbEmptyvbError

当您访问此.Value ...

Worksheets("NameofmySheet").Range("E10:J11").Value

...你得到一个二维数组。这就是您的屏幕截图显示数组索引的原因。

代码的原因......

P3 = Worksheets("NameofmySheet").Range("E10:J11").Value(1, 1)

...不起作用,.Value实际上是带有可选RangeValueDataType参数的索引属性。因此编译器会解释(1, 1)索引。由于您传递了2个“参数”,因此会出现“错误的参数数量”错误。

虽然其他答案显示了获取目标单元格值的不同方法,但为了使用属性返回/数组索引语法将索引应用于.Value的返回值,您需要显式提供一个空参数列表到.Value

P3 = Worksheets("NameofmySheet").Range("E10:J11").Value()(1, 1)
                                                      '^^

注意,这种语法......

P3 = Worksheets("NameofmySheet").Range("E10:J11")(1, 1).Value

...提供Range参数的索引,它返回一个单元格Range,其中.Value it 上调用。

答案 1 :(得分:0)

您想将(1,1)放在.Value

的前面
P3 = Worksheets("NameofmySheet").Range("E10:J11")(1, 1).Value