* funkcja (wyszukiwanie w całości) w VBA Excel

Witam, odzyskałem makro VBA programu Excel, ale nie wiem, jak je poprawnie zmodyfikować.
Wyszukuje numer planu (Plan), a następnie oznaczenie (Oznaczenie), ale ponieważ niektóre nazwy plików PDF nie pasują dokładnie do oznaczenia w bazie danych planu, kopiowanie kończy się niepowodzeniem.
Chciałbym zamienić Oznaczenie na coś, co jest odpowiednikiem wyszukiwania Windows " * ".

Oto aktualne makro:

Tenskoroszyt.Arkusze(" Arkusz3 "). Komórki(b, 1). Interior.Color = RGB(204, 255, 204)
LinkSearch = "  "
CopyLink = "  "
Plan = ThisWorkbook.Sheets(" Arkusz3 "). Komórki(b, 1). Tekst
Oznaczenie = ThisWorkbook.Sheets(" Arkusz3 "). Komórki(b, 2). Tekst
LinkSearch = "C:\FIVE-SERVICES\LIBRARY STANDARDS\Copie_PDF_Standard" & Plan & " - " & Oznaczenie & " .pdf " "
CopyLink = Tenskoroszyt.Arkusze(" Arkusz3 "). Komórki(1, 4). Tekst i Plan & " - " & Oznaczenie & " .pdf "
FileCopy SearchLinkCopyLink

Witam

Nie jestem pewien, czy rozumiem. Celem jest wyszukiwanie w folderze czy w Excelu?

1 polubienie

Celem jest wyszukanie w następującym folderze nazwy znalezionej w programie Excel. Tyle tylko, że te 2 nie pasują. Dlatego chciałbym, aby skopiował, nawet jeśli nie może znaleźć poprawnej nazwy oznaczenia.

Witam
Użyj tagu " Kod ", aby opublikować kody. W ten sposób będzie o wiele bardziej czytelny.
Kod, który nam pokażesz, utworzy link wyszukiwania. Nie prowadzi badań.

Musisz mieć funkcję, która przeprowadza wyszukiwanie. Pokaż nam, jak to jest zrobione. :wink:

Czy jest co najmniej jeden termin, który odpowiada, w przeciwnym razie nie widzę, jak to zrobić?
Funkcja Instr dla tego przypadku.

Public DerLigne As Long
Public DerPlan As Long
Public a As Long
Public b As Long
Public c As Long
Public LienRecherche As String
Public LienCopie As String
Public Plan As String
Public Désignation As String
Public TempsMacro As Double

Public Sub IdentifierPlans()

Application.ScreenUpdating = False
TempsMacro = Timer
DerPlan = ThisWorkbook.Sheets("Feuil3").Range("a65000").End(xlUp).Row

'With ThisWorkbook.Sheets("feuil3").Range("A1:B" & DerPlan)
With ThisWorkbook.Sheets("feuil3").Range(Cells(1, 1), Cells(DerPlan, 2))
    .ClearContents
    .Interior.TintAndShade = 0
    .Interior.Pattern = xlNone
    .Font.Color = RGB(0, 0, 0)
End With
 
DerLigne = ThisWorkbook.Sheets("feuil1").Range("c65000").End(xlUp).Row
b = 1
For a = 17 To DerLigne
    If ThisWorkbook.Sheets("feuil1").Cells(a, 1) = "x" Or ThisWorkbook.Sheets("feuil1").Cells(a, 1) = "X" Then
        If Left(ThisWorkbook.Sheets("feuil1").Cells(a, 3), 1) = "A" Then
        Else
            ThisWorkbook.Sheets("feuil3").Cells(b, 1) = LTrim(ThisWorkbook.Sheets("feuil1").Cells(a, 3))
            ThisWorkbook.Sheets("feuil3").Cells(b, 2) = LTrim(ThisWorkbook.Sheets("feuil1").Cells(a, 5))
            b = b + 1
        End If
    End If
Next a

ThisWorkbook.Sheets("feuil3").Range(Columns(1), Columns(2)).RemoveDuplicates Columns:=Array(1, 2), Header:=xlNo

Application.ScreenUpdating = True

ThisWorkbook.Sheets("Feuil3").Cells(2, 4).Value = "Temps d'exe de la macro : " & Round(Timer - TempsMacro, 2) & " s"

End Sub

Public Sub CopierPlans()
TempsMacro = Timer
DerPlan = ThisWorkbook.Sheets("Feuil3").Range("a65000").End(xlUp).Row
c = 0
On Error GoTo Erreur
'On Error Resume Next


For b = 1 To DerPlan
Suite:
        ThisWorkbook.Sheets("Feuil3").Cells(b, 1).Interior.Color = RGB(204, 255, 204)
        LienRecherche = ""
        LienCopie = ""
        Plan = ThisWorkbook.Sheets("feuil3").Cells(b, 1).Text
        Désignation = ThisWorkbook.Sheets("feuil3").Cells(b, 2).Text
        LienRecherche = "C:\FIVE-SERVICES\BIBLIOTHEQUE STANDARDS\Copie_PDF_Standard\" & Plan & " - " & Désignation & ".pdf"
        LienCopie = ThisWorkbook.Sheets("feuil3").Cells(1, 4).Text & "\" & Plan & " - " & Désignation & ".pdf"
        FileCopy LienRecherche, LienCopie
Next b

ThisWorkbook.Sheets("Feuil3").Cells(2, 4).Value = "Temps d'exe de la macro : " & Round(Timer - TempsMacro, 2) & " s"

If c = 0 Then
    MsgBox "Nickel, tous les PDF ont été copiés", vbOKOnly, "Fichiers copiés"
Else
    If c = 1 Then
        MsgBox "Certains PDF ont été copiés mais il y a " & c & " erreur", vbExclamation + vbOKOnly, "Fichiers copiés partiellement"
    Else
        MsgBox "Certains PDF ont été copiés mais il y a " & c & " erreurs", vbExclamation + vbOKOnly, "Fichiers copiés partiellement"
    End If
End If
Exit Sub
Erreur:
ThisWorkbook.Sheets("Feuil3").Cells(b, 1).Interior.Color = RGB(255, 80, 80)
c = c + 1
Resume Next

End Sub

Oto całe makro.

Kod odwołuje się do funkcji FileCopy: FileCopy LienRecherche, LienCopie

Może znajdować się w innym module.

Tak, początek pliku jest poprawny. Przykład: SDA-CAD-002-A - stali nierdzewnej souder.pdf, gdy wyszukiwanie jest wykonywane za pomocą " SDA-CAD-002-A - Szef spawalniczy ze stali nierdzewnej", więc nie może go znaleźć. Początek " SDA-CAD-002-A " jest dobry. Ale chciałbym, aby uniknął " Stainless Steel Weld Boss", ale nadal skopiuj znaleziony plik za pomocą " SDA-CAD-002-A ".
Na przykład wtedy, gdy " szukaj " w systemie Windows za pomocą " SDA-CAD-002-A*.pdf ".

Uh, FileCopy to funkcja sama w sobie, prawda? Kopiuje pliki zgodnie z " LinkSearch " do "LinkCopy zgodnie z 2 powyższymi wierszami?

Rzeczywiście, nie znam dobrze funkcji VBA.
Nie ma więc funkcji wyszukiwania. Kod tworzy ścieżkę z elementami tablicy.
Musisz więc utworzyć to wyszukiwanie i zastąpić ścieżkę resurltatami swojego wyszukiwania.
Aby Ci pomóc, zapoznaj się z funkcją GetFiles.