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

我有一个VBAmacros,只是将一个单元格(Worksheet1.a1)的值复制到另一个单元格(Worksheet2.a1),这是由一个button与分配的macros触发。

Sub copy_values() Worksheets("Worksheet2").Range("a1").Value = Worksheets("Worksheet1").Range("a1").Value End Sub 

问题是,在Worksheet1上,我有一个combobox,列出所有可用的病人。 根据select什么病人,Worksheet1.A1中的值会更改。

所以说我select“病人A”,并使用button复制粘贴到Worksheet2.A2 Worksheet1.A1(可以说是值“500”)的值。 如果我然后使用combobox来select“Patient B”,它将Worksheet1.A1的值更改为“600”,并继续使用该button将此值粘贴到Worksheet2.A2,以前的“500”新价值显然被覆盖了。

我需要保留这两个值。 因此,在将患者A的值粘贴到Worksheet2.A1中之后,我需要将患者B的值以dynamic方式粘贴到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。 上面的代码检查这种可能性。

这是一个经过调整的版本,它采用可选的源单元格string参数:

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