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

Excel 我正在尝试使用activesheet(VBA)中的值创建数组,excel,vba,Excel,Vba,我试图用范围为B6:B183的非空单元格中的值创建数组array\u 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

我试图用范围为B6:B183的非空单元格中的值创建数组
array\u 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需要对象


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

您可以使用以下命令访问阵列:

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
Debug.Print array_unsorted(i) 'this is 1-dimensional
Debug.Print array_unsorted(1) 'first value
Debug.Print array_unsorted(2) 'second value
或者将其转换为一维

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

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
Debug.Print array_unsorted(i) 'this is 1-dimensional
Debug.Print array_unsorted(1) 'first value
Debug.Print array_unsorted(2) 'second value
请注意,转置函数的限制为65536行。如果超过它们,其余的将被无声地截断


我建议避免使用
ActiveWorksheet
(除非编写外接程序或代码用于多个工作表)。使用
此工作簿。工作表(“工作表名称”)
按其名称引用工作表,这样更便于保存,Excel不会出错。

您在
ActiveWorsheet
(缺少
k
)•但您只需执行
array\u unsorted=ActiveWorksheet.Range(“B6:B183”)。Value
即可将范围加载到数组中(二维)。如果需要一维转置范围:
array\u unsorted=WorksheetFunction.transpose(ActiveWorksheet.range(“B6:B183”).Value)
我正在尝试将
Dim array\u unsorted()写入字符串ReDim array\u unsorted(0到200)array\u unsorted=ActiveWorksheet.range(“B6:B183”).Value
但它仍然返回没有数据的空数组。
array\u unsorted=WorksheetFunction.Transpose(activeworker.Range(“B6:B183”).Value)
返回相同的值。我将其作为一个答案发布,以使其更清楚。二维数组的变体工作了,谢谢。我建议这对于这个项目来说已经足够了。