提取范围值并分配给字符串变量
我想提取范围值并将其分配给字符串变量。提取范围值并分配给字符串变量
在下面的图片中,我想存储到字符串变量的值是从Range("E10:J11").Value(1,1)
,它包含字符串“Disputes/Appeals”。
,我用于执行的代码是:
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)
现在我觉得我在正确的轨道上,但我能不能找出正确的语法或适当的参数对于这种类型的任务。
你想把(1,1)
在.Value
面前:
P3 = Worksheets("NameofmySheet").Range("E10:J11")(1, 1).Value
该解决方案也适用于@Scott。我从来没有想过把'(1,1)'放在'.Value'之前。谢谢。我只是想知道为什么我找不到这两个解决方案的任何示例,我将字符串值从一个范围分配给一个变量字符串的意图似乎是一个普遍的事情。 – kdd
Range.Value
返回Variant
(这基本上是一个“容器”类型,它可以容纳相当多的东西)。如果Range
中只有一个单元格,它将包含单元格的基础内容。如果Range
中有多个单元格,它将返回一个2维数组Variant
,每个元素包含一个单元格的基础内容。如果单元格不包含任何内容或导致错误的公式,则它还可以返回类型vbEmpty
或vbError
。
当你访问此.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
调用它。
感谢您回答并进一步解释'Range.Value'是如何工作的,非常感谢。我确实将所选范围内的所有单元组合在一起,所以最终它是单个单元格范围,但我会记住您关于Range如何包含2维数组的教程。 'P3 =工作表(“Name ofmySheet”)。范围(“E10:J11”)。Value()(1,1)'完美地工作。 – kdd
'P3 =工作表(“Name ofmySheet”)。Range(“E10:J11”)。Cells(1).Value' –
Hi @Tim,此解决方案适用。谢谢。 – kdd