GoalSeek内循环 - 运行时错误1004:引用无效

时间:2017-02-17 07:21:33

标签: vba excel-vba runtime-error excel

我正在编写一个代码,该代码分为不同的工作表,并对具有“Obj”和“Var”一词的行执行GoalSeek。完成第一张工作表后,代码将移至第二张工作表并提示error 1004。它说我对Do ... Loop函数的引用不再有效。为什么会这样?

Sub GoalSeek()  

Dim FirstAddress As String
Dim SecondAddress As String
Dim Arr As Variant
Dim Rng As Range
Dim Rng2 As Range
Dim y As Long
Dim i As Long

Arr = Array("SheetA", "SheetB")

For i = LBound(Arr) To UBound(Arr)

    With Worksheets(Arr(i)).Range("A1:BZ500")

    Set Rng = .Find("Obj", LookIn:=xlValues)

    If Not Rng Is Nothing Then

        FirstAddress = Rng.Address

        Set Rng2 = .Find("Var", LookIn:=xlValues)

        If Not Rng2 Is Nothing Then

            SecondAddress = Rng2.Address

            'Error Occurred Here
            Do

                Rng.Offset(0, y + 1).GoalSeek Goal:=0, ChangingCell:=Rng2.Offset(0, y + 1)

                y = y + 1

            Loop Until y = 12

        End If

    End If

    End With

Next i

End Sub

1 个答案:

答案 0 :(得分:0)

我认为这可能是你的问题:

您在开始时初始化y

dim y as long

,默认情况下,其值为0。你在循环中做出这个假设

Do
    Rng.Offset(0, y + 1).GoalSeek Goal:=0, ChangingCell:=Rng2.Offset(0, y + 1)
    y = y + 1
Loop Until y = 12

对于第一张表y=0,1,2,3,...,12,循环停止。 然后您离开y=12 并转到下一张。

因此,对于第二张表单,您将使用Do进入y=12循环并收到错误消息。您应该将代码修改为以下内容:

y = 0
Do
    Rng.Offset(0, y + 1).GoalSeek Goal:=0, ChangingCell:=Rng2.Offset(0, y + 1)
    y = y + 1
Loop Until y = 12

如果您使用的是Do While ... Loop,您可能会更早注意到这一点,因为在条件未满足的情况下,甚至都不会输入循环。

y = 0
Do While y < 12
    Rng.Offset(0, y + 1).GoalSeek Goal:=0, ChangingCell:=Rng2.Offset(0, y + 1)
    y = y + 1
Loop 

实际上,对于一个简单的循环,For循环总是比Do循环更容易诊断......

For y = 0 to 11
    Rng.Offset(0, y + 1).GoalSeek Goal:=0, ChangingCell:=Rng2.Offset(0, y + 1)
Next y