循环中的IF语句

时间:2018-04-18 12:00:45

标签: excel vba excel-vba

我需要帮助弄清楚我做错了什么。让我成为业余爱好者。

我有两本工作簿,工作簿A和工作簿B.在工作簿A中,我在单元格a1和工作簿B中有一个值,我可以说10页,其中包含A和B列中的值。

我希望通过循环遍历工作簿B中的所有工作表来匹配工作簿A中a1的值,然后返回地址(如果找到它的位置)。然后我写一个if语句,如果发现该值停止循环,因为我稍后会搜索另一个单元格,虽然我卡住了所以我还没有编写那行代码。

这是代码和我注意到的卡片。

sub autocheck()

dim found as varient
dim I as integer
dim val as varient
set val=workbooks("A").worksheets("primary").range("a1").value

For I = 1 to 10
on error resume next
set found=workbooks("b").worksheets(i).range("a:b").match(val)
found= found.address
if isempty(found) then

next i

else 
exit for
end if 

end sub

我在这里得到一个错误,说不能有下一个没有。

我知道如何解决这些问题吗?我为格式化道歉。

谢谢大家!

2 个答案:

答案 0 :(得分:1)

问题是if语句跨越循环。您应该使用if语句退出循环并将其保存在for

"

答案 1 :(得分:1)

您的代码应该“尖叫”几次:

  • dim val as variant?也许是Variant
  • 您应该(或尝试)使用match,您的语法更接近Find。使用Find还应包含无法找到结果的方案Find。无论如何,您需要将Set函数结果Find发送到Range对象。
  • 您的结束Next I应该在End If之后,而不是在中间。
  • 使用on error resume next不会让你的错误消失,你只是“闭上眼睛”希望它会消失。
  • 我的代码评论中的更多注释。

修改后的代码

Option Explicit

Sub autocheck()

Dim found As Range
Dim foundAdress As String
Dim i As Long
Dim val As Variant

Set val = Workbooks("A").Worksheets("primary").Range("a1").Value

For i = 1 To 10

    Set found = Workbooks("b").Worksheets(i).Range("A:B").Find(what:=val)

    If Not found Is Nothing Then ' Find was successfull
        foundAdress = found.Address
        Exit For
    Else ' Find failed
        ' in your code do nothing, continue looping
    End If
Next i

End Sub