不使用For编译错误

时间:2015-03-12 22:20:32

标签: excel vba excel-vba

此代码将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

4 个答案:

答案 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,然后将其保存并重新添加。

如果您不知道如何执行此操作,请执行以下步骤:

  1. 转到VBA编辑器
  2. 点击工具,然后点击参考
  3. 您应该有一个名为&#34; Visual Basic For Application&#34;取消选中该项目
  4. 点击确定
  5. 保存电子表格
  6. 执行上面的步骤1和步骤
  7. 检查取消选中的项目&#34; Visual Basic For Application&#34;
  8. 点击确定
  9. 保存电子表格
  10. 关闭您的电子表格以及您可能拥有的任何Excel实例和对象,如下所示:   - 如果您有任何打开,请关闭所有Excel文件和Excel程序   - 转到任务管理器(通过执行Alt + Ctrl + Del),然后选择任务管理器   - 转到进程选项卡   - 按流程名称排序   - 查看列表中的任何Excel.exe并强行关闭它们
  11. 打开相关电子表格并尝试使用您的代码。
  12. 告诉我们。

    谢谢!