0

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

4

4 回答 4

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
于 2013-08-02T07:31:50.863 回答
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

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

于 2013-08-02T12:41:10.877 回答
0

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

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

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
于 2013-08-02T12:20:43.347 回答
0

错误对象“_worksheet”的方法“范围”失败。. . .

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
于 2015-10-23T21:26:21.973 回答