关于vba代码中复制和粘贴的一些问题

时间:2018-02-20 10:08:42

标签: excel vba

    A   B   C   D
1   1   2   1   005
2   2   4   2   005
3   3   6   3   005
4   4   8   4   005
5   5   10  5   005

我想将工作表中的数据(" A")复制到工作表(" B"),C列和D列是文本格式。

如果我使用以下代码,则存在所有数据都是值格式的问题,例如结果如下:

Worksheets("B").Range("A1:D5").Value = Worksheets("A").Range("A1:D5").Value

或者

Worksheets("A").Activate
    Range(Cells(1, 1), Cells(5, 4)).Copy Destination:=Worksheets("B").Cells(1, 1)

-

    A   B   C   D
1   1   2   1   5
2   2   4   2   5
3   3   6   3   5
4   4   8   4   5
5   5   10  5   5

如果我使用下面的代码可以获得我想要的结果。我想问其他更快的方法来实现想要的结果吗?

Worksheets("A").Activate
    Range(Cells(1, 1), Cells(5, 4)).Copy
Worksheets("B").Cells(1, 1).PasteSpecial xlPasteValues

以下结果是我想要的工作表(" B")。

    A   B   C   D
1   1   2   1   005
2   2   4   2   005
3   3   6   3   005
4   4   8   4   005
5   5   10  5   005

另一个问题是为什么以下代码会出错?

Worksheets("B").Range(Cells(1, 1), Cells(5,4)).Value = Worksheets("A").Range(Cells(1, 1), Cells(5,4)).Value

谢谢!

2 个答案:

答案 0 :(得分:0)

对于第一个问题,没有比使用xlPasteValues使用pastespecial更快的方法。

另一种方法是将目标单元格的格式更改为文本,然后执行普通复制。在这种情况下,Vba不会做任何事情,而不是用户可以手动做的事情。即使您手动执行此操作,也无法将数据复制到具有不同格式的其他工作表,并且希望保持不变。你必须使用 pastespecial - >仅粘贴值

Paste as Values

这同样适用于Vba。

对于问题的第二部分,

Worksheets("B").Range(Cells(1, 1), Cells(5,4)).Value = _
Worksheets("A").Range(Cells(1, 1), Cells(5,4)).Value

你的问题在于范围功能。 Cells(1,1)返回Cell(1,1)的值而不是地址。范围需要单元格地址才能工作,这会造成麻烦。

Cells function

答案 1 :(得分:0)

我认为这是复制和粘贴的最佳解决方案。正如您所知,您不能简单地复制值,因为格式不同。使用PasteSpecial,您可以先粘贴格式,然后粘贴值:

With Worksheets("A")
    .Range(.Cells(1, 1), .Cells(5, 4)).Copy
End With
With Worksheets("B").
    .Cells(1, 1).PasteSpecial Paste:=xlPasteFormats
    .Cells(1, 1).PasteSpecial Paste:=xlPasteValues
End With

您收到错误的另一个问题:

您需要在范围内的单元格之前添加工作表:

Worksheets("B").Range(Worksheets("B").Cells(1, 1), Worksheets("B").Cells(5, 4)).Value = Worksheets("A").Range(Worksheets("A").Cells(1, 1), Worksheets("A").Cells(5, 4)).Value