Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何将所有工作表内容保存在变量中,然后将其返回到工作表?_Excel_Vba - Fatal编程技术网

Excel 如何将所有工作表内容保存在变量中,然后将其返回到工作表?

Excel 如何将所有工作表内容保存在变量中,然后将其返回到工作表?,excel,vba,Excel,Vba,我有一张很大的数据表,在我运行一些代码后会发生变化。 在运行代码之前,我正在考虑一种让所有这些数据恢复活力的方法。我希望在不创建任何新工作表的情况下执行此操作—只需将值存储在对象/变量中,并在运行代码后返回 我试过做类似的事情 Dim myrng As Range myrng = sheets(x).Usedrange 'storing the sheet contents SheetS(x).Range("A1") = myrng 'bringing back original shee

我有一张很大的数据表,在我运行一些代码后会发生变化。 在运行代码之前,我正在考虑一种让所有这些数据恢复活力的方法。我希望在不创建任何新工作表的情况下执行此操作—只需将值存储在对象/变量中,并在运行代码后返回

我试过做类似的事情

Dim myrng As Range

myrng = sheets(x).Usedrange  'storing the sheet contents

SheetS(x).Range("A1") = myrng 'bringing back original sheet contents to the same sheet

我知道这可能看起来很愚蠢,但我真的不知道我是否应该做一些复制粘贴应用程序或任何事情。

这将起作用:

Dim rng As String
Dim dat() As Variant

rng = Sheets(x).UsedRange.Address
dat = Sheets(x).UsedRange.Value  'storing the sheet contents

'Do changes on Sheet

Sheets(x).Range(rng) = dat()
说明:

Dim rng As String
Dim dat() As Variant

rng = Sheets(x).UsedRange.Address
dat = Sheets(x).UsedRange.Value  'storing the sheet contents

'Do changes on Sheet

Sheets(x).Range(rng) = dat()
  • UsedRange
    地址保存在
    字符串中
  • UsedRange
    内容保存在
    数组中
  • 在第一步中,将
    数组
    粘贴回保存的地址

UsedRange
只存储地址。就像在现实生活中一样,你的家庭住址,但与谁住在那里无关。这可能会改变,但地址不会是的,这是我的想法。那个么我如何存储内容呢?最简单的方法是创建一个新的工作表,并在操作完成后删除。但由于您不想这样做,您可以创建一个数组并将UsedRange的所有值保存在其中。然后您可以循环并打印回去。@JurasSulcas,如果您以编程方式创建了一个新工作表,复制了该范围,然后在粘贴回来后将其删除(全部以编程方式?)@JurasSulcas.请参见答案。您可以将内容保存在数组中,然后像那样将其打印回来。请尝试避免使用
UsedRange
。请参考此答案:@Gangula
UsedRange
适用于这种情况。您指的是通过
UsedRange.Rows.Count
UsedRange.Columns.Count
UsedRange
获取绝对行/列。在这种情况下,第1行到第500.000行是否为空并不重要,因为
UsedRange.Address
仍将为我们提供第500.001行的地址。谢谢@Nacorid,我没有意识到这一点。