Установка имени ячеек внутри функции vba

Находясь внутри функции VBA, я пытаюсь изменить имя определенных ячеек, чтобы пометить их и использовать позже. У меня есть функция поиска, которая ищет документы excel по ключевым словам из файла .txt, и мне нужно знать, какие ячейки не содержат ни одного из условий поиска. Для этого я собирался назвать каждую запрашиваемую ячейку и включить все безымянные ячейки в столбец результатов «Другое». Но всякий раз, когда я пытаюсь назвать ячейку, имя не обновляется. Я пробовал следующее:

ThisWorkbook.Names.Add "ЗАПРОС", RefersTo:=foundRange

а также

foundRange.name = "ЗАПРОС"

Функция здесь:

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

person Tyler Cheek    schedule 09.12.2014    source источник


Ответы (1)


Вы не можете определить имя в UDF

вы должны использовать sub

следующее не удастся:

Public Function qwerty(r As Range) As Variant
    qwerty = 1
    Range("B9").Name = "whatever"
End Function
person Gary's Student    schedule 09.12.2014
comment
Спасибо, я этого не знал. Как же тогда, по-вашему, мне следует помечать ячейки, которые я нахожу, чтобы они соответствовали моим запросам? - person Tyler Cheek; 09.12.2014