我有以下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的情况下使循环工作?
答案 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