[英]How can I set the range of the first listobject in an Excel worksheet to be a variable?
[英]How can I edit a range variable without editing the cells on the worksheet
我有一个用户表单,可以编辑工作簿中某些表的值。
在用户代码中,我有这个:
Public vTable As Range
Private Sub UserForm_Initialize()
Set vTable = Sheet1.Range("Table1")
vTable.Cells(1, 1).Value = "New Value"
End Sub
问题在于,当vTable
变量中的值更改时,工作表上单元格中的值也会更改。
我想防止这种情况的发生; 除非用户单击用户窗体上的“完成”按钮,否则所有更改均不应应用于工作表。
您需要将范围的内容加载到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
您将必须进行一些循环才能将值从单元格中取出,并将其放入自己的数组中。 然后,您可以修改非单元格值的数组。
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
这似乎很复杂,但是我似乎无法从单元格对象中剥离值以对其进行更改,而无需将更改返回到单元格值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.