【问题标题】:Excel VBA row copy and pasting errorExcel VBA行复制和粘贴错误
【发布时间】:2017-11-20 15:50:21
【问题描述】:

以下代码是根据第一张纸的 E 列中满足的关键字条件,将行从 sheet1 复制并粘贴到 sheet2。

在代码行 5 到 10 之间,我尝试将整个第十行复制到 sheet2 以用作此工作表的列标题,其中将创建一个数据透视表。

每当我尝试运行任何操作来复制和粘贴此行时,都会收到“应用程序定义或对象定义错误”。

谁能帮忙?

Sub mileStoneDateChanger()
    Dim r As Long, pasteRowIndex As Long, v() As Long, i As Long
    Dim lastRow As Long
    Dim lCol As Long
    Sheets("Sheet1").Select
    Rows("10:10").Select
    Selection.Copy
    Sheets("Sheet2").Select
    Range("A1").Select
    Selection.Paste
    lastRow = Cells.Find(What:="*",
                    After:=Range("A1"),
                    LookAt:=xlPart,
                    LookIn:=xlFormulas,
                    SearchOrder:=xlByRows,
                    SearchDirection:=xlPrevious,
                    MatchCase:=False).Row
    MsgBox "Last Row: " & lastRow
    pasteRowIndex = 1

    With Sheets("Sheet1")
        For r = 1 To lastRow
            If .Cells(r, "E").Value Like "Milestone*" Then
                If UBound(Split(.Cells(r, "E"), ",")) > 0 Then
                    i = i + 1
                    ReDim v(1 To i)
                    v(i) = pasteRowIndex
                End If
                Sheets("Sheet1").Rows(r).Copy Sheets("Sheet2").Rows(pasteRowIndex)
            pasteRowIndex = pasteRowIndex + 1
            End If
        Next r
    End With

    With Sheets("Sheet2")
        newLastRow = pasteRowIndex
        If IsArray(v) Then
            .Columns(6).Insert shift:=xlToRight
         For i = 1 To newLastRow
                If InStr(1, .Cells(i, "E"), ",") Then
                    .Cells(i, "F").Value = Split(.Cells(i, "E"), ",")(1)
                End If
            Next i
        End If
    End With
End Sub

【问题讨论】:

  • 当您手动执行相同的操作时,使用宏记录器会得到什么语法?这应该是一个很好的第一次检查。
  • 您要查找最后一行的哪张工作表?此代码现在找到 Sheet2 的最后一行
  • @mooseman 我在第一张纸上找到最后一行,然后在第二张纸上分别找到最后一行.. 两个单独的操作

标签: vba excel


【解决方案1】:

这是Sheet1中第10行到Sheet2中A1的副本

Sheets("Sheet1").Rows("10").Copy Sheets("Sheet2").Range("A1")

【讨论】:

    【解决方案2】:

    Selection.Paste 替换为Selection.PasteSpecial

    【讨论】:

      【解决方案3】:

      Range("A1") 不能粘贴一整行。因此,请使用以下内容:

      Sub TestME()
      
          Sheets(1).Select
          Rows("10:10").Select
          Selection.Copy
          Sheets(2).Select
          Range("A1").Select
          ActiveSheet.Paste
          Application.CutCopyMode = False
      
      End Sub
      

      免责声明 - 您真的不想在 VBA 中使用 SelectActiveHow to avoid using Select in Excel VBA


      最好的情况可能是像这样避免Copy

      Sub TestME()
          WorkSheets(2).Rows(1) = WorkSheets(1).Rows(10)
      End Sub
      

      【讨论】:

      • 我在 Range("A1").Select line 上遇到了同样的错误
      • @SDROB - 这很奇怪。您确定您使用的是完全我的代码吗?
      猜你喜欢
      • 2017-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多