我正在尝试使用Activesheet(VBA)中的值创建数组

时间:2018-11-21 08:57:12

标签: excel vba

我正在尝试使用B6:B183范围内非空单元格的值创建数组。 array_articles = ActiveWorsheet.Range("B6:B183")返回空数组,因此我正在尝试这样做:

Sub set_price()
Dim articul_price() As String
Dim articul_bill As String
Dim counter As Integer
Dim array_articles() As Variant
Dim array_unsorted() As String
Dim cell As Range
counter = 0
ReDim articul_price(0)
For Each cell In ActiveWorsheet.Range("B6:B183") ' error 424 Object required
    If IsEmpty(cell.Value) Then
        array_unsorted(counter) = cell.Value
        ReDim Preserve array_unsorted(counter)
    Else
    'do nothing
    counter = counter + 1
    End If
Next
End Sub

此代码返回

  

错误424需要对象

In Locals

1 个答案:

答案 0 :(得分:1)

要轻松地将范围加载到数组中(无循环),请使用:

Dim array_unsorted As Variant 'must be variant!
array_unsorted = ThisWorkbook.Worksheets("NameOfSheet").Range("B6:B183").Value '2-dimensional array

您可以使用以下命令访问数组

Debug.Print array_unsorted(row, column) 'yes it has only 1 column but it is still there
Debug.Print array_unsorted(1, 1) 'first value
Debug.Print array_unsorted(2, 1) 'second value

或将其转置为一维

array_unsorted = WorksheetFunction.Transpose(ThisWorkbook.Worksheets("NameOfSheet").Range("B6:B183").Value) '1-dimensional

您可以使用以下命令访问数组

Debug.Print array_unsorted(i) 'this is 1-dimensional
Debug.Print array_unsorted(1) 'first value
Debug.Print array_unsorted(2) 'second value

请注意,转置函数的行数限制为65,536行。如果您超过了它们,其余的将被默默地删掉。

我建议避免使用ActiveWorksheet(除非您编写外接程序或该代码用于多个工作表)。使用ThisWorkbook.Worksheets("NameOfSheet")来按其名称引用工作表,这样可以节省更多时间,并且Excel不会出错。