2011-03-15 52 views
0

我想擁有自己的函數,即可以在多個工作表上搜索同一區域。我的想法是查看一組工作表(這裏是工作簿中的所有工作表)並使用Find來搜索該區域。現在,如果在第一張紙上搜索成功,我不希望結果被以下的不成功搜索覆蓋,if的條件也會覆蓋。當FIND沒有返回結果時退出函數

Function SheetsFind(LookUpValue As Integer) As Variant 
    Dim SearchRange As Range 

    For Each WS In Sheets 
     Set SearchRange = WS.Range("A1:B6") 

     If (SearchRange.Find(LookUpValue, LookIn:=xlValues, LookAt:=xlWhole) <> "Nothing") Then 
      SheetsFind = SearchRange.Find(LookUpValue, LookIn:=xlValues, LookAt:=xlWhole).Offset(0, 1).Value 
     End If 
    Next WS 

End Function 

現在的問題是,如果在條件查找不成功,該函數離開了,我得到一個#value錯誤。

爲什麼我的函數不會繼續下一次迭代?

回答

1

Range.Find返回另一個範圍對象,因此你會遇到問題。

試試這個:

Function SheetsFind(LookUpValue As Integer) As Variant 

    Dim SearchRange As Range 
    Dim oResult As Excel.Range 
    Dim ws As Worksheet 

    For Each ws In Sheets 
     Set SearchRange = ws.Range("A1:B6") 

     Set oResult = SearchRange.Find(LookUpValue, LookIn:=xlValues, LookAt:=xlWhole) 

     If Not oResult Is Nothing Then 

      SheetsFind = oResult.Offset(0, 1).Value 

     End If 

    Next ws 

End Function 
+0

完美,非常感謝你。 – stema 2011-03-15 13:19:41

+0

如果您將此函數用作工作表函數,那麼您需要使其變得易失性,否則當您查找的數據發生更改時,它不會重新計算。我可能會在SheetsFind = oResult.Offset(0,1).Value後添加Exit函數。 – 2011-03-15 13:36:54