excel vba设置范围为currentregion

我正在设置一个等于当前区域的范围。 下面的代码工作,但激活命令改变我不想要的焦点。 如果我删除最后一行的激活命令excel崩溃。 下面的代码是在一个类模块和一个较大的子部分。 有什么build议么?

worksheets(SHT).activate 'stops the runtime error but changes sheet With Worksheets(SHT) With .Range(TBL2).CurrentRegion .Cells = Data End With End With 

运行时错误

有很多代码丢失,但是你可以使用这样的东西将2维variables数组(例如数据 )的内容转移到当前区域。

 With Worksheets(SHT) With .Range(TBL2).CurrentRegion .Cells = Data End With End With 

由于不能保证Data和.CurrentRegion是相同的大小,所以这可能会更好,

 With Worksheets(SHT) With .Range(TBL2).resize(ubound(Data, 1), ubound(Data, 2)) .Cells = Data End With End With 

考虑到Data 2-D数组的范围是未知的,所以很难更精确。

经testing:

 Sub collect_change_dump() Dim SHT As String, TBL2 As String, v As Long, w As Long, Data As Variant SHT = "Sheet1" TBL2 = "D3" With Worksheets(SHT) With .Range(TBL2).CurrentRegion Data = .Cells.Value End With For v = LBound(Data, 1) To UBound(Data, 1) For w = LBound(Data, 2) To UBound(Data, 2) Data(v, w) = "blah" Next w Next v With .Range(TBL2).Resize(UBound(Data, 1), UBound(Data, 2)) .Cells = Data End With End With End Sub