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

我有以下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'的方法'范围'失败。

 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?

把你里面的那一行改成:

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 

另一种可能性是使用数组公式

所以你不必遍历所有的单元格,而是让Excel来计算它,并返回数组结果。 代码执行比每个循环更快。 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 

你也可以用一个帮助栏来做这件事:

 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 

理想情况下,如果可以避免的话,您不想在行引用中进行硬编码。 我也随意挑选了第一栏作为帮手栏,您应该调整它以适应您的图纸布局。

对象'_worksheet'的eror方法'范围'失败。 。 。 。

 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