Ошибка компиляции: метод или элемент данных не найден при попытке запустить код из верхнего ответа StackOverflow - PullRequest
0 голосов
/ 10 октября 2019

Это мой первый опыт работы с VBA. Я хотел использовать регулярное выражение в Excel и нашел следующий вопрос StackOverflow.

Как использовать регулярные выражения (Regex) в Microsoft Excel как внутри ячейки, так и в циклах

Я добавил «Регулярные выражения Microsoft VBScript 5.5» к своим ссылкам в VBAинтерфейс, и набрал 12abc в ячейке A1, как в примере. Затем я сделал Insert -> Module и скопировал следующий код в поле кода:

Function simpleCellRegex(Myrange As Range) As String
    Dim regEx As New RegExp
    Dim strPattern As String
    Dim strInput As String
    Dim strReplace As String
    Dim strOutput As String


strPattern = "^[0-9]{1,3}"

If strPattern <> "" Then
    strInput = Myrange.Value
    strReplace = ""

    With regEx
        .Global = True
        .MultiLine = True
        .IgnoreCase = False
        .Pattern = strPattern
    End With

    If regEx.test(strInput) Then
        simpleCellRegex = regEx.Replace(strInput, strReplace)
    Else
        simpleCellRegex = "Not matched"
    End If
End If
End Function

Однако, когда я набираю =simpleCellRegex(A1) в ячейке B1, я получаю ошибку

Compile error: method or data member not found

И в режиме отладчика первая строка кода подсвечивается.

Кто-то в комментариях к ответу упомянул, что может возникнуть ошибка, если код находится в ThisWorkbook, а мой в Modules.

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Попробуйте использовать Late Binding, вызвав функцию CreateObject. Это позволяет избежать возможных ошибок, связанных с ошибочными ссылками на ненужные библиотеки или перекрестными ссылками на них. Смотрите ниже:

Public Function simpleCellRegex(ByRef Myrange As Range) As String

    Dim regEx As Object
    Dim strPattern As String
    Dim strInput As String
    Dim strReplace As String
    Dim strOutput As String

    strPattern = "^[0-9]{1,3}"

    'late binding
    Set regEx = CreateObject("VBScript.RegExp")

    If strPattern <> "" Then
        strInput = Myrange.Value
        strReplace = ""

        With regEx

            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = strPattern
        End With

        If regEx.test(strInput) Then
            simpleCellRegex = regEx.Replace(strInput, strReplace)
        Else
            simpleCellRegex = "Not matched"
        End If

    End If
End Function
0 голосов
/ 10 октября 2019

Убедитесь, что ссылка была добавлена ​​в модуль и рабочую книгу, в которой вы пытаетесь выполнить функцию

модуль должен быть выбран для добавления ссылки на этот конкретный модуль: enter image description here

здесь показано, что у моего Module1 есть ссылка "Регулярные выражения Microsoft VBScript 5.5"

, и если указанная ссылка не проверена, вы получите эту ошибку: Compile error: method or data member not found

это результат, который я получил:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...