Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 无法让这个函数工作,我认为是循环出了问题_Excel_Vba - Fatal编程技术网

Excel 无法让这个函数工作,我认为是循环出了问题

Excel 无法让这个函数工作,我认为是循环出了问题,excel,vba,Excel,Vba,由于某种原因,这会产生一个值错误。在我添加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(Row

由于某种原因,这会产生一个值错误。在我添加
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

在行和列之间循环并在每个单元格上执行测试可能会很昂贵,应该尽可能避免(通常情况下,显然不是这样)。在这种情况下,我相信您可以使用
范围
.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

老实说,除了试图确定
左(FIND_the_ENTRY,LENGTH)(FIND_the_ENTRY)-2之外,我没有发现您的代码有任何错误如果
FIND\u条目
vbnull
,并且有两种情况可能会导致它为null,比如在任何工作表中都找不到X,并且在每个工作表的a列的每个填充行中都没有值。

下一个元素
导致Next太多。删除该行。@tbur
用于Active工作簿中的每个元素。工作表
下一个元素
正在Active工作簿中的工作表中循环。找不到比实际存在的工作表更多的工作表。错误发生在哪里?在哪条线上出错?如果FIND_条目没有填写,我可以在最后一行看到它出错,但除此之外,一切看起来都很好(假设每个正在搜索的工作表的A列中都有值)。@jnevil:Oops,我没有复制所有代码:(OP,我成功地在几张纸上运行了代码。一张纸总是有可能在a列中没有任何内容。这将构成最后一行,第1行。