VBA Excel находит точное значение ячейки, а не только ее часть - PullRequest
0 голосов
/ 13 июля 2020

У меня есть следующий код:

Set User = AD_USERS.Range("D:D").Find(What:=wVal)

Где wVal - это значение, которое я ищу. Это имя пользователя, которое может иметь вид «Ecr484348» или «gh8644». Мой вопрос: как я могу использовать find для поиска полного совпадения, когда я ищу имя пользователя?

Я знаю, что если я использую xlWhole, он будет искать полное совпадение, но если wVal = "Ecr" даст мне, что он нашел «Ecr484348», а я этого не хочу. Я хочу, чтобы это было только в том случае, если wVal = "Ecr484348" дает вам, что он нашел значение, я имею в виду, что я не хочу, чтобы он работал только с использованием некоторой части имени пользователя.

Извините, если что-то не очень хорошо объяснено , Отвечу, если будут вопросы. Большое спасибо за ваши ответы!

PS: Если я использую xlWhole, как в следующем коде:

Set User = AD_USERS.Range("D:D").Find(What:=wVal, LookAt:=xlWhole)

, мне выдается ошибка 9, и я не знаю почему.

PS2: Я добавляю сюда весь код:

Dim wrdTbl As Table
    'Set the Word table
    With ActiveDocument
        If ActiveDocument.Tables.Count >= 1 Then
            Set wrdTbl = .Tables(InputBox("Table # to copy? There are " & .Tables.Count & " tables to choose from."))
        End If
    End With

    Dim AD_UsersPath As String
    AD_UsersPath = "C:\Users\" & Environ("Username") & "\Desktop\Comparar Columnas VBA\Animales.xlsx"
    Dim AD_USERS As Object
    Set AD_USERS = CreateObject("Excel.Application")
    AD_USERS.Visible = False
    AD_USERS.Application.Workbooks.Open AD_UsersPath
    
    Dim LastRow As Integer
    LastRow = wrdTbl.Columns(1).Cells.Count 

    Dim I As Integer
    For I = 1 To LastRow
        wVal = wrdTbl.Cell(I + 1, 1)
        wVal = Left(wVal, Len(wVal) - 2) 
        Set User = AD_USERS.Range("D:D").Find(What:=wVal)
        If User Is Nothing Then
            wrdTbl.Cell(I + 1, 1).Shading.BackgroundPatternColor = wdColorRed 
        Else
            wrdTbl.Cell(I + 1, 1).Shading.BackgroundPatternColor = wdColorWhite 
        End If
    Next I
    
    AD_USERS.Quit
    Set AD_USERS = Nothing

Ответы [ 2 ]

3 голосов
/ 13 июля 2020

Измените строку Set User = AD_USERS.Range("D:D").Find(What:=wVal) на

Set User = AD_USERS.Range("D:D").Find(What:=wVal, LookAt:=1)

Когда вы используете позднюю привязку для создания и Excel приложения из word vba, тогда константы Excel (например, xlWhole) не определены по умолчанию. Они определяются только в том случае, если вы добавляете ссылку на Excel в свой проект. Вы можете определить его самостоятельно с помощью Dim xlWhole As Integer: xlWhole = 1 или просто использовать значение 1 всякий раз, когда вам нужно использовать эту константу.

1 голос
/ 13 июля 2020

Поскольку @Foxfire And Burns And Burns предложили, я использовал CountIf в конце, чтобы он работал лучше, и я решил свою ошибку, используя Find. Теперь строка выглядит так:

User = AD_USERS.Application.WorksheetFunction.CountIf(AD_USERS.ActiveWorkbook.ActiveSheet.Range("D:D"), wVal)

Всем спасибо за ответы!

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