运行时错误1004.对象'_Worksheet'的方法'Range'失败

时间:2013-08-02 07:22:51

标签: excel vba excel-vba

我有以下2000行代码,因为程序重载而导致编译错误:

Sheet7.Range("H2").Value = Sheet7.Range("H2").Value + Sheet7.Range("K2").Value
...
Sheet7.Range("H2001").Value = Sheet7.Range("H2001").Value + Sheet7.Range("K2001").Value

如果我有多达十行,那就行了。但是我需要代码才能使用2000行,这就是我遇到编译错误的时候。为了解决编译错误,我使用了以下循环,但它给出了运行时错误1004.对象'_Worksheet'的方法'Range'失败。

Dim RowNo as Integer
For RowNo = 2 to 2001 Step 1
    Range(Cells(RowNo, 8)).Value = Range(Cells(RowNo, 8)).Value + Range(Cells(RowNo, 11)).Value
Next RowNo

如何在不收到运行时错误1004的情况下使循环工作?

4 个答案:

答案 0 :(得分:4)

将您内部的行更改为:

a)完整的工作表参考

Sheet7.Cells(RowNo, 8).Value = Sheet7.Cells(RowNo, 8).Value + Sheet7.Cells(RowNo, 11).Value

b)或更短,没有表格参考:

Cells(RowNo, 8).Value = Cells(RowNo, 8).Value + Cells(RowNo, 11).Value

答案 1 :(得分:0)

  

另一种可能性是使用 array-formula

因此,您不必遍历所有单元格,而是让Excel计算它并返回带有结果的数组。代码执行速度比for-loop循环快。 HTH

Public Sub test()
    Dim range1 As Range
    Set range1 = Range("H2:H2001")

    Dim range2 As Range
    Set range2 = Range("K2:K2001")

    Dim result
    Dim myFormula As String
    myFormula = "={0}+{1}"

    Application.ReferenceStyle = xlR1C1

    myFormula = VBA.Strings.Replace(myFormula, "{0}", range1.Address(ReferenceStyle:=xlR1C1))
    myFormula = VBA.Strings.Replace(myFormula, "{1}", range2.Address(ReferenceStyle:=xlR1C1))
    result = Application.Evaluate(myFormula)
    range1.Value = result

    Application.ReferenceStyle = xlA1
End Sub

答案 2 :(得分:0)

您也可以使用辅助列执行此操作:

Sub test()
Application.ScreenUpdating = False

With Sheet7
    .Range("I2:I2001").Formula = "=H2+K2"
    .Range("H2:H2001").Value = .Range("I2:I2001").Value
    .Range("I2:I2001").ClearContents
End With

Application.ScreenUpdating = True

End Sub

理想情况下,如果可以避免,您不希望在行引用中使用硬代码。我还随意选择了第一列作为辅助列,你应该调整它以适应你的表格布局。

答案 3 :(得分:0)

对象'_worksheet'的方法'Range'失败 。 。 。

Sub kar()

Dim i, j

For i = 8 To 15

   For j = 9 To 15

    If (Range("ji") = Range("jj") And Range("gi") = "خريد" And Range("gj") = "فروش" And (Abs(Range("ki") - Range("kj") <= 50))) Then
     Range("ui") = -(Range("ki") - Range("kj")) * hi
     Range("uj") = -(Range("ki") - Range("kj")) * hj
     End If

     If (Range("ji") = Range("jj") And Range("gi") = "فروش" And Range("gj") = "خريد" And (Abs(Range("ki") - Range("kj")) <= 50)) Then
     Range("uj").Value = -(Range("ki") - Range("kj")) * hi
     Range("ui").Value = -(Range("ki") - Range("kj")) * hj
     End If

   Next j

Next i

End Sub