Excel 单击对象将值从一个单元格存储到另一个单元格



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

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

通常

不需要在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编程傻瓜"的早期版本。

相关内容

最新更新