Ezra Henley
Ezra Henley

Reputation: 349

Setting the name of cells inside a vba function

While inside a VBA function I'm attempting to change the name of certain cells to flag them and use them later. I have a searching function that searches excel docs for keywords from a .txt file and need to know which cells don't include any of the search terms. To do this I was going to name each cell I query and include all unnamed cells in the results column for "Other". But whenever I try to name a cell the name doesn't get updated. I've tried the following:

ThisWorkbook.Names.Add "QUERIED", RefersTo:=foundRange

and

foundRange.name = "QUERIED"

The function is here:

Function Single_word_occurrences(datatoFind As String, resultsCol As String) As Integer
    'Initializations
    Dim strFirstAddress As String
    Dim foundRange As Range
    Dim currentSheet As Integer, sheetCount As Integer, LastRow As Integer, loopedOnce As Integer, FoundCount As Integer

    FoundCount = 0
    currentSheet = ActiveSheet.Index
    sheetCount = ActiveWorkbook.Sheets.Count

    Sheets("Sheet1").Activate
    Set foundRange = Range("F2:F30000").Find(What:=datatoFind, After:=Cells(2, 6), LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
    Sheets("List Results").Cells(1, resultsCol).Value = datatoFind
    'if datatoFind is found in search range
    If Not foundRange Is Nothing Then
        'save the address of the first occurrence of datatoFind, in the strFirstAddress variable
        strFirstAddress = foundRange.Address
        Do
            'Find next occurrence of datatoFind
            Set foundRange = Range("F2:F30000").Find(What:=datatoFind, After:=foundRange.Cells, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
            'Place the value of this occurrence in the next cell down in the column that holds found values (resultsCol column of List Results worksheet)
            LastRow = Sheets("List Results").Range(resultsCol & Rows.Count).End(xlUp).Row + 1
            Sheets("List Results").Range(resultsCol & LastRow).Value = foundRange.Address
            ThisWorkbook.Names.Add "QUERIED", RefersTo:=foundRange
            If loopedOnce = 1 Then
                FoundCount = FoundCount + 1
            End If
            If loopedOnce = 0 Then
                loopedOnce = 1
            End If
            'The Loop ends on reaching the first occurrence of datatoFind
        Loop While foundRange.Address <> strFirstAddress And Not foundRange Is Nothing
        Msgbox(foundRange.Name)
    End If
    Single_word_occurrences = FoundCount
    Application.ScreenUpdating = True
    Sheets(currentSheet).Activate
End Function

Upvotes: 0

Views: 150

Answers (1)

Gary&#39;s Student
Gary&#39;s Student

Reputation: 96781

You can't Define a Name in a UDF

you must use a sub

the following will fail:

Public Function qwerty(r As Range) As Variant
    qwerty = 1
    Range("B9").Name = "whatever"
End Function

Upvotes: 1

Related Questions