簡體   English   中英

通過子調用Excel UDF時有效,但在工作表中始終返回0

[英]Excel UDF works when called through sub but always returns 0 in worksheet

我的函數在工作表中調用時總是返回0,但通過子調用時返回正確的值。

此函數搜索工作表(工作表名稱),以查看是否可以在任何列中找到輸入值,如果可以,則返回列第1行中的值。

'test sub
Sub test()
    MsgBox custCat("SUNTRUST BANK")
End Sub


Public Function custCat(toSearch)
    Dim sheetName As String
    sheetName = "LookupValues"
    Dim i As Integer
    i = 1
    Dim lastRow As Integer
    Dim colLtr As String
    Dim j As Integer

    'find last column
    Dim lastColumn As Integer
    lastColumn = Worksheets(sheetName).Range("A1").SpecialCells(xlCellTypeLastCell).Column

    'loop through columns
    Do While i <= lastColumn
        'find last row
        lastRow = Worksheets(sheetName).Cells(Worksheets(sheetName).Rows.Count, i).End(xlUp).Row

        'search through column
        j = 2
        Do While j <= lastRow
            If InStr(UCase(toSearch), UCase(Worksheets(sheetName).Cells(j, i).Value)) > 0 Then
                If custCat = "" Then
                    custCat = Worksheets(sheetName).Cells(1, i).Value
                Else
                    custCat = custCat & ", " & Worksheets(sheetName).Cells(1, i).Value
                End If
                j = lastRow 'exit loop if found
            End If
            j = j + 1
        Loop
        i = i + 1
    Loop
End Function

我整理了一下代碼並進行了一些調整,請嘗試以下操作:

Public Function custCat(toSearch)

    Dim i&, j&, lastRow&, lastColumn&
    Dim ws As Worksheet

    Set ws = Worksheets("LookupValues")

    With ws

        lastColumn = .Cells(1, .Columns.Count).End(xlToLeft).Column
        i = 1
    'loop through columns
        Do While i <= lastColumn
            'find last row
            lastRow = .Cells(.Rows.Count, i).End(xlUp).Row

            'search through column
            j = 2
            Do While j <= lastRow
                If InStr(UCase(toSearch), UCase(.Cells(j, i).Value)) > 0 Then
                    If custCat = "" Then
                        custCat = .Cells(1, i).Value
                    Else
                        custCat = custCat & ", " & .Cells(1, i).Value
                    End If
                    Exit Do 'exit loop if found
                End If
                j = j + 1
            Loop
            i = i + 1
        Loop

    End With
End Function

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM