如何编辑范围variables而不编辑工作表上的单元格

我有一个用户窗体编辑我的工作簿中的某些表的值。

在用户表单代码中我有这样的:

Public vTable As Range Private Sub UserForm_Initialize() Set vTable = Sheet1.Range("Table1") vTable.Cells(1, 1).Value = "New Value" End Sub 

问题是,当vTablevariables中的值发生更改时,工作表上单元格中的值也会发生更改。

我想阻止这种事情发生; 在用户单击用户窗体上的“完成”button之前,没有任何更改应该应用于工作表。

您需要将范围的内容加载到Variant数组中,根据需要修改该数组,然后当按下该button时,将该数组重新放回到工作表上。

所以你需要:

 Public vTable As Variant 

然后:

 vTable = Sheet1.Range("Table1").Value 'load the contents of the range into an array vTable(1, 1) = "New Value" ' modify array 

按下button时,将arrays拍回纸张上:

 Sheet1.Range("Table1").Value = vTable 

你将不得不做一些循环,以取出单元格中的值,并把它们放在自己的数组中。 然后你可以修改非单元格值的数组。

 Dim i, j Dim newArr() As Variant ReDim newArr(Range("data1").Rows.Count - 1, Range("data1").Columns.Count - 1) For i = 0 To Range("data1").Rows.Count - 1 For j = 0 To Range("data1").Columns.Count - 1 newArr(i, j) = Range("data1").Cells(i + 1, j + 1).Value Next j Next i ''Change value ''Put values back into cells For i = 0 To Range("data1").Rows.Count - 1 For j = 0 To Range("data1").Columns.Count - 1 Range("data1").Cells(i + 1, j + 1).Value = newArr(i, j) Next j Next i 

这看起来很复杂,但我似乎无法剥离单元格对象的值,以便对其进行更改,而不必将更改返回到单元格值。