我有一个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
变量中的值发生变化时,工作表中单元格中的值也会发生变化。
我想防止这种情况发生;在用户单击用户窗体上的“完成”按钮之前,不应将任何更改应用于工作表。
答案 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
这似乎很复杂,但我似乎无法从单元格对象中剥离值以对其进行更改,而不会将更改返回到单元格值。