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

automatisch nieuwe facturen maken

Status
Niet open voor verdere reacties.

HenkBakker

Gebruiker
Lid geworden
9 nov 2006
Berichten
164
Eens in de zoveel tijd mag ik ons factuuroverzicht uitbreiden.
Er moet dan een aantal facturen (zie voorbeeld in de bijlage) bijgemaakt worden.
Ik heb hiervoor al een macro gemaakt (CTRL+N), die ervoor zorgt dat het factuurnummer in cel I10 met 1 (van 71400 naar 71401) wordt opgehoogd.
Daarna moet ik de factuur 'opslaan als' (hiervoor gebruik ik functietoets F12) van het oude factuurnummer (2018-71400.xlsm) naar het nieuwe (2018-71401.xlsm). Dat laatste moet ik dus handmatig doen.
Is er iemand die hiervoor een macro kan maken? Belangrijk is, dat de overige werkbladen deel blijven uitmaken van de (nieuwe) factuur.
 

Bijlagen

  • 2018-71400.xlsm
    983,8 KB · Weergaven: 64
Met deze code achter een knop in het blad factuur:

Code:
Sub OpslBestand()

Dim Bestandsnaam As String, mynumber As String
Sheets("factuur").Range("A1:I46").Select
mynumber = Format(Range("H10").Value)

Bestandsnaam = "Factuur" & "_" & mynumber
Pad1 = "C:\0 Bakker Handicrafts\05 facturen\uitgaand\2017\2017-\"
        ActiveSheet.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=Pad1 & Bestandsnaam, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=False

 Sheets("pre-factuur").Select
    Range("B12").Select
    Selection.ClearContents
    Range("E9:E10").Select
    Selection.ClearContents
    Range("C19:D38").Select
    Selection.ClearContents
 Range("I10").Value = Range("I10").Value + 1
    Sheets("factuur").Select
    Range("I10").Select
    Sheets("offerte").Select
    Range("I10").Select
    Selection.ClearContents
Sheets("pre-factuur").Select
End Sub

Bekijk bijlage Kopie van 2018-71400.xlsm
 
JanBG:
Stukje positief bedoelde kritiek :)
Zo'n heel blok met .Select en .ClearContents op 1 werkblad kan ook in 1 regel:
Code:
Sheets("pre-factuur").Range("B12, E9:E10, C19:D38").ClearContents

Daarnaast zitten er een aantal .Select opdrachten in waarmee niets wordt gedaan en zijn dus alleen maar vertragend en overbodig.
 
Laatst bewerkt:
@JanBG & edmoor:
Dank voor jullie hulp!
Maar... Omdat ik nogal een leek ben in VBA en het maken van macro's (het lukt mij alleen met Macro opnemen), heb ik geen idee, hoe ik de code moet toevoegen in mijn factuur.
Is het mogelijk mij een stap-voor-stap uitleg te geven?
 
Het kunnen opnemen van een macro is een mooie functionaliteit in Excel.
He levert echter de code op die exact doet wat je uitvoert en dat is vaak qua code veel te uitgebreid.
Het nadeel van al die Selects en Activates is dat het nogal vertragend werkt.
De door de recorder geleverde code kan daarom altijd wel geoptimaliseerd worden.
Een klein stukje wat betreft je eigen code heb ik laten zien in het bericht aan JanBG.

Het vergt nogal wat uitleg om alles te laten zien.
Je kan dus op een gegeven moment na het opnemen van code en als deze werkt zoals je wilt, die code hier plaatsen en vragen deze te optimaliseren.
Als je dan goed volgt wat je terug krijgt en dat vergelijkt met wat het was kan je daar veel van leren.
 
]@edmoor: Heb de moed bijeengeschraapt en een nieuwe macro opgenomen. En wat denk je? Gelukt!
Code:
Sub VolgFact()
 Range("I10").Value = Range("I10").Value + 1
 'Range("H11").Value = Date
 End Sub

Public Sub OpslBestand()
 Dim NieuwFact  As Variant
 'kopiëren document als nieuwe factuur
 'ActiveSheet.Copy
 NieuwFact = "C:\Bakker Handicrafts\05 facturen\uitgaand\2018\2018-" & Range("I10").Value & ".xlsm"
 ActiveWorkbook.SaveAs NieuwFact, FileFormat:=xlOpenXMLWorkbook
 'ActiveWorkbook.Close
 VolgFact
End Sub
[CODE]
[/CODE]

Nu het volgende probleem:
In het factuuroverzicht moet nu ruimte worden gemaakt voor de nieuw gemaakte facturen.
Hiervoor heb ik al geprobeerd een Macro op te nemen. Die werkt op zich wel; maar slechts voor één nieuwe regel...
In de bijlage het factuuroverzicht: Bekijk bijlage factuuroverzicht_edmoor.xlsx
(Vanwege privacy-redenen heb ik rijen 4 t/m 42 tijdelijk gewist.)

Code:
Sub nieuwe_regel_in_factuuroverzicht()
'
' nieuwe_regel_in_factuuroverzicht Macro
'
' Sneltoets: Ctrl+b
'
    Rows("94:94").Select
    Selection.Copy
    Selection.Insert Shift:=xlDown
    Range("B95").Select
    Application.CutCopyMode = False
    Selection.Hyperlinks(1).Address = "2018\2018-71406.xlsm"
    Selection.Hyperlinks(1).TextToDisplay = "2018-71406"
    Rows("95:95").Select
    Selection.Replace What:="2018-71405", Replacement:="2018-71406", LookAt:= _
        xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Rows("94:94").Select
End Sub

Hoe kan ik nu 'programmeren' dat een volgende regel wordt gekopieerd (want als ik nu de macro nogmaals uitvoer, wordt wederom rij 94 gekopieerd) rij 95 dus. Ik zoek dus iets als een teller: Rows("94:94")+1 dat resulteert in Rows("95:95").
Hetzelfde voor de ophoging van het factuurnummer in de Hyperlink. Dus iets als '2018-71406'+1 dat resulteert in de volgende factuur '2018-71407'.

Voor het wijzigen van de links in kolommen D t/m K heb ik een formule in A96 gezet, die nadat de macro weer wordt uitgevoerd in A97 staat.
 
JanBG:
Stukje positief bedoelde kritiek :)
Zo'n heel blok met .Select en .ClearContents op 1 werkblad kan ook in 1 regel:
Code:
Sheets("pre-factuur").Range("B12, E9:E10, C19:D38").ClearContents

Edmoor: heb je code getest, maar die loopt vast omdat er in het bestand samengevoegde cellen zitten:confused:
 
Samengevoegde cellen en VBA zijn sowieso geen vriendjes.
 
@Henk:
Moet die code op een aantal regels dezelfde oefening uitvoeren?
 
@edmoor:
Het was mijn opzet om per 'klik' (CTRL B) een regel toe te voegen en deze gelijk aan te passen.
Uiteraard moet ik meerdere regels toevoegen (bv 50). Als dat in één keer zou kunnen is ook erg gemakkelijk!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan