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/Selectなどの使用は避けてください
  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 に答える