首页 > 解决方案 > 备份数据以供以后恢复(保存以前的值)

问题描述

我试图找出一种备份数据的方法,以便在需要时恢复它。在用户窗体初始化期间,我正在做

'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 按钮关闭。

标签: excelvbabackup

解决方案


您可以将值保存在数组中

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)持续存在。


推荐阅读