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

Bestand opslaan in nieuw aangemaakte map middels VBA

Status
Niet open voor verdere reacties.

RMSpan

Gebruiker
Lid geworden
17 mrt 2022
Berichten
82
Beste mensen, ik heb een volgend probleem waar ik niet uit kom:

Middels een macro VBA wil ik een nieuwe map aanmaken met het jaartal van dat jaar daar wil ik deze code voor gebruiken(werkt):
Code:
Sub CreateFolder(sFolder As String)

If Len(Dir(sFolder, vbDirectory)) = 0 Then
MkDir sFolder
End If


End Sub

Code:
Sub FolderCheck()


CreateFolder ("/Users/homecare/Documents/Geertje/Facturen/" & Format(Date, "YYYY"))


End Sub

Dan wil ik dat bij het opslaan van het bestand(factuur) deze natuurlijk in de nieuwe map terecht komt (elk jaar een nieuwe map met het juiste jaartal).
Dat krijg ik niet voor elkaar, dus heel graag wat hulp.
Dit is de code voor het opslaan:
Code:
'Save data of verkoopfactuur on sheet inkomsten.
Sub PDF_Boeken_Nieuws()


Dim sourceSheet As Worksheet
Dim dataSheet As Worksheet
Dim nextRow As Integer
Dim Mndm, MnDnr, YrNr


' Make some sheet variables .
Set sourceSheet = Worksheets("verkoopfactuur")
Set dataSheet = Worksheets("Inkomsten")


'Unprotect the Worksheet
Sheets("Inkomsten").Unprotect
Sheets("Verkoopfactuur").Unprotect
Sheets("Gegevens").Unprotect


  Dim Answer As VbMsgBoxResult
        Answer = MsgBox("Wilt u deze factuur boeken?.", vbYesNo + vbQuestion + vbDefaultButton2, " ")
        If Answer = vbYes Then


            With Sheets("Verkoopfactuur")
                'Make PDF
              pdf = "/Users/homecare/Documents/Geertje/Facturen/ " & Range("H11").Value & " " & Range("H5").Value & " " & Range("H10").Value & ".pdf"
             
         
                   Range("F2:M59").Select
                    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=pdf
                    
                'boeken factuur
                ' Get the next empty row from the Data sheet.
                    nextRow = dataSheet.Range("F" & dataSheet.Rows.Count).End(xlUp).Offset(1).Row


Mndm = sourceSheet.Range("H10")
MnDnr = Month(Mndm)
YrNr = Year(Mndm)


                    ' Input the form values into the Data sheet.
                        dataSheet.Cells(nextRow, 6).Value = sourceSheet.Range("H10").Value
                        dataSheet.Cells(nextRow, 7).Value = sourceSheet.Range("Q3").Value
                        dataSheet.Cells(nextRow, 8).Value = sourceSheet.Range("H11").Value
                        dataSheet.Cells(nextRow, 9).Value = sourceSheet.Range("I15").Value
                        dataSheet.Cells(nextRow, 10).Value = sourceSheet.Range("H5").Value
                        dataSheet.Cells(nextRow, 11).Value = sourceSheet.Range("L45").Value
                        dataSheet.Cells(nextRow, 12).Value = sourceSheet.Range("L46").Value
                        dataSheet.Cells(nextRow, 13).Value = sourceSheet.Range("L47").Value
                        dataSheet.Cells(nextRow, 14).Value = sourceSheet.Range("L48").Value
                        dataSheet.Cells(nextRow, 15).Value = sourceSheet.Range("Q4").Value
                        dataSheet.Cells(nextRow, 16).Value = sourceSheet.Range("Q6").Value
                        dataSheet.Cells(nextRow, 17).Value = sourceSheet.Range("O15").Value
                        dataSheet.Cells(nextRow, 19).Value = MnDnr
                        dataSheet.Cells(nextRow, 20).Value = YrNr
                                 
               'nieuwe factuur
                .Range("H5,O15,G15:K43").ClearContents
                .Range("O2").Value = Range("O2").Value + 1
                 Application.Goto .Range("H5")
            End With
               
        UserForm2.Show
          
        Else
            MsgBox "Factuur is niet geboekt"
    End If
       Sheets("Inkomsten").Protect
    Sheets("Verkoopfactuur").Protect
Sheets("Gegevens").Protect
    
     
End Sub


ps. ik werk op een Mac

Bestand bijgevoegd:
 

Bijlagen

  • Geertje Tst 2022a.xlsm
    549,5 KB · Weergaven: 11
Zou handig zijn als je de foutmelding erbij noemde.
Maar zet eens een . voor Range en let op de spaties:

Code:
        pdf = "/Users/homecare/Documents/Geertje/Facturen/" & .Range("H11").Value & " " & .Range("H5").Value & " " & .Range("H10").Value & ".pdf"
        msgbox pdf

Oh, en ook het jaartal niet vergeten:

Code:
    pdf = "/Users/homecare/Documents/Geertje/Facturen/" & Year(Now()) & "/" & .Range("H11").Value & " " & .Range("H5").Value & " " & .Range("H10").Value & ".pdf"
 
Laatst bewerkt:
Hoi AHulpje

Sorry voor de foutmelding, die zat hem in de plaatsing van de protect code van de sheets("Verkoopfactuur"), die stond op de verkeerde plaats.
Even een ' voorzetten. dan krijg je geen foutmelding meer.
Waarom zet jij punten voor de Range? werkt zonder prima bij mij.

En helaas jouw oplossing werkt niet, het bestand wordt nu helemaal niet opgeslagen.
 
te voorbarig

Hoi AHulpje

Opnieuw geprobeerd, en nu werkt hij wel.
Een slordigheidje met typen.

Bedankt!
 
Omdat je werkt met de constructie
Code:
With Sheets("Verkoopfactuur")

ging ik er vanuit dat dat niet het actieve werkblad was, en dan is het nodig om .Range te gebruiken.
Verder is het door elkaar gebruiken binnen één subroutine van
Code:
    Set sourceSheet = Worksheets("verkoopfactuur")
    With Sheets("Verkoopfactuur")
    ActiveSheet

ietwat verwarrend.
Ook het wat slordige inspringen draagt niet bij aan de leesbaarheid van de broncode.
En even verderop in de sub gebruik je zelf ook
Code:
    .Range("H5,O15,G15:K43").ClearContents
    .Range("O2").Value = Range("O2").Value + 1

Maar fijn dat het nu wel werkt.
 
Hoi Ahulpje

Bedankt voor de uitleg, weer wat geleerd en idd het op de juiste manier van inspringen van de coderegels heb ik ook nog niet goed onder de knie.

Nogmaals bedankt
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan