• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Documenten zoeken op basis van waarde in Excel

Status
Niet open voor verdere reacties.

grietsenwijma

Gebruiker
Lid geworden
25 jun 2013
Berichten
241
Goedemorgen,

Voor het oproepen van en opzoeken van achtergrondinformatie zit ik te "dromen" van het volgende

Aan de hand van een waarde (bijvoorbeeld 12345) vanuit mijn excel document in een bepaalde map opzoeken van een reeks documenten die als deel van hun naam 12345 hebben.

Dus het lijstje zou er dan bijvoorbeeld zo uit kunnen zien:

xxbb12345cc
pp12345bb
12345llpv5

Op een manier zodat ik dan een document naar keuze kan gaan openklikken.

Wie heeft hier een goede suggestie voor?

Alvast dank!
 
klinkt als een uiterst korte omschrijving van wat ik zoek ja :)
En we draaien hier inderdaad op windows 1 en office 365
 
Laatst bewerkt:
zo bijvoorbeeld

Code:
Sub LoopThroughFiles()
 
Dim oFSO As Object
Dim oFolder As Object
Dim oFile As Object
Dim i As Integer
Dim vartxt As String


'Zoek tekst"
vartxt = "12345"

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder("C:\Test\")
 
Application.ScreenUpdating = False
 
For Each oFile In oFolder.Files
    If InStr(1, oFile.Name, vartxt) Then
        Cells(i + 1, 1) = oFile.Name
        i = i + 1
    End If
Next oFile
 
Application.ScreenUpdating = True
MsgBox "ready"
End Sub
 
aanpassing:

link naar document in kolom B
En zoektekst niet hoofdletter gevoelig

Code:
Sub LoopThroughFiles()
 
Dim oFSO As Object
Dim oFolder As Object
Dim oFile As Object
Dim i As Integer
Dim vartxt As String


'Zoek tekst"
vartxt = "12345"

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder("C:\Temp\")
 
Application.ScreenUpdating = False
 
For Each oFile In oFolder.Files
    If InStr(1, LCase(oFile.Name), LCase(vartxt)) Then
        'Document naam in kolom A
        Cells(i + 1, 1) = oFile.Name
        
        'Link in kolom B
        With Cells(i + 1, 2)
            .Hyperlinks.Add Anchor:=Cells(i + 1, 2), _
                Address:=oFile.Path, _
                TextToDisplay:="Link"
        End With
        
        i = i + 1
    End If
Next oFile
 
Application.ScreenUpdating = True
MsgBox "ready"
End Sub
 
Dan kan je hem ook uitbreiden met een FileDialog om een willekeurige map te zoeken:
Code:
Sub LoopThroughFiles()
 
Dim oFSO As Object, oFolder As Object, oFile As Object
''fdO As FileDialog
Dim fdO As Object
Dim vrtSelectedItem As Variant
Dim varText As String
Dim i As Integer
 
    'Zoek tekst"
    varText = InputBox("Typ de zoektekst", "Vind bestanden", "helpmij")
''    varText = Range("A1").Value
''    Set fdO = Application.FileDialog(msoFileDialogFolderPicker)
    Set fdO = Application.FileDialog(4)
    With fdO
        If .Show = True Then
            .AllowMultiSelect = False
            vrtSelectedItem = .SelectedItems(1)
        Else
            MsgBox "Geen bestand geselecteerd.", vbCritical
            Exit Sub
        End If
    End With
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set oFolder = oFSO.GetFolder(vrtSelectedItem)
    Application.ScreenUpdating = False
    For Each oFile In oFolder.Files
        If InStr(1, LCase(oFile.Name), LCase(varText)) Then
            Cells(i + 1, 1) = oFile.Name
            With Cells(i + 1, 2)
                .Hyperlinks.Add Anchor:=Cells(i + 1, 2), Address:=oFile.Path, TextToDisplay:="Link"
            End With
            i = i + 1
        End If
    Next oFile
    Application.ScreenUpdating = True
    MsgBox "Klaar!", vbOKOnly


End Sub
 
Ziet er indrukwekkend uit,

Lijkt mij een goeie basis om een oplossing op te baseren.

Ik heb helaas op dit moment niet de tijd om er echt mee te stoeien. (is meer iets voor de weekeinden)

Valt me wel op dat de code op zoek gaat naar de harde waarde 12345

Wat ik wil is dat hij op zoek gaat naar de uitkomst van een formule in een bepaalde cel.

Ik geef me zelf overigens wel enige kans om daar op basis van een uurtje try&error een oplossing voor te vinden :)
 
vervang
vartxt = "12345"

door

vartxt = sheets("Blad1").range("A1")​
 
Kan ook in VBA:

Code:
Sub M_snb()
   With application.filedialog(1)
      .initialfilename="G:\OF\*12345*.xls"
      if .show then workbooks.add .selecteditems(1)
   end with
End Sub
 
aanpassing:

link naar document in kolom B
En zoektekst niet hoofdletter gevoelig

Code:
Sub LoopThroughFiles()
 
Dim oFSO As Object
Dim oFolder As Object
Dim oFile As Object
Dim i As Integer
Dim vartxt As String


'Zoek tekst"
vartxt = "12345"

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder("C:\Temp\")
 
Application.ScreenUpdating = False
 
For Each oFile In oFolder.Files
    If InStr(1, LCase(oFile.Name), LCase(vartxt)) Then
        'Document naam in kolom A
        Cells(i + 1, 1) = oFile.Name
        
        'Link in kolom B
        With Cells(i + 1, 2)
            .Hyperlinks.Add Anchor:=Cells(i + 1, 2), _
                Address:=oFile.Path, _
                TextToDisplay:="Link"
        End With
        
        i = i + 1
    End If
Next oFile
 
Application.ScreenUpdating = True
MsgBox "ready"
End Sub

vervang
vartxt = "12345"

door

vartxt = sheets("Blad1").range("A1")​


Ik ben even bezig, maar dit brengt me wel een heel eind richting oplossing.

Punt wat er nog overblijft is dat ie óók in de onderliggende mappen moet gaan zoeken.
Wellicht een kleine toevoeging, maar ik kan niet bedenken welke

Wie hint me?
Vast dank!
 
Lees jij wel alle suggesties of zit je weer te dromen ?
 
Lees jij wel alle suggesties of zit je weer te dromen ?

Beslist wel, maar ik kreeg de suggestie van jou (hoewel lekker simpel) niet direct aan de praat, en deze wel.
Deze bleek toen ik er mee bezig ging een lijst met hyperlinks te produceren naar alle documenten die voldoen, past mij bijzonder.
 
Als het aanpassen van een pad al zo'n probleem is, kun je beter een deskundige inschakelen.
 
Dat is precies waarom ik bij Helpmij kom :)

Ik heb die van jou inmiddels ook aan de praat gekregen en die roept het inderdaad toch op een nog veel simpeler manier op.

Enige hobbel die ik nog moet slechten is dat ik niet zoek om naamstukje "12345" maar om de uitkomst van een formule in een cel (in mijn voorbeeld is de uitkomst dus 12345)

Laten we deze cel de celnaam "Nummer" geven (in plaats van bijvoorbeeld A1)

Hoe zou dat stukje code>"G:\OF\*12345*.xls"<code er dan moeten uitzien?

Vast dank!
 
Bijv. "G:\OF\*" & Sheet1.cells(1,3).text & "*.xls"
 
Bedankt, ben al druk bezig de boel op deze basis uit te werken.

Enige hobbel die ik nog heb is dat hij 't alleen doet als je precies de juiste map aangeeft.
Wat ik zoek is dat hij in een bepaalde map zoekt en de onderliggende mappen.

Voor mijn doel zou ik om alle opties te pakken 2 niveau's naar beneden moeten kijken

Heeft iemand een suggestie?

Alvast dank!
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan