此代码将Sheet1(Orders)中的所有列组合到Sheet3(Masterlist)中的一列中。
我遇到的问题是在第26行出现错误,而不是For。
有些帖子暗示我在循环中有一个循环,其他人说我需要在某个地方使用End IF。我是新手,可能需要看看修改后的代码会是什么样子。评论似乎没有帮助我。
Sub ToArrayAndBack()
Dim arr As Variant, lLoop1 As Long, lLoop2 As Long
Dim arr2 As Variant, lIndex As Long
'turn off updates to speed up code execution
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
.DisplayAlerts = False
End With
ReDim arr2(Sheet1.UsedRange.Cells.Count - Sheet1.UsedRange.SpecialCells(xlCellTypeBlanks).Count)
arr = Sheet1.UsedRange.Value
Set myRange = Worksheets("Orders").Range("A1:A" & _
Worksheets("Orders").Cells(Worksheets("Orders").Rows.Count, 1).End(xlUp).Row)
i = 2
Do While i <= myRange.Rows.Count
For lLoop1 = LBound(arr, 1) To UBound(arr, 1)
For lLoop2 = LBound(arr, 2) To UBound(arr, 2)
If Len(Trim(arr(lLoop1, lLoop2))) > 0 Then
arr2(lIndex) = arr(lLoop1, lLoop2)
lIndex = lIndex + 1
End If
Next
Next
i = i + i
Loop
Dim ws As Worksheet
Dim found As Boolean
found = False
For Each ws In ThisWorkbook.Sheets
If ws.Name = "MasterList" Then
found = True
Exit For
End If
Next
If Not found Then
Sheets.Add.Name = "MasterList"
End If
Set ws = ThisWorkbook.Sheets("MasterList")
With ws
.Range("A1").Resize(, lIndex + 1).Value = arr2
.Range("A1").Resize(, lIndex + 1).Copy
.Range("A2").Resize(lIndex + 1).PasteSpecial Transpose:=True
.Rows(1).Delete
End With
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
.DisplayAlerts = True
End With
End Sub
答案 0 :(得分:1)
当您嵌套For循环时,您应该始终在下一个语句中引用要递增/递减/步进的变量
For lLoop1 = LBound(arr, 1) To UBound(arr, 1)
For lLoop2 = LBound(arr, 2) To UBound(arr, 2)
If Len(Trim(arr(lLoop1, lLoop2))) > 0 Then
arr2(lIndex) = arr(lLoop1, lLoop2)
lIndex = lIndex + 1
End If
Next lLoop2
Next lLoop1
答案 1 :(得分:-1)
我将您的代码复制并粘贴到VBA Sub (对于EXCEL 2010),并且编译时没有任何错误。你不知道你是不是在复制所有的代码。
我过去遇到的一个错误是文本中出现了一个不可打印的字符,并且在找到并删除它之前会产生虚假的编译失败。我建议将此问题的代码块复制回源文件,以删除不可打印的字符。
答案 2 :(得分:-1)
代码为我编译,这让我相信它可能是一个死的参考。在VBE中单击工具/参考,看看是否有某些内容列为“缺失”
答案 3 :(得分:-1)
您的代码编译得很好。请尝试以下方法:
从VBA引用中取消选中Visual Basic For Application,然后将其保存并重新添加。
如果您不知道如何执行此操作,请执行以下步骤:
告诉我们。
谢谢!