我的代码有问题。我想获取所有单元格并将它们放在数组中,但是没有用。运行时错误13。 范围->数组
For z = 0 To 3
Worksheets(Tabellen(z)).Select
AnzahlZellen = Application.WorksheetFunction.CountA(Range("A:A"))
For n = 1 To AnzahlZellen
'Worksheets(Tabellen(z)).Select'
Range("A" & n).Select
InhaltsArray(n) = Range("A" & n).Value
答案 0 :(得分:0)
在这种情况下,您可以构建一个一维数组
Dim vDat as variant
Dim rg as range
Set rg = Range("A1:A" & AnzahlZellen)
vDat = WorksheetFunction.Transpose((rg))
通过这种方式,您可以轻松地从一系列单元格读取数组。您也可以从数组写入单元格区域。通常您会得到一个2D数组,但是由于只有一列,因此可以通过转置将其转换为1D数组。
由于您没有显示InhaltsArray的声明,所以我猜run time error 13是由该范围的某些内容引起的,该内容不适合InhaltsArray的数据类型
作为代码的附加注释:大多数情况下,您不需要select
答案 1 :(得分:0)
您似乎正在尝试将4个工作表的A列值存储到一个一维数组中,
dim i as long, n as long, z as long, tmp as variant
for z=lbound(Tabellen) to ubound(Tabellen)
with Worksheets(Tabellen(z))
if z=lbound(Tabellen) then
InhaltsArray = application.transpose(.range(.cells(1, "A"), .cells(.rows.count, "A").end(xlup)).value2
else
tmp = .range(.cells(1, "A"), .cells(.rows.count, "A").end(xlup)).value2
i = ubound(InhaltsArray)
redim preserve InhaltsArray(lbound(InhaltsArray) to (i + ubound(tmp, 1)))
for n = lbound(tmp, 1) to ubound(tmp, 1)
InhaltsArray(i + n) = tmp(n, 1)
next n
end if
end with
next z
答案 2 :(得分:0)
@Storax 提交的答案是以下代码的基础,它定义了函数 rangeToArray
,它将接受一个 Range
对象并返回一个等效的 array
:
Function rangeToArray(rg As Range)
If rg.Count = 1 Then
rangeToArray = Array(rg(1))
Else
rangeToArray = WorksheetFunction.Transpose(rg)
End If
End Function
可以这样使用:
Sub test()
Dim lastRowInA As Long, i As Integer
Dim a()
lastRowInA = WorksheetFunction.CountA(Range("A:A"))
a = rangeToArray(Range("A1:A" & lastRowInA))
For i = 1 To lastRowInA
Debug.Print a(i)
Next
End Sub
仅当 if
可以包含单个单元格时,才需要 rangeToArray
中的 rg
。
此外,如果 A
没有填充行,则在使用 lastRowInA
(即 0
)定义传递给rangeToArray
的范围时会导致错误。
来自 Storax 的单行代码(如下所示并在函数 Else
中的 rangeToArray
中进行了改编)是解决问题的绝妙而简单的关键。
vDat = WorksheetFunction.Transpose((rg))