• 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.

kopieren van bestanden

Status
Niet open voor verdere reacties.

Gerard2348

Gebruiker
Lid geworden
24 okt 2013
Berichten
370
Beste allemaal,

Onderstaande macro gebruik ik om bestanden te openen die aan een bepaalde datum voldoen. Deze macro kijkt in directory D:\data\ en de subdirectory's en opent dan de bestanden die voldoen aan de data in cel C2 uit D:\data en alle subdirectory's . Kan ik dezelfde macro gebruiken om bestanden te kopiëren uit D:\data en alle subdirectory's die voldoen aan de datum in cel C2 naar een nieuwe locatie, bv D:\test\.


Code:
Sub openfilesdatum ()
  Dim sDatum As String, sDir As String, sn, i As Integer
  sDir = "d:\data\"  'je directory
   sDatum = "*" & Format(Sheets("Blad1").Range("C2"), "dd-mm-yyyy") & ".xls*"  'filename waarop je filtert
  If Range("C2").Value = "" Then
        
        Range("C2").Select
        MsgBox vbCrLf & _
           " Vul eerst de datum in " & vbCrLf & _
           "" & vbCrLf & _
           "", vbInformation + vbOKOnly, " "
 
 ElseIf Range("C2").Value Then
  
  sn = Split(CreateObject("wscript.shell").Exec("cmd /c Dir """ & sDir & sDatum & """ /b /s").StdOut.ReadAll, vbCrLf) 'array maken met alle filenames  'array maken met alle filenames

  If UBound(sn) > 0 Then                                   'minstens 1
    For i = 0 To UBound(sn) - 1                            'laatste is leeg
    
      On Error Resume Next                                 'mogelijks is die al open en krijg je een fout
      Workbooks.Open (sn(i))                       'openen bestanden
      On Error GoTo 0
    Next
  End If
      End If
  
End Sub

ik heb het geprobeerd om de volgende regel te veranderen van
Code:
Workbooks.Open (sn(i))

in

Code:
FileCopy (sn(i)), "D:\test\"

maar dat werkt niet.

Iemand een suggestie.

Bvd
 
Laatst bewerkt:
Gerard2348,

Ik heb hier weinig verstand van maar zou het zo werken?

Code:
Workbooks.Copy (sn(i)), "D:\test\"
 
Bedankt voor je reactie. Maar dat werkt niet. Had dit ook al geprobeerd. het geeft de foutmelding;

Kan de methode of het gegevenslid niet vinden.
 
Heb nu geen tijd om je macro om te bouwen, maar kijk in de VBA-help eens bij 'Name, instructie' zodat je weet wat de bedoeling is.
Moet het bestand gekopiëerd worden of verplaatst ?
Met sn heb je al een volledige lijst die als basis kan dienen voor deze actie.
 
Ha warme bakkertje. Het is niet mijn macro maar die van jou. :thumb: Ik gebruik m naar volle tevredenheid. Ik wilde m nu gebruiken voor het kopiëren van bestanden in de directory en subdirectory naar een andere lokatie. Ik zal kijken naar 'name, instructie '. Kleine aanpassingen in macro's is voor mij geen probleem maar grote veranderingen aanbrengen, daar is mijn kennis van excel te summier.

Mvg
 
Als je op datum - bijv. 05-12-2013 - wil filteren:

Code:
Sub M_snb()
   sn = Filter(Split(CreateObject("wscript.shell").Exec("cmd /c Dir ""G:\OF\*.*"" /s").StdOut.ReadAll, vbCrLf), "05-12-2013")
End Sub

PS. Kun je deze vraag niet beter binnen het VBA subforum zetten ?
 
Beste snb,

Ik heb deze vraag in het excel forum gezet omdat ik deze code gebruik binnen excel. Ik had niet in de gaten dat er voor VBA een subforum is. Kan je mij uitleggen wat jouw aanpassing doet. Of wat het voordeel hier van is. Ik probeer alles uit wat men mij aanreikt.

Ik heb

Code:
sn = Split(CreateObject("wscript.shell").Exec("cmd /c Dir """ & sDir & sDatum & """ /b /s").StdOut.ReadAll, vbCrLf)

vervangen met


Code:
sn = Filter(Split(CreateObject("wscript.shell").Exec("cmd /c Dir ""G:\OF\*.*"" /s").StdOut.ReadAll, vbCrLf), "16-01-2014")

maar er gebeurt niets.


Overigens de eerste gepubliceerde code werkt perfect filtert op ingegeven datum (cel "C2" ), deze is variabel, en opent de bestanden. Nu nog een mogelijkheid dat de bestanden worden gekopieerd naar een andere directory ipv geopend. Zoals ik al had aangegeven is mijn kennis van excel nog te summier om grote veranderingen in macro's te doen. Kleine lukt wel. Tijd is een leermeester.

Mvg
 
Ik kan je geruststellen: inspanning is een leermeester, tijd niet.
 
Probeer deze eens
Code:
Sub copyfilesdatum()
    Dim sDatum As String, sDir As String, sn, i As Integer
    sDir = "d:\data\"  'je directory
    If Range("C2").Value <> vbNullString Then
        sDatum = "*" & Format(Sheets("Blad1").Range("C2"), "dd-mm-yyyy") & ".xls*"
    Else
        Range("C2").Select
        MsgBox vbCrLf & _
           " Vul eerst de datum in " & vbCrLf & _
           "" & vbCrLf & _
           "", vbInformation + vbOKOnly, " "
        Exit Sub
    End If
    
    sn = Split(CreateObject("wscript.shell").Exec("cmd /c Dir """ & sDir & sDatum & """ /b /s").StdOut.ReadAll, vbCrLf)
    
    If UBound(sn) > 0 Then
        For i = 0 To UBound(sn) - 1
            FileCopy sn(i), "d:\test\" & Split(sn(i), "\")(UBound(Split(sn(i), "\")))
        Next
    End If
End Sub
 
Warme bakkertje,

Heb het geprobeerd. Geweldig!!!!. Mijn hartelijke dank. :thumb:
 
@WB

Code:
FileCopy sn(i), "d:\test\" & Mid(sn(i), InStrRev(sn(i), "\") + 1)
 
@snb

Briljant, ge moet er maar aan denken :thumb:
 
Ik heb ze alle twee geprobeerd. Werken beide. Helemaal geweldig. Maar wat is het verschil??
Voor jullie als experts zo klaar als een klontje maar voor mij.......

:rolleyes:
 
Mijn methode splitst de volledige naam op in stukken met als scheidingsteken \. Met Ubound neem ik dan het laatste stuk als bestandsnaam.
De methode van snb kijkt waar de 1ste keer het teken \ voorkomt te kijken van achter naar voor (InstrRev). Dan tel je van voor naar achter op welke positie dit teken zich bevindt,tel er 1 bij.
Met de Mid-functie neem je dan het laatste deel te beginnen bij de voordien berekende positie.
Bekijk in de VBA-Help beide functies Mid en InstrRev voor verdere verduidelijking.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan