Arrays 将范围的值指定给数组

Arrays 将范围的值指定给数组,arrays,vba,excel,range,Arrays,Vba,Excel,Range,我编写了下面的代码,它在即时窗口中打印210 Sub RangeToArr() Dim data() As Variant data = Range("Salary[EmpNum]").Value Debug.Print UBound(data) End Sub 当我使用以下命令时,将显示下标超出范围运行时错误消息 Sub RangeToArr() Dim data() As Variant data = Range("Salary[EmpNum]").

我编写了下面的代码,它在即时窗口中打印
210

Sub RangeToArr()
    Dim data() As Variant
    data = Range("Salary[EmpNum]").Value
    Debug.Print UBound(data)
End Sub
当我使用以下命令时,将显示
下标超出范围
运行时错误消息

Sub RangeToArr()
    Dim data() As Variant
    data = Range("Salary[EmpNum]").Value
    Debug.Print data(210)
End Sub

如果
数据
是一个数组,那么问题是什么?否则,如何访问分配给数组的范围值,如上所述?

要确保示例正常工作,请确保表示例中有210行


通常,请尝试以下方法了解阵列和范围:

  • 将一个简单的命名范围
    MyNamedRange
    包装成多列多行
  • 在里面放一些值
  • 运行此命令,查看即时窗口中的内容:


稍微更改
(1,2)
值以获得想法。

要确保示例有效,请确保表示例中有210行


通常,请尝试以下方法了解阵列和范围:

  • 将一个简单的命名范围
    MyNamedRange
    包装成多列多行
  • 在里面放一些值
  • 运行此命令,查看即时窗口中的内容:


(1,2)
值稍微更改一下以了解情况。

转换为数组的范围将创建一个二维数组,如果您尝试返回数据(210),您将引用它,就像它是一个一维数组一样。您可以通过返回

data(210, 1)

我只能假设为什么它强制使用二维数组。我的猜测是因为如果你的范围包括额外的列,它将是二维数组。即使只有一列,创建二维数组的行为也意味着处理数据的方法保持不变。有一个例外-如果您的范围是单个单元格,VBA将仅将值填充为单个维度。

转换为数组的范围将创建一个二维数组,如果您尝试返回数据(210),您将引用它,就像它是一个单维数组一样。您可以通过返回

data(210, 1)

我只能假设为什么它强制使用二维数组。我的猜测是因为如果你的范围包括额外的列,它将是二维数组。即使只有一列,创建二维数组的行为也意味着处理数据的方法保持不变。这有一个例外-如果您的范围是单个单元格,VBA将仅将值填充为单个维度。

还要使用断点检查“局部变量”窗口中的数据范围,它是否仅为单个维度?甚至一个列的数据也可以限定为(1到210,1到1)。进一步查看,并假设您希望数据表示范围,请从分配行中删除
.Value
部分。范围上方是筛选表范围的一列。范围是6到215
Salary
是表对象的名称,
EmpNum
是其中一列的标题。转换为数组的范围将创建一个二维数组,当您尝试返回数据(210)时,您将引用它,就像它是一个一维数组一样。如果您尝试返回数据(210,1),会发生什么情况?(编辑:-我最初放置数据(20,0)时忘记了范围转换为基1中的数组)每当使用单元格范围创建数组时,创建的数组将始终是二维数组。这是因为电子表格以两个维度存储值,即行和列。所以第一个维度是行,第二个维度是列。请参阅。还要使用断点检查“局部变量”窗口中的数据范围,它是否只是一个维度?甚至一个列的数据也可以限定为(1到210,1到1)。进一步查看,并假设您希望数据表示范围,请从分配行中删除
.Value
部分。范围上方是筛选表范围的一列。范围是6到215
Salary
是表对象的名称,
EmpNum
是其中一列的标题。转换为数组的范围将创建一个二维数组,当您尝试返回数据(210)时,您将引用它,就像它是一个一维数组一样。如果您尝试返回数据(210,1),会发生什么情况?(编辑:-我最初放置数据(20,0)时忘记了范围转换为基1中的数组)每当使用单元格范围创建数组时,创建的数组将始终是二维数组。这是因为电子表格以两个维度存储值,即行和列。所以第一个维度是行,第二个维度是列。请参阅。如果Salary[EmpNum]是一个单列,则数组大小应为data(1到210,1)。如果答案错误,我不介意更正,但我需要了解假设中的错误,以便进行相应更新。如果Salary[EmpNum]是单列,则数组大小应为数据(1到210,1)。如果我的答案是错误的,我不介意纠正它,但我需要理解我的假设中的错误,这样我才能相应地更新。