我有以下vba代码 Sub Macro1()
Dim FLrange As Range
Set FLrange = Range("C3:E3")
For Each cell In FLrange
If cell.Value = 0 Then cell.FormulaR1C1 = "=SUMIFS(raw!C4,raw!C1,R[0]C1,raw!C3,R2C[0])"
Next cell
End Sub
现在,在执行上面代码中的公式之前,我想在此处添加另一个函数。我需要将当前单元格值复制到完全相同的单元格上的另一个工作表。即,必须粘贴来自sheet1单元格C3
的值,才能粘贴sheet2单元格C3
我试过
Sub Macro1()
Dim FLrange As Range
Set FLrange = Range("C3:E3")
For Each cell In FLrange
Selection.Copy
Sheets("sheet2").Paste
If cell.Value = 0 Then cell.FormulaR1C1 = "=SUMIFS(raw!C4,raw!C1,R[0]C1,raw!C3,R2C[0])"
Next cell
End Sub
但是这个没有粘贴sheet2中相应单元格的值,但是看到它将公式粘贴到随机单元格中。
如何将当前工作表(sheet1)范围内每个单元格的值粘贴到另一个工作表shet2
答案 0 :(得分:1)
首先,您在代码中使用Selection
,但您永远不会更改ActiveCell
。无论如何,使用ActiveCell
是不好的做法,除非完全有必要,否则应始终使用对象引用来复制而不是选择。
其次,你永远不会给它一个实际的粘贴范围,你只需要给它一张,所以我很惊讶,当你试图运行它时,不会抛出某种错误。
我的代码设置了你想要迭代的范围(要使用Me
,你需要将它放在Sheet1的Sheet Module中,否则你需要在Sheet1上明确说出它) ,迭代它,然后在第二个明确定义的工作表上将其复制到相同的Col / Row索引。
在最佳实践方面,您应该始终明确定义内容,尤其是当您谈论VBA时。
Option Explicit
Sub Test()
Dim rng As Range
Dim c As Range
Dim dest As Worksheet
Set rng = Me.Range("A1:A10")
Set dest = ThisWorkbook.Worksheets("Sheet2") '' rename this to whatever sheet you want this to copy to
For Each c In rng
c.Copy dest.Cells(c.Row, c.Column)
If c.Value = 0 Then
c.FormulaR1C1 = "=SUMIFS(raw!C4,raw!C1,R[0]C1,raw!C3,R2C[0])"
End If
Next c
End Sub