Как предотвратить замерзание макроса в окне Excel?

Так что на работе я работаю над макросом / UserForm в Excel для кого-то. Он отлично работает (я думаю) и делает именно то, что ему нужно, и занимает менее 1 минуты, чтобы пройти, пройдя ~ 70 тыс. Ячеек и организовав их. Теперь мне было интересно, есть ли способ замедлить его, чтобы Excel не переходил в режим «Не отвечает» во время работы. Было бы лучше, чтобы люди, которым нужно использовать макрос, не волновались, когда он зависал. И было бы лучше, если бы в VBA было решение, чтобы люди не беспокоились об этом, и оно работает отлично с первого раза.

О макросе

Данные представляют собой набор чисел, которые должны быть помещены в один столбец, и в 14 (обычно 14) столбцах перед ним каждый номер помечается датами и другими данными. Все ссылки на размеры и имена листов должны быть из пользовательской формы, поэтому я заранее не знаю ни имени листов, ни размера, что привело к некоторому странному коду в начале моего цикла.

Кроме того, если вы все равно захотите сделать мой код более эффективным, это будет с благодарностью!

Код

Private Sub UserForm_Initialize()

    'This brings up the data for my dropdown menu to pick a sheet to pull data from
    For i = 1 To Sheets.Count
        combo.AddItem Sheets(i).name
    Next i

End Sub

Private Sub OK_Click()

    Unload AutoPivotusrfrm

    'Declaring All of my Variables that are pulled from Userform

    Dim place As Long

    Dim x1 As Integer
    x1 = value1.Value
    Dim x2 As Integer
    x2 = value2.Value
    Dim x3 As Integer
    x3 = value4.Value
    Dim y1 As Integer
    y1 = value3.Value

    Dim copyRange As Variant

    Dim oldname As String
    oldsheetname = combo.Text

    Dim newname As String
    newname = newsheetname.Text

    Sheets.Add.name = newsheetname

    'Labels for section one
    Worksheets(CStr(oldsheetname)).Activate
    copyRange = Range(Cells(x1, x1), Cells(x1 + 1, x3 - 1)).Value
    Worksheets(CStr(newsheetname)).Activate
    Range(Cells(x1, x1), Cells(x1 + 1, x3 - 1)).Value = copyRange
    place = x1 + 2
    x1 = place


    'Looping through the cells copying data
    For i = x1 To x2
    'This was the only way to copy multiple cells at once other ways it would just error
        Worksheets(CStr(oldsheetname)).Activate
        copyRange = Range(Cells(i + 3 - x1, x1 - 2), Cells(i + 3 - x1, x3 - 1)).Value
        Worksheets(CStr(newsheetname)).Activate
        For j = x3 To y1
            Range(Cells(place, 1), Cells(place, x3 - 1)).Value = copyRange
            Cells(place, x3) = Sheets(CStr(oldsheetname)).Cells(1, j)
            Cells(place, x3 + 1) = Sheets(CStr(oldsheetname)).Cells(2, j)
            Cells(place, x3 + 2) = Sheets(CStr(oldsheetname)).Cells(i + 2, j)
            place = place + 1
        Next j
    Next i

End Sub

Private Sub cancel_Click()

    Unload AutoPivotusrfrm

End Sub

Ответы на вопрос(1)

Ваш ответ на вопрос