我正在尝试使用excel VBA中的某些东西,但我似乎无法使其正常工作。
以下是它应该如何工作: 我需要将“J21”单元格的值从一张纸复制并粘贴到另一张纸上。但是,J21的价值每周都在不断变化。所以我想如果我创建一个代码,我只需按一个对象(比如说“STORE!”),然后将“J21”的值从Sheet1复制到“C3”表2.然后当J21的值改变时,我只按“存储!”再次,它将复制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
用于我以前的尝试,但它总是进行无限复制粘贴。
答案 0 :(得分:1)
通常不需要在VBA中进行选择和复制粘贴。如果要修改单元格的值,最好直接使用范围对象的value属性。您似乎想要建立对Sheet2上C2下面的第一个空白单元格的引用。您的代码的问题是Range(myRange,myRange.End(xlDown))选择整个单元格块(在您想要的单元格上方)而不是单个单元格。虽然可以适当地使用.End(xlDown)来到达你想要的单元格,但是由于它的行为不同取决于当前单元格下面的单元格是否为空白,所以要正确起来有点棘手。 while循环是一种方法。类似的东西:
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 VBA Programming for Dummies”的早期版本来学习编程Excel。 / p>