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

Macro voor openen meerder bestanden met wisselende namen in 1 map

Status
Niet open voor verdere reacties.

albundy33

Gebruiker
Lid geworden
8 dec 2008
Berichten
41
Hallo,

ik ben aan het werken aan een macro,
waarmee ik alle bestanden uit 1 specifieke map, 1 voor 1 open, gegevens kopieer naar een ander bestand en het bronbestand weer sluit, en het volgende open.
Ik heb dit op dit moment werkend gekregen, door de exacte bestandsnamen van de bronbestanden in de macro te verwerken.

Mijn probleem is, de namen van deze bronbestanden veranderen iedere maand gedeeltelijk.
Deze maand heten de bronbestanden 01-06, 02-06, 03-06 etc.
Volgende maand is het 01-07, 02-07, 03-07 etc.

De map waarin de bestanden staan blijft hetzelfde.
Ik heb weinig trek om iedere maand de macro compleet aan te gaan passen, dus mijn vraag is,
wie kan me helpen om de macro zo aan te passen dat hij genoeg heeft aan het stukje uit de bestandsnaam "01-", "02-", "03-" etc.

Ik had hier gister een code voor gevonden, maar had deze helaas niet opgeslagen. :rolleyes:

De volledige macro staat in het voorbeeldbestand onder macro2.Bekijk bijlage omzetten paretos1.xlsm

Het gaat om dit stukje dat ik graag anders wil hebben :


Workbooks.Open Filename:="M:\Ploegleiding\test\01-05.xls"
 
Laatst bewerkt:
Wat is de voorwaarde op de bestanden te openen? Huidige maand, vorige maand, volgende maand, dit jaar?

Begin eerst eens met alle selects en activate uit de code te halen.

Code:
Sheets("Lijn 34").Select
    Range("D37:D87").Select
    Selection.Copy

Kan je ook zo schrijven
Code:
Sheets("Lijn 34").Range("D37:D87").Copy
 
Ik begrijp niet helemaal wat je bedoelt met de voorwaarde op de te openen bestanden.

Ik moet iedere keer de bestanden 01-, 02-, 03-, 04-, etc, openen, maar deze maand is de volledige naam 01-06.xls, en volgende maand 01-07.xls. Het stukje "01-" in de bestandsnaam blijft dus hetzelfde iedere maand.

Ik had een code gevonden, waarbij bestanden in een map werden geopend, door een deel van de bestandsnaam op te geven in de macro.

Iets met 01- (LEFT,3), dus als de 1e 3 tekens "01-" bevatten, werd dat bestand geopend.

Helaas de pagina per ongeluk weggeklikt, en kan het niet meer terugvinden. :confused:
 
Laatst bewerkt:
Of veranderd de bestandsnaam van 01-06.xls in 01-07.xls ?
 
Zoiets?
Code:
Sub edm()
    Dim i As Integer
    Dim HM As String [COLOR="#008000"]'Huidige maand[/COLOR]
    Dim LD As String [COLOR="#008000"]'Laatste dag van de huidige maand[/COLOR]
    
    LD = Format(Day(DateSerial(Year(Date), Month(Date) + 1, 0)), "0#")
    HM = Format(Date, "MM")
    
    For i = 1 To Int(LD)
        Debug.Print "M:\Ploegleiding\test\" & Format(i, "0#") & "-" & HM & ".xls"
    Next i
End Sub
 
Laatst bewerkt:
@ HSV bestandsnaam veranderen gaat niet, de bestanden worden door meerdere bronnen binnen het gehele concern (diverse vestigingen) gebruikt, iedere verandering daarin, levert elders weer andere problemen op.
@ Edmoor Ik ben een beetje aan het rommelen met macro's via de "record" functie in excel, simpele functies als select, copy, paste, range etc begrijp ik nog, jouw stukje gaat me momenteel nog iets boven de pet, wat gaat dat precies doen?
 
Mijn vraag had met ja of nee beantwoord kunnen worden. :d
 
Ik las je vraag verkeerd, dacht dat je voorstelde om de bestandsnaam aan te passen. Ja, de bestandsnaam veranderd van 01-06.xls naar 01-07.xls, althans, de oude bestanden die eindigen met 06 worden verplaatst naar een andere map, en nieuwe bestanden met 07 worden in de map geplaatst voor die maand.
 
Ik ga maar een beschuitje eten met Katey Sagal:d

Leg even duidelijk uit wat er moet gebeuren. Welk bestand moet worden geopend en waarom. Ergens in het ondoorgrondelijke document staat 'augustus 2017' Dus wil je alle bestanden van 01-08-2017 t/m 31-08-2017 openen?
 
Dan kun je de bestanden openen die in de map staan zonder een naam van het bestand te weten.
Code:
Sub hsv()
Dim bestandopen As String
Application.ScreenUpdating = False
 bestandopen = Dir("C:\users\albundy23\documents\Map1\*")
    Do Until bestandopen = ""
        Workbooks.Open "C:\users\albundy23\documents\Map1\" & bestandopen
...........de rest van de code
 
Ok, ik probeer het nogmaals uit te leggen.

Ik heb een map waarin de bestanden 01-06.xls, 02-06.xls, 03-06.xls ...... t/m 30-06.xls staan.

De macro opent bestand 01-06, kopieert een rits met gegevens naar het voorbeeldbestand dat ik gepost hebt, en sluit vervolgens bestand 01-06.
Dan worden de gekopieerde gegevens in het voorbeeld bestand doorgekopieerd naar een 3e bestand.
Vervolgens wordt bestand 02-06 geopend, er wordt weer een rits met gegevens gekopieerd naar het voorbeeldbestand, 02-06 wordt gesloten,
en de gegevens worden doorgekopieerd naar het 3e bestand.
Daarna is 03-06 aan de beurt, en zo gaat de macro door, totdat we bij 30-06 zijn.
Dan heb ik alle gegevens voor de hele maand omgezet, normaal was dat allemaal handmatig kopieren, plakken, bestanden openen, tussen 3 bestanden wisselen, uitgesplitst over 15 tabbladen, waar alle gegevens in gekopieerd en geplakt moeten worden, waar ik knettergek van wordt, vandaar deze macro waar ik mee gestart ben.

Aan het eind van deze maand, klik ik 1x op de macro, en die voert 3 uur werk voor mij uit in 2 minuten.
Maar dan komt het probleem, in juli heten de bestanden die ik moet openen en sluiten, niet 01-06.xls etc.. maar heten ze 01-07.xls, 02-07.xls ... t/m 31-07.xls.
En heb ik dus niks meer aan mijn huidige macro. Omdat "01-" "02-" etc. iedere maand hetzelfde is in de bestandsnamen, wil ik graag de macro zo aanpassen, dat hij dit bestand kan openen op basis van dat stukje bestandsnaam, dus zonder de volledige bestandsnaam, want die veranderd iedere maand, en iedere maand de macro aanpassen,
levert me net zo veel werk als het originele handmatig geplak en geknip van gegevens.


Ik hoop dat het zo duidelijk is?
(PS Katey is al behoorlijk op leeftijd ;) )
 
Draai deze code maar eens in een leeg bestand.
Verander het Path in de code.

Als er gegevens in cel A1 en A2 staan van elk bestand, komen die in je leeg bestand.
Code:
Sub hsv()
Dim bestandopen As String,Wb as workbook
Application.ScreenUpdating = False
 bestandopen = Dir("C:\users\albundy33\documents\map1\*")
    Do Until bestandopen = ""
        Workbooks.Open "c:\users\albundy33\documents\map1\" & bestandopen
      With ThisWorkbook.Sheets(1)
Set Wb = Activeworkbook
       .Cells(Rows.Count, 1).End(xlUp).Offset(1).resize(,3) = array(Wb.Name, Wb.Sheets(1).Range("a1"),Wb.Sheets(1).Range("a2"))
       .Columns("A:C").AutoFit
      End With
    Workbooks(bestandopen).Close
      bestandopen = Dir
  Loop
End Sub

Of.
Code:
Sub hsv_2()
Dim arr, Wb as workbook
 For Each arr In Split(CreateObject("wscript.shell").Exec("cmd /c Dir """ & "C:\users\albundy33\documents\map1\*.xls*" & """/b /s ").StdOut.ReadAll, vbLf)
  if arr <> "" then 
   Workbooks.Open Mid(arr, 1, InStrRev(arr, ".") - 1)
   Set Wb = Activeworkbook
      With ThisWorkbook.Sheets(1)
       .Cells(Rows.Count, 1).End(xlUp).Offset(1).resize(,3) = array(Wb.Name, Wb.Sheets(1).Range("a1"),Wb.Sheets(1).Range("a2"))
       .Columns("A:C").AutoFit
      End With
    Wb.Close 0
 end if
 Next arr
End Sub
 
Laatst bewerkt:
@ @ Edmoor Ik ben een beetje aan het rommelen met macro's via de "record" functie in excel, simpele functies als select, copy, paste, range etc begrijp ik nog, jouw stukje gaat me momenteel nog iets boven de pet, wat gaat dat precies doen?

Dat stukje stelt de juiste bestandsnamen samen voor de eerste t/m de laatste dag van de huidige maand.
 
Hoi,

de aangereikte codes heb ik helaas niet aan de praat gekregen, via wat googlen kwam ik echter op wat Engelstalige fora terecht, waar ik een gedeeltelijke oplossing voor mijn probleem vond.
Wat ik nodig had, was het openen van excel-files met een "wildcard". Dit stukje heb ik nu opgelost gekregen, met de regel :

Code:
[B]    Workbooks.Open Filename:="M:\Ploegleiding\test\04-*.xls"[/B]

(Bestandsnaam is werkelijk 04-05.xls)
Echter, na het openen van dit bestand, en kopiëren van de gegevens, wil ik dit bestand dus weer selecteren en sluiten, voordat het volgende wordt geopend.
En dat krijg ik met dezelfde wildcard niet werkend:

Code:
Windows("04-*.xls").Activate
    ActiveWindow.Close
Deze geeft dan een foutmelding. Iemand suggesties hoe ik hieromheen kan werken?

PS : @ VenA herschrijven van de code :
Code:
Sheets("Lijn 34").Select
    Range("D37:D87").Select
    Selection.Copy
naar
Code:
Sheets("Lijn 34").Range("D37:D87").Copy
werkt niet, omdat D87 een samengestelde cel is, toen ik dit uitprobeerde, werkte het kopiëren en plakken niet meer correct.
 
Laatst bewerkt:
De voorbeeldcode die ik je gaf laat precies zien hoe je volledig automatisch de juiste bestandsnamen kan samenstellen.

Tip:
Gebruik samengevoegde cellen alleen voor kopteksten e.d., niet voor data.
 
Laatst bewerkt:
@ edmoor, wat moet ik precies doen met jouw code? Als ik die in mijn code ervoor plak, blijft hij op hetzelfde punt vastlopen.
Moet ik het in aparte macro zetten, en die eerst laten draaien?

Code:
Workbooks.Open Filename:="M:\Ploegleiding\test\01-*.xls"
    Application.EnableEvents = False
    Application.DisplayAlerts = False
    Sheets("Lijn 34").Select
    Range("D37:D87").Select
    Selection.Copy
    Windows("omzetten paretos1.xlsm").Activate
    Range("E5").Select
    ActiveSheet.Paste
    [B][U][COLOR="#FF0000"]Windows("01-*.xls").Activate[/COLOR][/U][/B]
    ActiveWindow.Close
Dit is de volledige code voor openen en sluiten, waar het op dit moment vastloopt bij het activeren van 01-*.xls.
 
Iedereen bedankt voor alle hulp, ik heb het probleem inmiddels weten op te lossen, als naslagwerk voor toekomstige forumleden die een dergelijk probleem hebben, bij deze de werkende code :
Code:
Application.EnableEvents = False
    Application.DisplayAlerts = False
    [COLOR="#FF0000"][B]Workbooks.Open Filename:="M:\Ploegleiding\test\01-*.xls"[/B][/COLOR]
    Application.EnableEvents = False
    Application.DisplayAlerts = False
    Sheets("Lijn 34").Select
    Range("D37:D87").Select
    Selection.Copy
    Windows("omzetten paretos1.xlsm").Activate
    Range("E5").Select
    ActiveSheet.Paste
    [B][COLOR="#FF0000"]Dim wkb As Workbook
    For Each wkb In Workbooks
        If wkb.Name Like "01-*.xls" Then
            wkb.Activate
            ActiveWindow.Close
            Exit For
        End If
    Next wkb[/COLOR][/B]
 
De code kan stukken beter, maar wat werkt dat werkt.

Ps. Nu open je maar een bestand.
In mijn code worden alle bestanden in de map die jij opgeeft in het path een voor een geopend, data opgehaald naar Thisworkbook, bestanden gesloten.
Oók met een asterix trouwens.
 
Ik probeer met jouw code verder te gaan, maar die heb ik nog niet werkend gekregen, iets te weinig kennis mijner zijde helaas. :confused:
Ik open overigens wel meerdere bestanden, dit is een stukje van de code, die wordt 30x herhaald met telkens de opvolgende dag van de maand, dus het kan stukken eenvoudiger, zeker, maar dat heb ik nog niet aan de praat kunnen krijgen, en op deze manier wel.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan