我正在编写一个代码,该代码分为不同的工作表,并对具有“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
答案 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