有人可以帮我解决我的问题吗?
Dim attPresent as Variant ' attpresent()
Set ws = thisworkbook.sheets("Sheet1")
lastrow = ws.cells(Rows.count, 8).end(xlup).row
attPresent = ws.Range("H4:H" & lastrow).Value 'errors if I use Dim attPresent() As Variant
For k = LBound(attPresent, 1) To UBound(attPresent, 1) ' Dim attPresent As Variant'errors if I use
msgbox attpresent(k,1)
Next
attPresent = ws.Range("H4:H" & lastrow).Value
如果我将变量声明为,则此行返回错误Dim attPresent() As Variant
。而如果将变量声明为Dim attPresent As Variant
,则此行For k = LBound(attPresent, 1) To UBound(attPresent, 1)
出错。
谁能帮我解决这个问题?
我试图将您已经定义的内容分开,但为清楚起见,我想我会提供完整的代码:
Sub test()
Dim lastrow, i As Integer
Dim ws As Worksheet
Set ws = ActiveWorkbook.Worksheets("Sheet1")
Dim attPresent() As Variant
lastrow = ws.Cells(Rows.Count, "H").End(xlUp).Row
ReDim attPresent(lastrow - 4)
For i = 4 To lastrow
attPresent(i - 4) = ws.Range("H" & i).Value
Next
msg = Join(attPresent, " ")
MsgBox "The array holds: " & vbNewLine & msg
End Sub
我定义的数组不以大小开头,一旦知道了lastrow,就将其重新定义为以后需要的大小(因为从4开始,我从中减去了4 lastrow
)。
我猜想msgBox会测试您收集的内容,因此我创建了一个转储,将它们全部打印到一个盒子中,但是如果您有很多数据,显然可以更改它。xD
为了处理数组,我总是遍历每个单独的条目,一次存储一个。我什至不确定您是否可以一步一步将整个范围转储为一个,因为我从未研究过。无论如何,我希望这可以解决您的问题kupo。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句