Vba 下一步编译错误,不包含
此代码将Sheet1订单中的所有列合并为Sheet3主列表中的一列 我遇到的问题是在第26行,下一个错误是没有For 一些帖子建议我在一个循环中有一个循环,其他人说如果在某个地方我需要一个结束。我是新手,可能需要看看修订后的代码会是什么样子。评论似乎对我没有帮助Vba 下一步编译错误,不包含,vba,excel,Vba,Excel,此代码将Sheet1订单中的所有列合并为Sheet3主列表中的一列 我遇到的问题是在第26行,下一个错误是没有For 一些帖子建议我在一个循环中有一个循环,其他人说如果在某个地方我需要一个结束。我是新手,可能需要看看修订后的代码会是什么样子。评论似乎对我没有帮助 Sub ToArrayAndBack() Dim arr As Variant, lLoop1 As Long, lLoop2 As Long Dim arr2 As Variant, lIndex As Long 'turn off
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
我将您的代码复制并粘贴到VBA Sub for EXCEL 2010中,它编译时没有任何错误。不知何故,您没有复制所有代码
我在过去遇到的一个错误是,文本中出现不可打印的字符,并产生虚假的编译失败,直到找到并删除它。我建议将此问题中的代码块复制回源文件,以删除不可打印的字符。代码为我编译,这使我相信它可能是一个死引用。在VBE中,单击“工具/引用”,查看是否有列出为缺少的内容在嵌套循环时,应始终在下一语句中引用要递增/递减/步进的变量
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
你的代码编译得很好。请尝试以下操作: 取消选中Visual Basic For Application from VBA references save并将其添加回 如果您不知道如何执行此操作,请执行以下步骤: 转到VBA编辑器, 单击工具,然后单击参考 您应该有一个名为Visual Basic For Application的项目取消选中该项目 单击“确定” 保存您的电子表格 执行上述步骤1和2 选中未选中的项Visual Basic For Application 单击“确定” 保存您的电子表格 关闭您的电子表格以及您可能拥有的任何Excel实例和对象,如下所示: -如果有任何打开的Excel文件和Excel程序,请关闭所有Excel文件和Excel程序 -通过执行Alt+Ctrl+Del转到任务管理器,然后选择任务管理器 -转到“流程”选项卡 -按进程名称排序 -在列表中查找任何Excel.exe并强制将其全部关闭 打开有问题的电子表格并尝试代码。 让我们知道
谢谢大家! 我复制并粘贴了它,现在我在第24行得到了一个超出范围的下标。有什么想法吗?这正是我要分享的答案,但被击败了。好吧,这可能是最好的做法,但不这样做不应该导致OP得到的错误。我做了你的更改。我现在在arr2lIndex=arrloop1,lLoop2行上得到的下标超出了范围。我被告知这可能是因为我的变量没有声明。我不知道如何解决这个问题。