我有一个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多名患者的名单。
答案 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