У меня есть макрос, который выдал приведенную ниже ошибку, и у меня есть теория, почему, но у меня возникают проблемы с поиском какой-либо литературы, чтобы подтвердить это. Страницы, которые я нашел, - это, как правило, люди, публикующие глупые ошибки с неправильными типами переменных.
![Run-time error '6' screenshot](https://i.stack.imgur.com/do3Oq.png)
Я не думаю, что с кодом что-то не так, я просто думаю, что природа задачи занимает слишком много времени, поэтому перегружаем временную папку. За TechWalla ( выделение мое):
Ошибка выполнения 6 возникает в программе Visual Basic. Это проблема переполнения, которая может возникнуть, когда программа Visual Basic пытается сохранить слишком много данных в области временных папок . Исполняемые файлы помогают Windows переводить язык программы на язык Windows, чтобы программа работала быстрее. Вы можете получить сообщение об ошибке выполнения 6 по нескольким причинам. Одна из причин заключается в том, что в одном из ваших вычислений вы используете обратную косую черту вместо прямой. Другие причины включают перегруженную временную папку , устаревшее программное обеспечение или ошибку реестра.
( Предостережение: Я не видел этого объяснения в другом месте и не могу подтвердить, насколько надежна Techwalla. Я не знаю, ищу ли я правильные ключевые слова, но, как я сказал, что я не нашел ничего, кроме сообщений на форуме, посвященных коду.)
Есть ли способ определить, так ли это? Ниже я обрисовываю, почему я думаю, что именно это вызывает ошибку, которая может помочь, но не меняет вопрос. Если это так, есть ли способ узнать? И если да, есть ли способ предотвратить это?
(Я буду запускать его снова сегодня вечером, когда я использовал очиститель реестра, который обнаружил 1 ГБ, хотя я не знаю, сколько было из Excel. Для справки, мой диск C: имеет 180 ГБ свободного ... )
РЕДАКТИРОВАТЬ: Удаление кода, потому что я спрашиваю не об этом, а о том, может ли перегрузка временной папки действительно вызвать это.
РЕДАКТИРОВАТЬ 2: После того, как меня покачали люди, я снова добавляю код. И я знаю, это не эффективно. Спасибо за предложения, хотя.
EDIT3 (ПОСЛЕДНИЙ, я клянусь): хотя я понимаю, что в приведенном выше описании конкретно упоминается 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