oplossen probleem met een spatie voor het zoeken van bestanden

Status
Niet open voor verdere reacties.

cow18

Terugkerende gebruiker
Lid geworden
24 mei 2008
Berichten
4.276
Besturingssysteem
Windows
Office versie
Excel365
voor het zoeken van bestanden of subdirectories (onderscheid hangt samen met de laatste parameters, bv. "/s") zit je met een probleem als in die zoekstring spatie staan.
bv.
- zoeken met een path "c:\users\Piet Van den Berge\mijn excel bestanden"
- zoeken met een naam "Mijn bestand*.xls*"
deze simpele replace zou daar komaf mee maken.

Dit is misschien ooit al eens terloops meegedeeld, maar nu dus even expliciet

Code:
Sub Test()
     s0 = "c:\users\piet van den berge\downloads\oude files\mijn excel bestanden* d*.xls*"     '-> zoekopdracht met een spatie in het path en een spatie in de filename
     MyFiles = Split(CreateObject("wscript.shell").Exec("cmd /c dir """ & s & """ /b /s ").StdOut.ReadAll, vbCrLf)      'resultaat
     If UBound(MyFiles) > -1 Then MsgBox UBound(MyFiles)  & " bestanden" & vbLf & Join(MyFiles, vbLf)
End Sub

EDIT : oorspronkelijke code aangepast na onderstaande terechte opmerkingen van SNB en JEC
 
Laatst bewerkt:
Mij lijkt
Code:
sn = Split(CreateObject("wscript.shell").Exec("cmd /c dir """ & s0 & """ /b /s ").StdOut.ReadAll, vbCrLf)
voldoende, zodat er van s0 niets vervangen hoeft te worden
 
Ubound(MyFiles) + 1 geeft wss ook het verkeerde aantal.

Vanuit het shell object kun je gewoon ubound(MyFiles) gebruiken omdat de laatste waarde van de array een lege waarde is.
 
nog een vraagje, op een andere site gebruik ik deze oplossing, alleen het is geen drive, maar een netwerk aangeduid met een letter en het werkt daar niet.
Moet je dat netwerk dan anders aanspreken of werkt dat uberhaupt niet ?
Ik kan het van hieruit natuurlijk niet testen.
 
Welke string gebruik je ?

Code:
s0 = "c:\users\piet van den berge\downloads\oude files\mijn excel bestanden\*d*.xls*"
 
veronderstel dat die server dan "\\Server\BSALV\2021 oude backup" is, hoe ga je dan te werkt ?
 
In Excel kun je met het hulpscherm 'bestand openen' met de knop 'Tools' linksonder via 'map networkdrive' aan "\\Server\etc. een driveletter toekennen. Daarna kun je die in je string gebruiken.
 
Laatst bewerkt:
Is via recursie geen optie?

Code:
Dim ar() As Variant, x As Long

Public Sub file_search()
 getFile "\\Server\BSALV\2021\........"
 MsgBox x & " bestanden" & vbLf & Join(ar, vbLf)
 End
End Sub

Public Sub getFile(objFolderPath As String)
 Dim sFold, it, sf
 With CreateObject("scripting.filesystemobject")
    Set sFold = .GetFolder(objFolderPath)
    For Each it In sFold.Files
       If .GetExtensionName(it) Like "xls*" Then
          ReDim Preserve ar(x)
          ar(x) = it.Path
          x = x + 1
       End If
    Next
    For Each sf In sFold.SubFolders
       getFile sf.Path
    Next
 End With
End Sub
 
Laatst bewerkt:
@JEC,
ik zal deze ook even laten uitproberen, de moeilijkheid is dat ik zelf geen directe toegang heb, dus het eigenlijk ook maar weet van "horen zeggen" en dan meestal alleen "het gaat niet" en dan moet je gokken ...
PS. het grote probleem zijn spaties in het path voor je zoekopdracht, kan die daarmee om ?

@SNB, ook bedankt, ik laat het ook proberen.

:thumb:
 
Laatst bewerkt:
Volgens mij is dat geen probleem met deze:thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan