vervangen van directory en filenamen door iets korters en aanpasbaar

Status
Niet open voor verdere reacties.

SR71Blackbird

Gebruiker
Lid geworden
14 nov 2024
Berichten
5
Ik heb een (lange) macro die vertrekt vanuit een Excelbestand (template) dat elke dag van naam veranderd (de datum).

Deze macro kopiëert bepaalde data van verschillende tabbladen van de template, opent verschillende werkbladen (vanuit een andere directory), plakt de gekopiëerde data in de juiste tabbladen van de werkbladen, slaat de werkbladen op en sluit ze weer af.

De directory van deze werkbladen en hun naam wijzigt elke week.

Bijgevolg zou ik elke dag:
* de naam van de template verscheidene keren in de macro moeten aanpassen (= elke keer er teruggekeerd moet worden naar de template om de volgende reeks data te kopiëren).
Elke week:
* de directory van de verschillende werkbladen in de macro moeten aanpassen, anders opent de macro de verkeerde werkbladen.
* de naam van verschillende werkbladen aanpassen

Hoe zorg ik er voor dat ik snel de nodige aanpassingen kan doen zonder de hele macro te moeten doorspitten en alles manueel moet aanpassen?

In bijlage kunnen jullie de macro terugvinden.
De geel gemarkeerde tekst is de naam van de template, die wijzigt elke dag van naam.
De lichtbauw gemarkeerde tekst zijn de verschillende werkbladen waarvan de directory 1 keer per week wijzigt.
De paarsgemarkeerde tekst zijn de namen van de werkbladen waarvan de naam 1 keer per week wijzigt.

Zoals jullie kunnen zien zou het me een hoop werk besparen als er een oplossing zou bestaan.

Alvast bedankt!!
 

Bijlagen

En wat moeten we met een Word document? Het gaat toch om een Excel sjabloon?
 
Dit is mijn allereerste post, ik heb geen idee hoe ik een excelsjabloon van een macro moet maken laat staan bepaalde zaken erin marken in kleur
 
Net zoals vertrekt eindigt verandert in de 3e persoon enkelvoud tegenwoordige tijd altijd op een t. Eindelijk een regel in het Nederlands zonder uitzondering. Simpeler kan niet.
 
Kijk eens boven in Module1 van dit bestand.
Daar kan je eenmalig per bestand de de correcte naam ingeven.
Er kan ook nog e.e.a. meer verbeterd worden, maar dat was je vraag niet.
 

Bijlagen

ik heb geen idee hoe ik een excelsjabloon van een macro moet maken laat staan bepaalde zaken erin marken in kleur
Daarin ben je niet de enige, dat kan namelijk niemand. En dat hoeft ook niet. Overigens gebruik je de term 'sjabloon/template' te pas en te onpas, maar voornamelijk te onpas. Ik zie namelijk nergens in je macro dat je een template aanroept of opent.

Ik zie, en ik ben denk ik niet de enige, ook niet waarom je voor elke dag een ander bestand gebruikt. Lijkt mij een onhandige manier van werken.
En datzelfde geldt voor het onnodige selecteren van van alles en nog wat. Je kunt dus met veel minder opdrachten toe, doe ook nog eens veel sneleer werken. Zoals zo:

Code:
    Set src = ActiveWorkbook
    Set sht = Sheets("Register")
    sht.Range("$A$1:$O$35").AutoFilter Field:=14, Criteria1:="<>0"
    sht.Range("B2:O37").Copy
    Set wb1 = Workbooks.Open(Filename:="R:\Regio PR\... \4078-LZ-PL-35312136-0010-TimeSheetsRegister.xlsx")
    wb1.Sheets("2024").Range("A3").End(xlDown).Offset(1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    wb1.Close SaveChanges:=True
    src.Activate

Uiteraard niet zo kunnen testen, want ik heb die bestanden niet. Maar het gaat om het idee :).
Bestandsnamen kun je makkelijk in een variabele gooien, zeker als er een vaste structuur voor is op basis van bijvoorbeeld een datum. Bij jou zie ik daar geen structuur in, afgezien van een weeknummer.
 
Kijk eens boven in Module1 van dit bestand.
Daar kan je eenmalig per bestand de de correcte naam ingeven.
Er kan ook nog e.e.a. meer verbeterd worden, maar dat was je vraag niet.
Zo dadelijk eens uittesten.
Alvast hartelijk dank voor de hulp!
 
En als het weeknummer het huidige weeknummer is kan het ook zo, een kleine aanpassing in het bestand van edmoor, ook WND4 een waarde gegeven. Dan hoef je het weeknummer niet meer aan te passen. Ik ben er vanuit gegaan dat je het weeknummer met een voorloopnul gebruikt, maar dat is eenvoudig aan te passen. Ook het jaar (komt maar een keer voor) kun je op die manier aanpassen.
 

Bijlagen

Daarin ben je niet de enige, dat kan namelijk niemand. En dat hoeft ook niet. Overigens gebruik je de term 'sjabloon/template' te pas en te onpas, maar voornamelijk te onpas. Ik zie namelijk nergens in je macro dat je een template aanroept of opent.

Ik zie, en ik ben denk ik niet de enige, ook niet waarom je voor elke dag een ander bestand gebruikt. Lijkt mij een onhandige manier van werken.
En datzelfde geldt voor het onnodige selecteren van van alles en nog wat. Je kunt dus met veel minder opdrachten toe, doe ook nog eens veel sneleer werken. Zoals zo:

Code:
    Set src = ActiveWorkbook
    Set sht = Sheets("Register")
    sht.Range("$A$1:$O$35").AutoFilter Field:=14, Criteria1:="<>0"
    sht.Range("B2:O37").Copy
    Set wb1 = Workbooks.Open(Filename:="R:\Regio PR\... \4078-LZ-PL-35312136-0010-TimeSheetsRegister.xlsx")
    wb1.Sheets("2024").Range("A3").End(xlDown).Offset(1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    wb1.Close SaveChanges:=True
    src.Activate

Uiteraard niet zo kunnen testen, want ik heb die bestanden niet. Maar het gaat om het idee :).
Bestandsnamen kun je makkelijk in een variabele gooien, zeker als er een vaste structuur voor is op basis van bijvoorbeeld een datum. Bij jou zie ik daar geen structuur in, afgezien van een weeknummer.
Het excelbestand van waaruit de macro vertrekt is een vrij groot bestand met een tabblad of 30.
In het eerste tabblad wordt elke werkdag nieuwe info/data ingegeven, alle andere tabbladen blijven hetzelfde. Aan de hand van formules, voorwaardelijke opmaak enz... geven de andere tabbladen informatie weer die ze halen uit het eerste tabblad.
Dit excel bestand noemen wij een template omdat de basis hetzelfde blijft, enkel de info op het eerste tabblad wijzigt.
Vermoedelijk is dat geen correcte naamgeving, wij zijn dan ook geen pro's :)

Er zijn een aantal redenen waarom deze excel elke dag van naam verandert.

1) alle tabbladen (behalve het eerste) worden omgezet naar pdf's.
In elk tabblad zit een formule om deze pdf een titel te geven en die komt van de datum van de werkdag.
Als het excelbestand bvb. ik-heb-een-vba-issue-241114 zou heten, heet het 2e tabblad oplossing 1-241114, het 3e tabblad oplossing 2-241114 enz.
Voor onze klant is het van belang dat de datum vermeld staat op de pdf.
Om te vermijden dat ik elke dag 29 pdf's van naam moet veranderen, verandert de naam van het excelbestand elke dag.

2) De pdf's aanmaken gebeurt via een macro.
Deze slaat de pdf's op in de map met dezelfde datum als het excel bestand.

3) Onze klant gaat niet altijd akkoord met wat er staat op de pdf's die wij indienen.
Dus moet er soms een revisie gemaakt worden (soms dagen later).
Dat doen we door het excelbestand van die werkdag te openen, de nodige aanpassingen te doen, een nieuwe pdf te maken en terug in te dienen.

Kortom dit excelbestand is elke dag anders en wordt elke dag onder een andere naam opgeslagen vóór de lange macro in gang wordt gezet.

Dat de macro gerust eenvoudiger kan geschreven worden ben ik van overtuigd. Het is dan ook een combinatie van "macro opnemen" en wat ik gevonden heb op verschillende fora.
Ik was al blij dat hij werkte... :)

Bedankt alvast voor de info!
Ik test het straks of morgen uit!
 
Zo dadelijk eens uittesten.
Alvast hartelijk dank voor de hulp!
Werkt fantastisch!!

ik loop nog op 1 probleempje dat tot op heden nog niet was voorgevallen.

De autofilter in een bepaald tablad filtert alle lege cellen weg uit 1 bepaalde kolom (er staat nog wel data in de andere kolommen).
Daarna kopiëert de macro een bepaald bereik en plakt dat in een ander werkblad.
De lengte van dit bereik is altijd hetzelfde en bevat dus niet-lege en lege cellen (die we niet zien door de autofilter).
Hetgene dat effectief geplakt wordt zijn alleen de niet-lege cellen, wat de bedoeling is.

Nu is het vandaag voor de eerste keer voorgevallen dat er alleen maar lege cellen in dat bepaalde bereik zit.
Dus de autofilter verbergt het ganse bereik.
Er zou dus niets van dit bereik gekopiëerd en geplakt moeten worden, maar de macro kopiëert juist alles.

is er daar een oplossing voor?
Zoiets als, sla deze stap over als bereik x leeg is bvb?

de autofilter:
1731684270840.png

het bereik dat de macro moet kopiëren:
1731684326757.png
Alvast bedankt!!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan