Как вы используете MATCH в цикле? - PullRequest
0 голосов
/ 06 июня 2019

Я получаю сообщение об ошибке в приведенном ниже коде и, вероятно, неверный синтаксис.

Я пытался заменить эту строку

IsInArray(pdfname, arNames(i)) = True 

на

Application.worksheetfunction.match(pdfname, arNames(i)) = True 

, но она не работает.

 Sub OpenPdf()

    On Error GoTo OpenPdf_Error

    Dim pdfname As String
    Dim pdf
    Const sPath = "S:\RA QUOTES 2019"
    Dim FName As String
    Dim arNames() As String
    Dim myCount As Integer
    Dim i As Integer

    FName = Dir("S:\RA QUOTES 2019\*.pdf*")
    Do Until FName = ""
        myCount = myCount + 1
        ReDim Preserve arNames(1 To myCount)
        arNames(myCount) = FName
        FName = Dir
        Loop


    pdfname = Application.InputBox("Enter the pdf you are looking for")
    pdfname = "PLQ" & pdfname




For i = 1 To UBound(arNames)

If IsInArray(pdfname, arNames(i)) = True Then

    ThisWorkbook.FollowHyperlink sPath & arNames(i)

     End If

    Next i

    On Error GoTo 0
    Exit Sub

OpenPdf_Error:

    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure OpenPdf"

End Sub

Ответы [ 2 ]

0 голосов
/ 07 июня 2019
Sub OpenPdf()

On Error GoTo OpenPdf_Error

Dim pdfname As String
Dim pdf
Const sPath = "S:\RA QUOTES 2019\"
Dim FName As String
Dim arNames() As String
Dim myCount As Integer
Dim i As Integer

FName = Dir("S:\RA QUOTES 2019\*.pdf*")
Do Until FName = ""
    myCount = myCount + 1
    ReDim Preserve arNames(1 To myCount)
    arNames(myCount) = FName
    FName = Dir
    Loop


pdfname = Application.InputBox("Enter the pdf you are looking for")
pdfname = "PLQ" & pdfname





For i = 1 To UBound(arNames)

If InStr(1, arNames(i), pdfname, vbTextCompare) Then

MsgBox (arNames(i))

ThisWorkbook.FollowHyperlink sPath & arNames(i)

 End If

Next i

On Error GoTo 0
Exit Sub

OpenPdf_Error:

MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure 
OpenPdf"

End Sub
0 голосов
/ 06 июня 2019

Это будет работать для точного соответствия с использованием словаря (тип данных коллекции, который имеет свойство .Exists, которое позволяет вам проверять, существует ли ключ в словаре, не просматривая каждый раз).

Option Explicit
Sub OpenPdf()

    Dim pdfname As String
    Dim DictPDF As New Scripting.Dictionary 'Needs Microsoft Scripting Runtime
    Const sPath = "S:\RA QUOTES 2019\"

    Dim FName As String
    Dim i As Integer

    FName = Dir(sPath & "*.pdf*")
    Do While FName <> vbNullString
        'add the name into the dictionary
        DictPDF.Add Left(LCase(pdfname), 7), 1 'Left will get the first 7 characters from the left to the name
        FName = Dir
    Loop

    pdfname = Application.InputBox("Enter the pdf you are looking for")
    pdfname = LCase("PLQ" & pdfname)

    'Check if the name is in the dictionary I used LCase because dictionaries are case sensitive,
    'so everything in low case to avoid problems.
    If DictPDF.Exists(pdfname) Then
        ThisWorkbook.FollowHyperlink sPath & DictPDF(pdfname)
    Else
        MsgBox pdfname & " was not found."
    End If

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