excel - 备份数据以供以后恢复(保存以前的值)
问题描述
我试图找出一种备份数据的方法,以便在需要时恢复它。在用户窗体初始化期间,我正在做
'Save Backup
Worksheets("Machine Format").Cells(ActiveCell.Column).EntireColumn.copy
如果它不是整个列而是只有带有数据的行,那将是首选,但我不知道如何将此代码与
Dim LastRow As Long
LastRow = Range("B" & Rows.Count).End(xlUp).Row
我能想到的一切都不起作用,但是当我尝试粘贴以前复制的数据时
'Paste Backup
ActiveSheet.Paste Destination:=Worksheets("Machine Format").Cells(ActiveCell.Column)
它不会粘贴它,也没有显示错误。我什至不确定像这样备份数据的概念是最佳还是好主意。
有人可以帮我解决这个问题吗?我什至需要这个的原因是因为我有一个实时修改数据的用户表单,并且在通过 X 按钮关闭用户表单时,我需要它来取消所有更改,我认为我可以在用户表单初始化时复制数据,然后将其粘贴回来如果用户窗体通过 x 按钮关闭。
解决方案
您可以将值保存在数组中
Dim BackupArray() As Variant
BackupArray = Worksheets("Machine Format").UsedRange.Value
如果您必须退回它们,您可以使用
Worksheets("Machine Format").Cells(row, column).Value = BackupArray(row, column)
从备份中返回特定值,或一次恢复整个值:
Worksheets("Machine Format").UsedRange.Value = BackupArray
请注意,这仅适用于更改的值。如果添加了新值并且您也想删除它们,则需要先清除所有单元格的内容并恢复到原始范围:
Dim OriginalDataRange As Range
Set OriginalDataRange = Worksheets("Machine Format").UsedRange
Dim BackupArray() As Variant
BackupArray = OriginalDataRange.Value
' do your changes here
' revert entire backup
Worksheets("Machine Format").UsedRange.ClearContents 'remove changed data including new added data
OriginalDataRange.Value = BackupArray ' revert old tata
BackupArray
如果创建备份和恢复不在同一过程中,请创建一个公共变量。
请注意,如果您不小心停止了整个 VBA 运行,例如。通过使用End
语句(不要混淆End Sub
!)然后备份数据丢失。它仅在 VBA 运行时(或更好的变量生命周期BackupArray
)持续存在。