Уточнение моего текущего кода для сокращения времени обработки в Excel: удаление и восстановление значений диапазона - PullRequest
0 голосов
/ 03 марта 2019

Мой текущий код работает и выполняет работу по сохранению значений в определенных диапазонах в качестве глобальных переменных, а затем с помощью кнопки очищает эти данные из двух таблиц Excel, а с помощью другой кнопки восстанавливает очищенные данные.

Проблема в том, что время обработки является значительным, поскольку в моей книге много листов, и все они связаны между собой.Я задавался вопросом, может ли кто-нибудь придумать способ переписать код, чтобы Excel мог быстрее его обработать?

Заранее спасибо!

Option Explicit
Dim arr1 As Variant
Dim arr2 As Variant
Dim arr3 As Variant
Dim arr4 As Variant
Dim arr5 As Variant
Dim arr6 As Variant



Public Sub HidePD()

Dim rngData1 As Range
Dim rngData2 As Range
Dim rngData3 As Range
Dim rngData4 As Range
Dim rngData5 As Range
Dim rngData6 As Range
Dim cell As Range

With ThisWorkbook.Worksheets("Overview_Existing Portfolio EUR")

    arr1 = ""
    arr2 = ""
    arr3 = ""

    Set rngData1 = .Range("E12:I12,K12:DG12")
    Set rngData2 = .Range("E10:I10,K10:DG10")
    Set rngData3 = .Range("E16:I16,K16:DG16")

    arr1 = .Range("E12:DG12")
    arr2 = .Range("E10:DG10")
    arr3 = .Range("E16:DG16")

    rngData1.ClearContents
    rngData2.ClearContents
    rngData3.ClearContents

End With

With ThisWorkbook.Worksheets("Input Sheet LC")

    arr4 = ""
    arr5 = ""
    arr6 = ""

    Set rngData4 = .Range("I76:S103")
    Set rngData5 = .Range("I111:S126")
    Set rngData6 = .Range("I355:S390")

    arr4 = .Range("I76:S103")
    arr5 = .Range("I111:S126")
    arr6 = .Range("I355:S390")

    rngData4.ClearContents
    rngData5.ClearContents
    rngData6.ClearContents

End With

End Sub

Public Sub ShowPD()

With ThisWorkbook.Worksheets("Overview_Existing Portfolio EUR")
        .Range("E12:DG12").Value = arr1
        .Range("E10:DG10").Value = arr2
        .Range("E16:DG16").Value = arr3

End With


With ThisWorkbook.Worksheets("Input Sheet LC")
        .Range("I76:S103").Value = arr4
        .Range("I111:S126").Value = arr5
        .Range("I355:S390").Value = arr6

End With
End Sub

1 Ответ

0 голосов
/ 04 марта 2019

Они правы (выше) - есть некоторые члены приложения, такие как ScreenUpdating , EnableEvents & Расчет .Использует больше всего памяти, даже больше в 64x, чем в 32x системах, и кажется, что вы используете 6, и они имеют динамическую длину - что занимает больше всего памяти.Если у вас есть процедуры, которые вызывают другие процедуры, эти переменные будут жить до тех пор, пока все не будет завершено;поэтому, возможно, очистка переменных в конце каждой подпрограммы / функции.

(извините, не могу Добавить комментарий , так как мне нужно больше очков репутации! :))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...