Есть ли способ сохранить объект .Range
целиком в памяти?
Я хочу сохранить диапазоны в виде значений словаря, а затем иметь возможность распаковывать диапазоны в другом месте.Но перед распаковкой исходные диапазоны будут изменены.
Вот код, который у меня есть для хранения диапазонов в словаре:
Sub range_to_dict()
Application.EnableEvents = False
Dim d As New scripting.Dictionary
Dim rng As Range
Dim rw As Range
Dim paste_loc As Range
Set rng = Range("A1:B13")
Set paste_loc = rng.Offset(rng.Rows.Count + 2, 0).Resize(1, 1)
For Each rw In rng.Rows
d.Add (rw.Cells(1).Value), rw
Next rw
For Each k In d.Keys
d(k).Copy
paste_loc.PasteSpecial xlPasteValues
Set paste_loc = paste_loc.Offset(1, 0)
Next k
Application.EnableEvents = True
End Sub
Он выполнит эту работу, только если я этого не сделаюизмените диапазоны между созданием dict и распаковкой, потому что при распаковке VBA по-прежнему считывает диапазоны из листа, а не из памяти (словарь):
Sub range_to_dict()
Application.EnableEvents = False
Dim d As New scripting.Dictionary
Dim rng As Range
Dim rw As Range
Dim paste_loc As Range
Set rng = Range("A1:B13")
Set paste_loc = rng.Offset(rng.Rows.Count + 2, 0).Resize(1, 1)
For Each rw In rng.Rows
d.Add (rw.Cells(1).Value), rw
Next rw
'modify (clear)
For Each rw In rng.Rows
rw.Clear
Next rw
'now this will paste only empty fields
For Each k In d.Keys
d(k).Copy
paste_loc.PasteSpecial xlPasteValues
Set paste_loc = paste_loc.Offset(1, 0)
Next k
Application.EnableEvents = True
End Sub
Я могу достичь того, что хочу, сохраняя значение каждой ячейки диапазонав массиве или коллекции, а затем распаковать их, но есть ли менее многословный способ?