Итак, я пытаюсь вставить массив обратно, как и тысячи раз, и он вставляет некоторые данные, но не все:
это часть кода (я знаю, что это не сработает,но проект слишком большой):
Sub Main()
AhorroMemoria True
Dim Temporizador As New Timer
Temporizador.StartCounter
With ThisWorkbook.Sheets("Main")
FechaI = Left(.Range("A2"), 10)
FechaF = Right(.Range("A2"), 10)
Reductor = .Range("B2")
End With
Dim RutaCompleta As String
RutaCompleta = CargaRutaCompleta(Ruta, FechaI)
Dim wb As Workbook
Set wb = Workbooks.Add
With wb.Sheets(1)
[A1:I1] = Array("Escenario", "TERRITORIO", "POOL", "Agente", "Rotativo", "Sem Inicio Rotativo", "Objetivo", "Real", "Objetivo Con reductor")
End With
Dim MiPool As New Pool
MiPool.CargaObjetivos RutaCompleta, wb
Dim arr As Variant
CargaACC arr
Dim arrReales As Variant
arrReales = MiPool.EncuentraRotaciones(arr)
With wb.Sheets(1)
Dim LastRow As Long
LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(LastRow, 1).Resize(UBound(arrReales), UBound(arrReales, 2)).Value = arrReales
Dim arrFinal As Variant
arrFinal = .UsedRange.Value
arr = .UsedRange.Value
Dim i As Long
For i = 2 To UBound(arrFinal)
If arrFinal(i, 4) Like "Objetivo*" Then
arrFinal(i, 9) = MiPool.CargaTurnosObjetivos(CStr(arrFinal(i, 1)), CStr(arrFinal(i, 3)), CStr(arrFinal(i, 2)), CStr(arrFinal(i, 5)), CStr(arrFinal(i, 6)))
Else
Exit For
End If
Next i
.Range("A1").Resize(UBound(arrFinal), UBound(arrFinal, 2)).Value = arrFinal
End With
Erase arr
Erase arrReales
Erase arrFinal
Set MiPool = Nothing
AhorroMemoria False
MsgBox "Comprobaciones realizadas en " & Format(Temporizador.TimeElapsed / 60000, "0.00") & " minutos."
End Sub
В основном я пытаюсь вернуть расписание до последнего столбца.
Все работает отлично, но массив не вставит вседанные возвращаются в диапазон.
Перед кодом массив содержит:
После того, как код проходит через другой массив (копияоригинала):
Как видите, оба имеют одинаковые данные, только столбец 9 изменяется для целей отладки.
Это данные до запуска кода:
Дело в том, что когда я вставляю arrFinal
, это то, что я получаю:
Я не могу понять, почему VBA не вставляет весь массив обратно на лист. Я отладил .UsedRange.Address
и соответствует тому, что было раньше. Если я вставлю обратно оригинальный массив, VBA вставит его целиком ...
Кто-нибудь сталкивался с чем-то подобным раньше?
Править: Этот фрагмент кода будет работать так, как задумано, и копировать все данные.
Dim j As Long
For i = 1 To UBound(arrFinal)
For j = 1 To UBound(arrFinal, 2)
Cells(i, j) = arrFinal(i, j)
Next j
Next i