Automatisch invullen van data in een template

Stel hier je vraag over een Excel probleem
Sidney603
Berichten: 7
Lid geworden op: 13 okt 2020 10:37

Automatisch invullen van data in een template

Berichtdoor Sidney603 » 13 okt 2020 13:28

Bedankt voor het activeren van mijn account.
Mijn naam is Sidney, ben 29 jaar en werk in de fijnmechanische productie bij Optiwa b.v.
Wij maken onder andere onderdelen voor Thermo Fischer en ASML (zeer kleine nauwkeurige onderdelen met zeer krappe toleranties).

Om dit soort producten te controleren gebruiken wij 3d-meetmachines.
Deze drukken een uiteindelijk meet rapport af.

Mijn vraag is het volgende:
De meetmachine is klaar met meten, en maakt van de gemeten waardes een Excel document aan.
Hieruit wil ik bepaalde info (waardes) koppieren naar een door de klant aangeleverde template.
De naam van het meetrapport is nooit hetzelfde aangezien de producten allemaal een uniek nummer hebben.

Mijn ervaring met VBA is al op een aardig niveau, maar ik loop nog tegen enkele problemen aan...


Onderstaande is de bedoeling wat ik met VBA wil gaan oplossen:

Meetprogramma --> maakt meetrapport als "serienummer.xls" (verder te noemen "Meetrapport")
Meetprogramma --> opent klant template
Klant template --> moet bij openen de macro runnen om laatste gemaakte document in opgegeven folder te openen ("Meetrapport")
Klant template --> hierna moet de macro de naam ("Meetrapport") van het zojuist geopende document gebruiken tijdens het opzoeken van data
Klant template --> de data word door de macro van de ene cell in het "Meetrapport" document gekopieerd naar de klant template
Klant template --> save-as serienummer.xlsx (verder te noemen "Klant rapport") in de juiste map
Klant template --> sluit "Meetrapport" en ingevulde klant template ("Klant rapport")

Ik heb momenteel de template zo ver dat deze het laatste document opent in de aangewezen map, echter heb ik dan nog geen naam waar ik mijn macro vanuit kan laten kopiëren...
Aangezien deze steeds anders is (bij een nieuwe meting komt er een andere bestandsnaam uit, dit is altijd het unieke serienummer), moet ik dus de macro naar een opgeroepen naam laten zoeken in plaats van een voor gedefinieerde bestandsnaam.
Verder mag het "Klant rapport" opgeslagen worden zonder macro, dit moet eigenlijk zelfs een "dood" Excel document worden (klant hoeft niks te kunnen wijzigen), hier zou ik zelf nog wel uit kunnen komen.

Als het jullie helpt om mijn vraag te beantwoorden kan ik wel even snel een soort voorbeeld document opzetten.
Ik mag uiteraard vanwege geheimhouding geen klanten en/of gegevens hiervan delen.

Alvast heel erg bedankt, ook voor het lezen van dit lange bericht!

Groet Sidney
jkpieterse
Site Admin
Berichten: 772
Lid geworden op: 30 jan 2017 14:32

Re: Automatisch invullen van data in een template

Berichtdoor jkpieterse » 13 okt 2020 14:19

Laat eens wat van de code zien die je al hebt gemaakt (of plaats een Excel bestand als dat gaat), dan kunnen wij eens kijken.
Groetjes,
Jan Karel Pieterse
jkp-ads.com
Sidney603
Berichten: 7
Lid geworden op: 13 okt 2020 10:37

Re: Automatisch invullen van data in een template

Berichtdoor Sidney603 » 22 okt 2020 13:10

Excuses voor de late reactie, heb een paar dagen vrij gehad.
Hieronder een deel van de code (heb even een paar namen aangepast i.v.m. privacy)

Waar in de formule "Meetrapport.xls" staat, is het wijzigende document
Waar in de formule "Klant rapport.xlsm" staat, is het uiteindelijke document wat naar de klant verzonden dient te worden na dat het automatisch is ingevult


Code: Selecteer alles

Option Explicit

Sub NewestFile()

    Dim MyPath As String

    Dim MyFile As String

    Dim LatestFile As String

    Dim LatestDate As Date

    Dim LMD As Date

    MyPath = "C:\Users\sbeckers\Desktop\Meetkamer Meetdocumenten\Meet Rapporten"

    If Right(MyPath, 1) <> "\" Then MyPath = MyPath & "\"

    MyFile = Dir(MyPath & "*.xls", vbNormal)

    If Len(MyFile) = 0 Then

        MsgBox "No files were found...", vbExclamation

        Exit Sub

    End If

    Do While Len(MyFile) > 0

        LMD = FileDateTime(MyPath & MyFile)

        If LMD > LatestDate Then

            LatestFile = MyFile

            LatestDate = LMD

        End If

        MyFile = Dir

    Loop

    Workbooks.Open MyPath & LatestFile

End Sub


Sub Copy_Method()

Workbooks("Meetrapport.xls").Worksheets("Meetrapport.xls").Range("O33").Copy _
    Workbooks("Klant rapport.xlsm").Worksheets("Sheet1").Range("B8")

Workbooks("Meetrapport.xls").Worksheets("Meetrapport.xls").Range("O42").Copy _
    Workbooks("Klant rapport.xlsm").Worksheets("Sheet1").Range("B9")

Workbooks("Meetrapport.xls").Worksheets("Meetrapport.xls").Range("O51").Copy _
    Workbooks("Klant rapport.xlsm").Worksheets("Sheet1").Range("B10")

Workbooks("Meetrapport.xls").Worksheets("Meetrapport.xls").Range("O60").Copy _
    Workbooks("Klant rapport.xlsm").Worksheets("Sheet1").Range("B11")

Workbooks("Meetrapport.xls").Worksheets("Meetrapport.xls").Range("O69").Copy _
    Workbooks("Klant rapport.xlsm").Worksheets("Sheet1").Range("B12")

Workbooks("Meetrapport.xls").Worksheets("Meetrapport.xls").Range("O78").Copy _
    Workbooks("Klant rapport.xlsm").Worksheets("Sheet1").Range("B13")

Workbooks("Meetrapport.xls").Worksheets("Meetrapport.xls").Range("O87").Copy _
    Workbooks("Klant rapport.xlsm").Worksheets("Sheet1").Range("B14")

End Sub
Laatst gewijzigd door jkpieterse op 26 okt 2020 08:56, 1 keer totaal gewijzigd.
Reden: Code tags toegevoegd
jkpieterse
Site Admin
Berichten: 772
Lid geworden op: 30 jan 2017 14:32

Re: Automatisch invullen van data in een template

Berichtdoor jkpieterse » 26 okt 2020 08:55

Misschien helpt dit je op weg?

Code: Selecteer alles

Sub NewestFile()
    Dim MyPath As String
    Dim MyFile As String
    Dim LatestFile As String
    Dim LatestDate As Date
    Dim LMD As Date
    MyPath = "C:\Users\sbeckers\Desktop\Meetkamer Meetdocumenten\Meet Rapporten"
    If Right(MyPath, 1) <> "\" Then MyPath = MyPath & "\"
    MyFile = Dir(MyPath & "*.xls", vbNormal)
    If Len(MyFile) = 0 Then
        MsgBox "No files were found...", vbExclamation
        Exit Sub
    End If
    Do While Len(MyFile) > 0
        LMD = FileDateTime(MyPath & MyFile)
        If LMD > LatestDate Then
            LatestFile = MyFile
            LatestDate = LMD
        End If
        MyFile = Dir
    Loop
    With Workbooks.Open(MyPath & LatestFile)
        .Worksheets("Meetrapport.xls").Range("O33").Copy _
                Workbooks("Klant rapport.xlsm").Worksheets("Sheet1").Range("B8")

        .Worksheets("Meetrapport.xls").Range("O42").Copy _
                Workbooks("Klant rapport.xlsm").Worksheets("Sheet1").Range("B9")

        .Worksheets("Meetrapport.xls").Range("O51").Copy _
                Workbooks("Klant rapport.xlsm").Worksheets("Sheet1").Range("B10")

        .Worksheets("Meetrapport.xls").Range("O60").Copy _
                Workbooks("Klant rapport.xlsm").Worksheets("Sheet1").Range("B11")

        .Worksheets("Meetrapport.xls").Range("O69").Copy _
                Workbooks("Klant rapport.xlsm").Worksheets("Sheet1").Range("B12")

        .Worksheets("Meetrapport.xls").Range("O78").Copy _
                Workbooks("Klant rapport.xlsm").Worksheets("Sheet1").Range("B13")

        .Worksheets("Meetrapport.xls").Range("O87").Copy _
                Workbooks("Klant rapport.xlsm").Worksheets("Sheet1").Range("B14")
        'Geen meldingen geven
        Application.DisplayAlerts = False
        'Opslaan in zelfde map, zonder macro's
        Workbooks("Klant rapport.xlsm").SaveAs MyPath & Replace(.Name, ".xlsm", ".xlsx"), xlOpenXMLWorkbook
        Application.DisplayAlerts = True
        .Close False
    End With
End Sub
Groetjes,
Jan Karel Pieterse
jkp-ads.com
Sidney603
Berichten: 7
Lid geworden op: 13 okt 2020 10:37

Re: Automatisch invullen van data in een template

Berichtdoor Sidney603 » 26 okt 2020 10:09

Bedankt, ik ga er mee aan de slag!
De rest van het programma moet me opzich wel lukken.
Groet Sidney
Sidney603
Berichten: 7
Lid geworden op: 13 okt 2020 10:37

Re: Automatisch invullen van data in een template

Berichtdoor Sidney603 » 27 okt 2020 08:26

Beste Excellers,

Mijn document doet nu precies wat ik moest!

Enkel kwam daarna de vraag of het mogelijk is om het bestand op te slaan in een map die vast hangt aan het product nummer.

Voorbeeld:
Productnummer: 1121 --> M1
Productnummer: 1122 --> M2
Productnummer: 1123 --> M3
enzovoorts.

Is dit mogelijk met een "if-then" ?
Het nummer word al automatisch in cell B2 gezet, hier zou dus de if/tehn vanaf moeten hangen.

Dus bijvoorbeeld:
if B2 = 1121
then save in map M1

De naam van het document (B1) en de save as staan al in mijn macro, echter de locatie (Path) zou dus aangepast moeten worden aan de hand van het nummer in "B2"
In onderstaande macro zou dus \Meetkamer Meetdocumenten\ vervangen moeten worden door M1 (of M2, M3 enz.)

Is hier een goede oplossing voor?

Hier het stuk code aan het einde van mijn macro:

Code: Selecteer alles

Dim Path As String
Dim filename As String
Path = "C:\Users\sbeckers\Desktop\Meetkamer Meetdocumenten\"
filename = Range("B1")
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs filename:=Path & filename & ".xlsx", FileFormat:=xlOpenXMLWorkbook
Application.DisplayAlerts = True

Application.Quit

End Sub
jkpieterse
Site Admin
Berichten: 772
Lid geworden op: 30 jan 2017 14:32

Re: Automatisch invullen van data in een template

Berichtdoor jkpieterse » 27 okt 2020 08:42

Wat moet er gebeuren als we bij 1130 komen? Bestaan die mappen al?
Groetjes,
Jan Karel Pieterse
jkp-ads.com
Sidney603
Berichten: 7
Lid geworden op: 13 okt 2020 10:37

Re: Automatisch invullen van data in een template

Berichtdoor Sidney603 » 27 okt 2020 09:08

Het zijn 5 verschillende productnamen bijvoorbeeld:
1121
1137
1153
1173
1189

De mappen zijn er ook al:
M1
M2
M3
M4
M5

Natuurlijk heten ze bij mij anders, echter mag ik niet alles delen i.v.m. geheimhouding.
Groet Sidney
jkpieterse
Site Admin
Berichten: 772
Lid geworden op: 30 jan 2017 14:32

Re: Automatisch invullen van data in een template

Berichtdoor jkpieterse » 27 okt 2020 09:21

Simpel, je haalt het laatste karakter op uit cel B2:

Code: Selecteer alles

Path = "C:\Users\sbeckers\Desktop\Meetkamer Meetdocumenten\M" & Right(Range("B2").Value, 1)
Groetjes,
Jan Karel Pieterse
jkp-ads.com
Sidney603
Berichten: 7
Lid geworden op: 13 okt 2020 10:37

Re: Automatisch invullen van data in een template

Berichtdoor Sidney603 » 27 okt 2020 09:28

Excuses, mijn voorbeeld was niet helemaal goed...
De producten hebben willekeurige nummers (product 1 bijvoorbeeld 1121, product 2 bijvoorbeeld 1137), dus er zit geen echte regelmaat in.
Vandaar dat ik me af vroeg of ik het op kon lossen met een:

If B2 = 1121 then path=M1
If B2 = 1137 then path=M2
If B2 = 1153 then path=M3

Enzovoorts.
Had het nog aangepast, maar was denk ik te laat.
Groet Sidney

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers en 5 gasten