VBA将值粘贴到下一个空单元格中

时间:2016-06-06 16:11:50

标签: excel vba excel-vba macros

我有一个VBA宏,它只是将值从一个单元格(Worksheet1.a1)复制到另一个单元格(Worksheet2.a1),该单元格由一个带有指定宏的按钮触发。

Sub copy_values()

    Worksheets("Worksheet2").Range("a1").Value = Worksheets("Worksheet1").Range("a1").Value

End Sub

问题是,在Worksheet1上,我有一个列出所有可用患者的组合框。根据选择的患者,Worksheet1.A1中的值会发生变化。

所以说我选择"患者A"并使用该按钮将Worksheet1.A1的值(假设值为" 500")复制粘贴到Worksheet2.A2中。如果我然后使用组合框选择"患者B",它将Worksheet1.A1的值更改为" 600",然后继续使用按钮将此值粘贴到Worksheet2中.A2," 500"以前显然已经用新值覆盖了。

我需要保留两个值。因此,在将患者A的值粘贴到Worksheet2.A1之后,我需要将患者B的值以动态方式粘贴到Worksheet2.A2中。我无法对此进行硬编码,因为我有300多名患者的名单。

2 个答案:

答案 0 :(得分:2)

你可以这样做:

Sub copy_values()
    Dim R As Range
    Set R = Worksheets("Worksheet2").Cells(Rows.Count, 1).End(xlUp) 'last cell in Column A with data
    If Len(R.Value) > 0 Then Set R = R.Offset(1)
    R.Value = Worksheets("Worksheet1").Range("a1").Value
End Sub

我们的想法是在列A中查找包含数据的最后一个值。如果列A为空,End方法将返回A1。上面的代码检查了这种可能性。

这是一个调整版本,它带有一个可选的源单元字符串参数:

Sub copy_values(Optional Source As String = "A1")
    Dim R As Range
    Dim col As Long
    col = Range(Source).Column

    Set R = Worksheets("Worksheet2").Cells(Rows.Count, col).End(xlUp) 'last cell in Column col with data
    If Len(R.Value) > 0 Then Set R = R.Offset(1)
    R.Value = Worksheets("Worksheet1").Range(Source).Value
End Sub

像:

Sub test()
    copy_values 'works as before

    copy_values "B1" 'copies value in B1 in first sheet to first available slot in column B in second sheet
End Sub

答案 1 :(得分:0)

Sub copy_values()
    Dim a As Worksheet
    Dim b As Worksheet

    Set a = Sheets("Worksheet2")
    Set b = Sheets("Worksheet3")

    b.Range("a65536").End(xlUp).Offset(1, 0).Value = a.Range("a1").Value

End Sub