如何在不编辑工作表上的单元格的情况下编辑范围变量

时间:2014-04-27 18:21:15

标签: excel vba excel-vba range

我有一个userform,用于编辑工作簿中某些表的值。

在userform代码中我有:

Public vTable As Range

Private Sub UserForm_Initialize()

Set vTable = Sheet1.Range("Table1")
vTable.Cells(1, 1).Value = "New Value"

End Sub

问题是当vTable变量中的值发生变化时,工作表中单元格中的值也会发生变化。

我想防止这种情况发生;在用户单击用户窗体上的“完成”按钮之前,不应将任何更改应用于工作表。

2 个答案:

答案 0 :(得分:1)

您需要将范围的内容加载到Variant数组中,根据需要修改数组,然后在按下按钮时将数组打回到工作表上。

所以你需要:

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

按下按钮时,将阵列拍回到纸张上:

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

答案 1 :(得分:0)

您必须制作一些循环才能将值从单元格中取出并将它们放入自己的数组中。然后,您可以修改非单元格值的数组。

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

这似乎很复杂,但我似乎无法从单元格对象中剥离值以对其进行更改,而不会将更改返回到单元格值。