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

Gegevens via vba vanuit bronbestand naar doelbestand

Status
Niet open voor verdere reacties.

nando64

Gebruiker
Lid geworden
13 aug 2009
Berichten
37
Ik wil vanuit een bronbestand (180717di => dit is eigenlijk een planningsbestand) via VBA een bepaalde code kopiëren naar een verzamelbestand. In het verzamelbestand moet de code terecht komen in de kolom met dezelfde naam als de naam van het bronbestand en bij de corresponderende werknemer. In het verzamelbestand komen gegevens uit meerdere bronbestanden en meerdere werknemers kunnen dezelfde codes toegewezen krijgen. Zou iemand mij hiermee kunnen helpen? Beide bestanden zijn als voorbeeld toegevoegd. Als het lukt zou ik ook graag willen weten of het verzamelbestand dan geopend moet zijn of niet.

Gr,
Nando
 

Bijlagen

  • 180717di.xlsx
    9,7 KB · Weergaven: 44
  • Verzamelbestand.xlsx
    9,8 KB · Weergaven: 42
Bron bestand importeren in een tabblad en van daar uit doelbestand aanpassen
Plaats alle bronbestanden in het path "D:\Download"
 

Bijlagen

  • Verzamelbestand(jp).xlsm
    33 KB · Weergaven: 41
Jean-Paul,

Heel erg bedankt voor deze oplossing. Alleen het zijn natuurlijk voorbeeldbestanden. In de werkelijke bronbestanden moeten de codes uit drie aparte kolommen worden gehaald.
Ik ga ervan uit dat onderstaande code deze gegevens uit het bronbestand haalt. In de juiste bronbestanden gaat het altijd om de kolommen A, D en G.
Kun je voor mij aangeven hoe ik dit moet wijzigen?

Code:
Sub GetData_Example1()
 'change constants & FilePath below to suit
 Sheets("Import").Columns("A:E").ClearContents
      '***************************************
      Filename = Blad1.Cells(4, ActiveCell.Column) & ".xlsx"
      Const SheetName$ = "Blad1" '"DB"
      'Const NumRows& = 700
      'Const NumColumns& = 3 '100
      FilePath = "D:\Download\"
      '***************************************
' It will copy the Header row also (the last two arguments are True)
' Change the last argument to False if you not want to copy the header row
    GetData FilePath & Filename, SheetName$, _
            "A1:C700", Sheets("Import").Range("A1"), True, True
   Sheets("Import").Range("E1") = Filename

End Sub

Alvast bedankt voor de moeite.
 
Hoe komt het planningsbestand tot stand. Is het steeds een kopie van de vorige dag met enkele aanpassing en wordt dan opgeslagen onder een nieuwe naam? Staan deze 'bestandsnamen' op voorhand al in het verzamelbestand? Staan deze bestanden allemaal in dezelfde map? Als je eens wat relevante info geeft dan zal de oplossing ongetwijfeld minder complex worden. Niets zeggende voorbeelden helpen ook niet mee en kosten de helpers onnodige tijd als je het zelf blijkbaar niet kan aanpassen.
 
@Jean-Paul:
Ik heb een bestand toegevoegd waarbij de namen zijn gewijzigd. Tevens is het een stuk ingekort. Normaal gaat het om een 24-uurs planning met meerdere locaties. Het gaat uiteindelijk om het toekennen van r eiskosten voor diverse locaties. Op het moment dat de code wordt ingevoerd wil ik eigenlijk dat het verzamelbestand wordt gevuld. Je eerdere oplossing met een "update" knop werkt ook goed.

@VenA:
Het planningsbestand komt tot stand vanuit een sjabloon. De layout van drie kolommen met klantnaam en locaties blijft hetzelfde. Alleen in de kolom zelf wijzigt de layout wel al naar gelang de inzet van werknemers. Het slabloon wordt dan opgeslagen met een vaste layout nl. 18(jaar)07(maand)19(dag)do(dag in letters), altijd 8 karakters. In het verzamelbestand worden deze bestandsnamen nu nog handmatig ingevoerd. De planningsbestanden, verzamelbestand en het sjabloon staan in één map per maand. Deze mappen staan weer in een hoofdmap op 1 locatie.
 

Bijlagen

  • 180719do.xlsx
    15,1 KB · Weergaven: 37
Ik zie 9 kolommen zonder een normale structuur. Wat hier aan te automatiseren is zie ik niet.
 
VenA,

Het planningsbestand hoeft ook niet geautomatiseerd te worden. Het gaat om het verzamelbestand. Daar had Jean-Paul al een voorzet mee gedaan. Het verzamelbestand moet worden gevuld met een reiskostencode per dag per werknemer. De code van Jean-Paul werkt voortreffelijk, alleen die is geschreven voor een import van 1 kolom uit het planningsbestand. Uiteindelijk moet er een import komen vanuit 3 kolommen naar het verzamelbestand. Het zijn altijd 3 vaste kolommen: A, D en G.
 
Met deze update en aanpassing zou hij jou werkje vlugger als met de hand moeten op knappen,
 

Bijlagen

  • Verzamelbestand(jp2).xlsm
    35,4 KB · Weergaven: 44
Jean-Paul,

Heel erg bedankt, het werkt goed. Alleen op het moment dat ik een import doe en ik sluit het verzamelbestand krijg ik de vraag of ik beide bestanden wil opslaan. Wanneer ik beide bestanden opslaat zijn alle gegevens uit het bronbestand verdwenen. Als ik alleen het verzamelbestand opslaat en het bronbestand niet gaat het goed. Is er wellicht een importcode die alle bestanden vanuit één map kan importeren waarbij dan de kolomkoppen in het verzamelbestand de bestandsnamen vormen?
 
De actieve cel op rij 4, alleen dat bronbestand word opgehaald na het drukken van de macro knop in je verzamelbestand, het bron bestand moet niet geopend worden dat doet de macro zelf.
 
Het bronbestand open ik niet, maar als ik het verzamelbestand sluit krijg ik wel de melding om alle bestanden op te slaan. Als ik ze één voor één voor sluit zie ik dat het ook om het bronbestand gaat. De macro opent het bestand wel maar sluit het dan waarschijnlijk niet. Als ik het bronbestand opslaat en ik wil het opnieuw openen opent alleen de Excel-applicatie. Sla ik het bronbestand niet op dat zijn alle gegevens intact.
 
Bij mij wordt alles netjes gesloten, kijk eens of deze "Verwijzigingen" in je VBA project geselecteerd zijn ( zie foto), in vba project extra kiezen - verwijzigingen, hier selecties extra kiezen die op de foto staan.
 

Bijlagen

  • KnipselBestand.JPG
    KnipselBestand.JPG
    213,5 KB · Weergaven: 68
Het gaat er mij om dat het plannings-bestand qua structuur niet goed in elkaar zit om er even makkelijk een code voor te maken. Vanuit opgemaakte toestanden naar een tabelvorm kan wel maar dan zal steeds weer blijken dat het toch net iets anders in elkaar steekt.
Waarom wordt het personeelsnummer niet opgehaald uit het blad 'Pers. nrs. Of omgekeerd waarom plan je niet op het personeelsnummer en zoek je de betreffende naam op in 'Pers. nrs.' Waarom zet je niet alle data in 1 tabel om van daaruit de overzichten te maken? Net als JeanPaul28 zijn er meerder helpers die er wel iets voor kunnen maken maar als je zelf niets van VBA weet dan wordt het lastig om het te onderhouden en kan je beter het planningsbestand onderhanden nemen.
 
VenA,

In het originele planningsbestand wordt via 'vertikaal zoeken' het personeelsnummer ingevoerd en de bijbehorende naam opgehaald uit 'Pers. nrs'. Alle data in 1 tabel heb ik wel over nagedacht maar daarvoor heb ik te weinig kennis van VBA. Het is niet zo dat ik helemaal blanco ben in VBA maar ik weet er te weinig van om dit soort constructies te maken. Ons bedrijf werkt 24/7 in volcontinudiensten waarbij onze medewerkers op verschillende locaties worden ingezet. Dit is dus altijd variabel. Voor de verschillende locaties gelden wel vaste reiskostenvergoedingen die ik verzameld wil hebben in het verzamelbestand. Tijdens de shiften van onze medewerkers wisselen zij ook nog wel eens van locatie waar dan ook weer verplaatsingsvergoeding voor bestaat. Al met al een beetje complex. Ik dacht met een uitgekleed voorbeeld een eerste opzet te krijgen om dit daarna zelf verder uit werken. Ik probeer altijd in de aangeleverde voorbeelden de code te begrijpen omdat ik daar alleen maar van leer. Alle hulp is dus welkom.
 
In het originele planningsbestand wordt via 'vertikaal zoeken' het personeelsnummer ingevoerd en de bijbehorende naam opgehaald uit 'Pers. nrs'
Lijkt mij vrij onmogelijk.

Alle data in 1 tabel heb ik wel over nagedacht maar daarvoor heb ik te weinig kennis van VBA.
Hier is geen VBA voor nodig alleen een andere manier van gegevensinvoer.

In het voorbeeldje in de tab 'Database' een tabel waarin je alleen de gegevens onder de groene kolomkoppen hoeft in te vullen. Als het vaste diensten zijn dan kan de invoer nog verder beperkt worden. Onder de oranje kolomkoppen staan diverse formules die aanvullende data ophalen/berekenen.

In de tab 'Planning' en de tab 'Overzicht' een draaitabel die je naar eigen smaak kan opmaken. In de tab 'Lijsten' staan diverse tabellen op de gegevensinvoer een beetje te stroomlijnen.
 

Bijlagen

  • planning.xlsx
    30 KB · Weergaven: 41
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan