0

我不知道这段代码有什么问题,有人可以找出错误吗?我给了我错误:

对象不支持此属性或方法。

Sub copyrow2()

Dim Lastro As Integer
Dim nLastro As Integer
Dim Rng As Range

nLastro = ActiveSheet.Cells(Rows.Count, 10).End(xlUp).Row
Lastro = ActiveSheet.Cells(Rows.Count, 9).End(xlUp).Row + 1

If Lastro < nLastro Then

With oSht = ActiveSheet
Set Rng = oSht.Range("J" & Lastro & ":" & "k" & nLastro)
      Rng.Copy
      oSht.Range("H" & Lastro).Select
      ActiveSheet.Paste
End With

End If
4

1 回答 1

5

代码有几个问题

  1. 请使用Option Explicit. 这将迫使您声明变量。例如oSht未声明。
  2. 使用行时,切勿将 tham 声明为Integers. 在 xl2007+ 中您可能会遇到错误的可能性很大。将它们声明为Long
  3. 避免使用ActiveSheet/Selectetc.有趣的阅读
  4. 完全合格Rows.Count。在兼容模式下处理多个 excel 文件时,如果您没有完全限定它们,可能会导致错误。

这是你正在尝试的吗?

代码:(未经测试)

Option Explicit

Sub copyrow2()
    Dim oSht As Worksheet
    Dim Lastro As Long, nLastro As Long
    Dim Rng As Range

    '~~> Change this to the relevant sheet
    Set oSht = ThisWorkbook.Sheets("Sheet1")

    With oSht
        nLastro = .Cells(.Rows.Count, 10).End(xlUp).Row
        Lastro = .Cells(.Rows.Count, 9).End(xlUp).Row + 1

        If Lastro < nLastro Then
            Set Rng = .Range("J" & Lastro & ":" & "k" & nLastro)
            Rng.Copy .Range("H" & Lastro)
        End If
    End With
End Sub
于 2013-10-22T17:19:06.440 回答