我有一个宏
运行时错误“6”:
溢出
我不认为代码有什么问题,我认为任务的性质需要太长时间,因此重载了临时文件夹。根据TechWalla(**emphasis**
矿山):
Visual Basic程序中出现运行时错误6。这是一个溢出问题,当Visual Basic程序尝试存储**too much data in the temporary folders area**
时可能会发生。运行时文件帮助Windows将程序的语言转换为Windows语言,以便程序运行得更快。您可能会收到运行时错误6消息,原因有几个。一个原因是你在一个计算中使用了反斜杠而不是正斜杠。其他原因包括**an overloaded temporary folder**
,过时的软件或注册表错误。
(**警告:**我没有在其他地方看到这个解释,也不能保证Techwalla有多可靠。
有没有一种方法来确定是否是这种情况?我在下面概述了为什么我认为这是导致错误的原因,这可能会有所帮助,但不会改变问题。如果是这样的话,有没有办法知道?如果是这样,有什么方法可以预防吗?
(我今晚将再次运行它,因为我已经使用了一个发现1GB的注册表清理器,尽管我不知道有多少来自Excel。作为参考,我的C:驱动器有180 GB可用空间。)
上面的描述特别提到了Visual Basic,它不是VBA。我把它保存在里面,因为我知道Excel使用/创建临时文件,并且有内存限制,这最终是我好奇的。
Sub getCBU()
Dim rowCount As Long, newRow(1 To 17) As Variant, compareRow(1 To 17) As Variant, nextFile As String, s As Long
Dim location As String, lastRow As Long, match As Boolean, startTime As Double, secondsElapsed As String
location = "C:\Users\swallin\Documents\CBU History\"
nextFile = Dir(location & "CBU*")
rowCount = 2
startTime = Timer
Do While nextFile <> ""
Workbooks.Open (location & nextFile)
lastRow = Workbooks(nextFile).Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
For s = 18 To lastRow
match = True
For x = 1 To 17
newRow(x) = Workbooks(nextFile).Worksheets(1).Cells(s, x)
Next x
For y = 2 To rowCount
If Val(newRow(11)) = Val(ThisWorkbook.Worksheets(1).Cells(y, 11)) Then
For j = 1 To 17
compareRow(j) = ThisWorkbook.Worksheets(1).Cells(y, j).Value
Next j
For v = 1 To 17
If Val(compareRow(v)) <> Val(newRow(v)) Then
match = False
Exit For
Else
match = True
End If
Next v
If match = True Then
Exit For
End If
Else
match = False
End If
Next y
y = 2
If match = False Then
rowCount = rowCount + 1
For t = 1 To 17
ThisWorkbook.Worksheets(1).Cells(rowCount, t) = newRow(t)
Next t
End If
Next s
s = 18
Workbooks(nextFile).Close
nextFile = Dir()
Loop
secondsElapsed = Format((Timer - startTime) / 86400, "hh:mm:ss")
ThisWorkbook.Worksheets(2).Cells(1, 1) = secondsElapsed
End Sub
3条答案
按热度按时间46qrfjad1#
这将为每个文件打开一个新示例,然后关闭它。给予看(我无法测试)。这包括我在聊天中提出的所有建议。
enxuqcxy2#
不确定写回工作表部分(我仍然会将值分配给一个数组并一起写回,但这取决于你在工作表中已经有了什么,再加上
newRow()
所做的),但你能试试看是否有任何速度上的改进吗?PS:正如其他人建议的那样,使用
Option Explicit
是一个好主意,并最终逐步执行代码,看看是否一切都按预期工作。至于溢出问题……逐步通过代码最终也会/应该解决这个问题。请参阅Overflow (Error 6)了解更多信息。
**编辑:**我已经添加了进一步的管理来保存数组中的值,并写回电子表格。
rt4zxlrg3#
下面是对代码的改进,它应该更快,更友好。(更新为能够处理任何数量的结果)。