不能得到这个函数工作,它是我认为循环是错误的

出于某种原因,这会产生一个值错误。 该函数应该告诉我什么工作表上的值是工作正常,直到我添加了Tvariables循环。 我知道我缺less一些简单的东西。

 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 

通过行和列循环,并对每个单元格执行testing可能是昂贵的,应尽可能避免(通常不是显然)。 在这种情况下,我相信你可以使用range.find方法来编写它。 这会让你离开你的循环,这是依赖于find列A中的最后一行包含数据,并让你慢慢爬过每个细胞寻找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并且有一些事情可能会导致它在任何工作表中都不会findX,而且在每个工作表的A列的每个填充行中都没有值。