我在宏中有以下代码但是当我运行它时,它只复制单元格B2中的值而不是B2:D2中的整个值范围,正如我在下面代码的第5行中指定的那样。
Sub copying()
Dim calval as variant
With worksheets("sheet1")
Set calval=.Cells(Rows.Count,"B").End(xlUp).Offset(2,3)
calval.value=Range("B2:D2").Value 'copy range of values
End With
End Sub
这是单元格B2中的数据:D2
21.7 21.3 22.4
有人可以告诉我如何让calval从B2:D2中分配全部范围的值,而不仅仅是B2中的值。
答案 0 :(得分:3)
这里有一些问题。首先,当复制到变体时,它们不是对象,因此您不需要使用set。它们也没有变量范围。您还需要将值复制到变量,然后才能将其设置为输出范围,因此顺序稍微偏离。以下代码将起作用:
Sub Copying()
Dim calval as Variant
'Read it in from the worksheet
With Worksheets("Sheet1")
calval=.Range("B2:D2").value
'Set it back to the dsired range using the bounds of the variant instead of hardcoding.
.Range(.Cells(Rows.Count,"B").End(xlUp).Offset(2,3), .Cells(Rows.Count,"B").End(xlUp).Offset(1 + UBound(calval, 1), 2 + UBound(calval, 2))).Value = calval
End With
End Sub
答案 1 :(得分:0)
我知道你接受了答案,这是另一种实现你需要的方法:使用WorkSheetFunction.Transpose
方法。
Dim calval as Variant
'--- Range("B2:D2").Value
calval = WorkSheetFunction.Transpose(Sheets(1).Range("B2:D2").Value)
您可以根据自己的需要自由使用offset
,resize
。
例如将您的范围扩展到B12
calval = WorkSheetFunction.Transpose(Sheets(1).Range("B2:D2").Resize(10).Value)