Странное поведение на Range = массив - PullRequest
0 голосов
/ 05 ноября 2019

Итак, я пытаюсь вставить массив обратно, как и тысячи раз, и он вставляет некоторые данные, но не все:

это часть кода (я знаю, что это не сработает,но проект слишком большой):

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

В основном я пытаюсь вернуть расписание до последнего столбца.

Все работает отлично, но массив не вставит вседанные возвращаются в диапазон.

Перед кодом массив содержит:

Before

После того, как код проходит через другой массив (копияоригинала):

After

Как видите, оба имеют одинаковые данные, только столбец 9 изменяется для целей отладки.

Это данные до запуска кода:

Data before

Дело в том, что когда я вставляю arrFinal, это то, что я получаю:

Data after

Я не могу понять, почему 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...