我有一个 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 多名患者的列表。
最佳答案
你可以这样做:
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
关于VBA将值粘贴到下一个空单元格中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37662163/