由于某种原因,这会产生值错误。该函数应该告诉我,在我添加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 :(得分:1)
循环遍历行和列并对每个单元格执行测试可能很昂贵,应该尽可能避免(通常情况下显然不是这样)。在这种情况下,我相信您可以使用.find
的{{1}}方法来编写此内容。这将使你离开你的循环,这取决于找到包含A列数据的最后一行,让你慢慢爬过每个寻找X的单元格。
range
老实说,除了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_ENTRY
vbnull
并且有一对夫妇试图确定{{1}}会产生重大错误这一事实之外,我没有发现您的代码有任何问题可能导致它为空的事情就像没有在任何工作表中找到X而在每个工作表的A列的每个填充行中都没有值。