繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM