Vba 生成错误的代码有什么问题?

Vba 生成错误的代码有什么问题?,vba,excel,Vba,Excel,我不知道这个代码出了什么问题,有人能帮我找出错误吗?。我告诉我错误: 对象不支持此属性或方法 子副本行2() Dim Lastro作为整数 作为整数的Dim-nLastro 变暗Rng As范围 nLastro=ActiveSheet.Cells(Rows.Count,10).End(xlUp).Row Lastro=ActiveSheet.Cells(Rows.Count,9)。End(xlUp)。Row+1 如果Lastro将其更改为相关的工作表 设置oSht=ThisWorkbook.Sh

我不知道这个代码出了什么问题,有人能帮我找出错误吗?。我告诉我错误:

对象不支持此属性或方法

子副本行2()
Dim Lastro作为整数
作为整数的Dim-nLastro
变暗Rng As范围
nLastro=ActiveSheet.Cells(Rows.Count,10).End(xlUp).Row
Lastro=ActiveSheet.Cells(Rows.Count,9)。End(xlUp)。Row+1
如果Lastro
该代码有几个问题

  • 请使用
    选项显式
    。这将迫使您声明变量。例如,
    oSht
    未声明
  • 处理行时,切勿将tham声明为
    整数
    。您很有可能在xl2007+中遇到错误。将它们声明为
    Long
  • 避免使用
    ActiveSheet/Select
  • 完全限定
    行。计数
    。在兼容模式下使用多个excel文件时,如果您没有完全限定它们,可能会导致错误
  • 这就是你想要的吗

    代码:(未经测试)

    选项显式
    子副本行2()
    将oSht设置为工作表
    昏暗的拉斯特罗一样长,nLastro一样长
    变暗Rng As范围
    “~~>将其更改为相关的工作表
    设置oSht=ThisWorkbook.Sheets(“Sheet1”)
    与奥什特
    nLastro=.Cells(.Rows.Count,10).End(xlUp).Row
    Lastro=.Cells(.Rows.Count,9).End(xlUp).Row+1
    如果Lastro
    该代码有几个问题

  • 请使用
    选项显式
    。这将迫使您声明变量。例如,
    oSht
    未声明
  • 处理行时,切勿将tham声明为
    整数
    。您很有可能在xl2007+中遇到错误。将它们声明为
    Long
  • 避免使用
    ActiveSheet/Select
  • 完全限定
    行。计数
    。在兼容模式下使用多个excel文件时,如果您没有完全限定它们,可能会导致错误
  • 这就是你想要的吗

    代码:(未经测试)

    选项显式
    子副本行2()
    将oSht设置为工作表
    昏暗的拉斯特罗一样长,nLastro一样长
    变暗Rng As范围
    “~~>将其更改为相关的工作表
    设置oSht=ThisWorkbook.Sheets(“Sheet1”)
    与奥什特
    nLastro=.Cells(.Rows.Count,10).End(xlUp).Row
    Lastro=.Cells(.Rows.Count,9).End(xlUp).Row+1
    如果Lastro
    您可以在代码的开头加一个空格,然后逐步执行,直到出现错误。我之前已经提到过,但值得重复:。您已经问了9个问题,但没有接受任何答案。。。为什么不呢?你可以要求提问者接受答案(如果提问者是新的),但你不能强迫他这么做:)REF:@SiddharthRout,这似乎很明显:)你可以在代码的开头稍作停顿,然后逐步执行,直到出现错误。我之前已经提到过,但值得重复:。你问了9个问题,但没有接受任何答案。。。为什么不呢?你可以要求提问者接受答案(如果提问者是新的),但你不能强迫他这么做:)REF:@SiddharthRout,这似乎很明显:)我们应该对这里发布的所有问题发出强制性的“使用选项显式”警报……我们应该对这里发布的所有问题发出强制性的“使用选项显式”警报。。。
    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
    
    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