0

我在宏中有以下代码,但是当我运行它时,它只复制单元格 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 中的值。

4

2 回答 2

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
于 2013-01-20T20:05:46.893 回答
2

我知道您已经接受了答案,这是实现您需要的另一种方法:使用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)
于 2013-01-21T04:06:32.463 回答