如何解决来自For Each函数VBA的打印数组结果下标超出范围错误
我不断收到以下错误消息,我不明白为什么。我不是VBA专家,我知道我将如何使用JS做到这一点,但是我必须在需要的时候通过项目使用VBA。在这种情况下,我需要为每个语句创建一个数组并将其打印到文件中。我只是省去了数组,并从for每个循环中打印(有效),但我需要能够添加到文件的内容中,然后稍后再通过其他函数访问数组(另一个问题是另一个问题) )。
希望有人可以为我在这里做错的事情提供帮助。
Public Function Orders()
Dim ItemDescription As String,Counter As Integer,Range As Range,sArray() As Variant
ReDim sArray(1 To 1) As Variant
length = Cells(Rows.Count,1).End(xlUp).Row
Set Range = ActiveSheet.Range("A2:A" & length)
IntFile = FreeFile
StrFile = "C:\Projects\Test.txt"
Open StrFile For Output As #IntFile
For Each Cell In Range
ItemDescription = Cell.Offset(0,19).Value
If (Cell.Value = Cell.Offset(1,0).Value And Cell.Value <> Cell.Offset(-1,0).Value) Or (Cell.Value <> Cell.Offset(-1,0).Value And Cell.Value <> Cell.Offset(1,0).Value) Then
Counter = 1
ElseIf (Cell.Value = Cell.Offset(1,0).Value And Cell.Value = Cell.Offset(-1,0).Value) Or (Cell.Value <> Cell.Offset(1,0).Value) Then
Counter = Counter + 1
End If
If Counter = 1 Then
OlStr = ItemDescription
ElseIf Counter > 1 Then
OlStr = ItemDescription & " " & "your count =" & " " & Counter
End If
sArray(UBound(sArray)) = OlStr
ReDim Preserve sArray(1 To UBound(sArray) + 1) As Variant
Next Cell
Print #IntFile,sArray(1,UBound(sArray))
Close #IntFile
End Function
该问题发生在底部3号的“打印#IntFile,sArray(1,UBound(sArray))”行。我知道这意味着我试图引用数组维度之外的项目,但似乎无法弄清楚原因。如果我将打印行放在For Each中,仍然会出现错误。这是错误:
请注意,UBound似乎已正确创建。我的工作表中有2537行,尽管它确实有标题。
非常感谢您的帮助!
解决方法
根据我的评论:
您有一个一维数组,因此只能指定一个索引值。 sArray(1)
和sArray(UBound(sArray))
有效,但sArray(1,UBound(sArray))
无效
如果只想打印所有单元格值,则可以将Print #IntFile,sArray(UBound(sArray))
放在Redim语句之前的For Each循环中。或者,您可以绕开一个数组Print #IntFile,OlStr
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。