我正在尝试在 excel VBA 中处理某些内容,但我似乎无法使其正常工作。
以下是它应该如何工作:我需要将"J21"单元格的值从一张纸复制并粘贴到另一张纸上。但是,J21 的值每周都在变化。所以我想如果我创建一个代码,我只需按下一个对象(比如"STORE!"),它将"J21"的值从工作表 1 复制到"C3"工作表 2。然后,当 J21 的值发生变化时,我只需再次按"STORE!",它将复制 J21 的值并将其粘贴到"C4"工作表 2 上,而不更改"C3"工作表 2 上的先前值。
这是我的最新尝试:
Dim myCell As Range, myRange As Range, i As Long
i = 3
Set myRange = Sheets("Summary").Range("C3")
Set myRange = Range(myRange, myRange.End(xlDown))
Sheets("Sheet1").Select
Range("J21").Copy
Sheets("Summary").Select
Cells(i, 3).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks:=False, Transpose:=False
i = i + 1
myCell
和myRange
用于我以前的尝试,但它总是无限复制粘贴。
不需要在VBA中选择和复制粘贴。如果要修改单元格的值,最好直接使用范围对象的 value 属性。您似乎想建立对 Sheet2 上 C2 下方第一个空白单元格的引用。代码的问题在于 Range(myRange, myRange.End(xlDown)) 选择整个单元格块(在您想要的单元格上方)而不是单个单元格。虽然可以使用.End(xlDown) 适当地到达您想要的单元格,正确处理有点棘手,因为它的行为会有所不同,具体取决于当前单元格下方的单元格是否为空白。一会儿循环是一种方式。像这样:
Sub store()
Dim target As Range, source As Range
Set source = Sheets("Sheet1").Range("J21")
Set target = Sheets("Sheet2").Range("C3")
Do While Not IsEmpty(target.Value)
Set target = target.Offset(1)
Loop
target.Value = source.Value
End Sub
Chip建议你学习VBA的基础知识是一个很好的建议。如果你(像我一样)通过书本学习比通过在线教程学习得更好,我会推荐John Walkenbach的几乎所有东西 - 我第一次学习Excel编程是通过阅读他的"Excel VBA编程傻瓜"的早期版本。