Wie kann verhindert werden, dass ein Makro das Excel-Fenster einfriert / weiß wird?

So bei der Arbeit arbeite ich an einem Makro / UserForm in Excel für jemanden. Es funktioniert großartig (glaube ich) und macht genau das, was es tun muss. Es dauert weniger als 1 Minute, bis es durch ~ 70.000 Zellen geht und sie organisiert. Jetzt habe ich mich gefragt, ob es eine Möglichkeit gibt, es zu verlangsamen, damit Excel während der Ausführung nicht in den Modus "Reagiert nicht" wechselt. Es wäre einfach besser, damit Leute, die das Makro verwenden müssen, nicht ausflippen, wenn es einfriert. Und es wäre am besten, wenn es eine Lösung in VBA gäbe, damit sich die Leute darüber keine Sorgen machen müssen und es beim ersten Mal perfekt funktioniert.

Über das Makro

Die Daten sind eine Reihe von Zahlen, die in eine Spalte gesetzt werden müssen, und die 14 (normalerweise 14) Spalten, bevor sie jede Zahl mit Datumsangaben und anderen Daten beschriften. Alle Größenangaben und Blattnamen müssen aus einer UserForm stammen, damit ich den Namen der Blätter oder die Größe nicht vorher kenne. Dies führte zu einem seltsamen Code am Anfang meiner Schleife.

Auch wenn Sie trotzdem sehen, um meinen Code effizienter zu machen, wäre das sehr dankbar!

Der Cod

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage