excel click对象将值从一个单元格存储到另一个单元格

时间:2015-06-13 07:33:57

标签: excel vba excel-vba copy paste

我正在尝试使用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 

myCellmyRange用于我以前的尝试,但它总是进行无限复制粘贴。

1 个答案:

答案 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>