2014-09-25 52 views
0

由於某種原因,這會產生一個值的錯誤。該函數應該告訴我它的值是多少,直到我添加了T變量循環。我知道我缺少一些簡單的東西。無法獲取此函數工作它是循環錯誤我認爲

Function FIND_THE_ENTRY(x) As String 
    Dim lngBottom As Long 
    For Each element In ActiveWorkbook.Worksheets 'loops every worksheet 
     lngBottom = Sheets(element.Name).Cells(Rows.Count, 1).End(xlUp).Row 

     For T = 1 To 26 'why does this not work 
      For R = 1 To lngBottom 
       If Sheets(element.Name).Cells(R, T).Value = x Then 
        FIND_THE_ENTRY = FIND_THE_ENTRY & element.Name & ", " 
       End If 
      Next R 
     Next T 
    Next element 

    FIND_THE_ENTRY = Left(FIND_THE_ENTRY, Len(FIND_THE_ENTRY) - 2) 
End Function 
+0

''下一個元素'造成了太多的下一個。刪除該行。 – tbur 2014-09-25 17:58:21

+0

@tbur對於每個元素在ActiveWorkbook.Worksheets中......下一個元素只是循環遍歷activeworkbook中的工作表。它找不到比實際存在更多的工作表。 – JNevill 2014-09-25 18:02:18

+0

錯誤發生在哪裏?哪一行是錯誤的?如果FIND_THE_ENTRY未填充,我可以看到它在最後一行出錯,但除此之外,一切看起來都很好(假設每個表的A列中總是有值被搜索。 – JNevill 2014-09-25 18:03:27

回答

1

循環通過行和列的每一個細胞進行測試可以是昂貴的,應儘量避免使用(很多時候,這不是很明顯)。在這種情況下,我相信你可以使用range.find方法來編寫它。這將讓你出你的循環,這是依賴於尋找的最後一行包含列的數據,並讓你出過每個細胞緩緩蠕動尋找X的

Function FIND_THE_ENTRY(x) As String 
    Dim lngBottom As Long 
    Dim rng As Range 
    Dim Element as Worksheet 
    For Each Element In ActiveWorkbook.Worksheets 'loops every worksheet 
     With Element.Range("A1:Z1000000") 
      Set rng = .Find(What:=x, _ 
           After:=.Cells(.Cells.Count), _ 
           LookIn:=xlValues, _ 
           LookAt:=xlWhole, _ 
           SearchOrder:=xlByRows, _ 
           SearchDirection:=xlNext, _ 
           MatchCase:=False) 
     End With 
     If Not rng Is Nothing Then 
      FIND_THE_ENTRY = FIND_THE_ENTRY & Element.Name & ", " 
     End If 
    Next Element 

    FIND_THE_ENTRY = Left(FIND_THE_ENTRY, Len(FIND_THE_ENTRY) - 2) 
End Function 

說實話,我沒有除了試圖確定Left(FIND_THE_ENTRY, LENGTH(FIND_THE_ENTRY)- 2)將會拋出一個大胖錯誤,如果FIND_THE_ENTRYvbnull並且有一些事情可能導致它爲空,如在任何工作表中找不到X並且沒有值每個工作表的A列的每個填充行。

相關問題