VBA - 复制和粘贴 - 运行错误

时间:2018-02-19 14:33:46

标签: excel vba excel-vba copy-paste

请参阅下面的代码。 我在sheet7的A到R列中有一个数据列表。 我需要将行1列A-F中的数据复制到sheet6的前12行,从E行开始。 执行此操作后,我需要将sheet7中的数据从第1行G-R列转换为第6列到第Q列(第1-12行)。

提前致谢。问题是在运行代码时遇到“运行时错误13,类型不匹配”。当使用F8定位问题时,我无法看到它发生的位置。我通过了代码的msgbox部分。

这需要重复多次才能完成所有数据。

Sub copy1()
    Dim i As Long
    Dim j As Long
    j = 2
    MsgBox (j)

    For i = 2 To 1000
        Worksheets(Sheet7).Activate
        Range(Cells(i, 1), Cells(i, 6)).Select
        Selection.copy
        Worksheets(Sheet6).Activate
        Range(Cells(j, 5), Cells(j + 11, 5)).PasteSpecial
        Worksheets(Sheet7).Activate
        Range(Cells(i, 7), Cells(i, 18)).Select
        Selection.copy
        Worksheets(Sheet6).Activate
        Range(Cells(j, 17).Address).PasteSpecial Transpose:=True
        j = j + 12
    Next i    
End Sub

2 个答案:

答案 0 :(得分:0)

代码的问题是Range需要两个单元格或单元格的地址才能工作。而且您需要Range作为PasteSpecial部分。看看你自己,以下内容如何不起作用:

Sub TestMe()
    Range(Cells(1, 1)).Select
End Sub

但这样可以很好地工作(所有选择A1):

Sub TestMe()
    Range(Cells(1, 1), Cells(1, 1)).Select
    Range(Cells(1, 1).Address).Select
    Range("A1").Select
    Range([A1].Address).Select
    Cells(1, 1).Select
    Cells(1).Select
    [A1].Select
End Sub

因此,更改您的代码: Range(Cells(j, 17)).PasteSpecial Transpose:=True

要: Range(Cells(j, 17).Address).PasteSpecial Transpose:=True

更有趣的话题:

答案 1 :(得分:0)

您的代码似乎存在一些潜在问题。这是它的改进版本。既然你没有提到确切的问题,看看这个是否有效..

Sub copy1()
    Dim i As Long
    Dim j As Integer
    j = 2
    MsgBox (j)

    For i = 2 To 1000
        Worksheets(Sheet7).Range(Cells(i, 1), Cells(i, 6)).copy
        Worksheets(Sheet6).Range(Cells(j, 5), Cells(j + 11, 5)).PasteSpecial xlPasteValues
        Worksheets(Sheet7).Range(Cells(i, 7), Cells(i, 18)).copy
        Worksheets(Sheet6).Range(Cells(j, 17),Cells(j, 17)).PasteSpecial xlPasteValues Transpose:=True
        j = j + 12
    Next i   
    Application.CutCopyMode = False
End Sub