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

check folder bestaat

Status
Niet open voor verdere reacties.
Ja, ja, een MAC is nu eenmaal geen windows.


Code:
Sub M_snb()
  MsgBox "folder bestaat" & IIf(Dir("/Users/homecare/Documents/Geertje/Facturen/" & Year(Date) & "/*") = "", " niet", "")
End Sub
 
Idd geen Windows, maar of dat aan de Mac ligt of aan Microsoft m.b.t. de Office versie voor de Mac laat ik maar even in het midden.
Maar het is wel vervelend dat sommige Vba code's niet werken op de Mac versie, helaas jouw aanpassing ook niet
 
Nog een optie voor windows, of het werkt op een MAC....?
Code:
Dim fs As Object
 Set fs = CreateObject("Scripting.FileSystemObject")
 MsgBox "folder bestaat" & IIf(fs.folderExists("/Users/homecare/Documents/Geertje/Facturen/" & Year(Date)), "", " niet")
 
Het FileSystem Object is een onderdeel van de Windows Scripting Library.
Dat zal op een Mac niet aanwezig zijn.
 
Via een omweg:
Maak (via VBA) een bestand aan in de te testen folder, lukt dat, dan bestaat hij (zij?).
 
Waarom sla je niet gewoon even op F1 in de VBEditor terwijl dir gemarkeerd is ?
De meeste hulp zit onder vingerbereik en niet op Internet.
 
Nog een optie voor windows, of het werkt op een MAC....?
Code:
Dim fs As Object
 Set fs = CreateObject("Scripting.FileSystemObject")
 MsgBox "folder bestaat" & IIf(fs.folderExists("/Users/homecare/Documents/Geertje/Facturen/" & Year(Date)), "", " niet")
Zie reactie van Edmoor

Het FileSystem Object is een onderdeel van de Windows Scripting Library.
Dat zal op een Mac niet aanwezig zijn.

Idd dat is op de Mac niet aanwezig, anders had ik de oplossing al wel gevonden, maar nee werkt niet

Waarom sla je niet gewoon even op F1 in de VBEditor terwijl dir gemarkeerd is ?
De meeste hulp zit onder vingerbereik en niet op Internet.

Heb ik ook al gedaan maar geeft ook geen oplossing
Ik denk dat ik deze controle functie maar weg moet laten uit het bestand en er op vertrouwen dat de gebruiker de betreffende folder heeft aangemaakt voordat ze verder gaat.

Bedankt voor al het meedenken :thumb:
 
Deze al geprobeerd?
Code:
Function FileOrFolderExistsOnYourMac(FileOrFolderstr As String, FileOrFolder As Long) As Boolean
    'Ron de Bruin : 13-Dec-2020, for Excel 2016 and higher
    'Function to test if a file or folder exist on your Mac
    'Use 1 as second argument for File and 2 for Folder
    Dim ScriptToCheckFileFolder As String
    Dim FileOrFolderPath As String
    
    If FileOrFolder = 1 Then
        'File test
        On Error Resume Next
        FileOrFolderPath = Dir(FileOrFolderstr & "*")
        On Error GoTo 0
        If Not FileOrFolderPath = vbNullString Then FileOrFolderExistsOnYourMac = True
    Else
        'folder test
        On Error Resume Next
        FileOrFolderPath = Dir(FileOrFolderstr & "*", vbDirectory)
        On Error GoTo 0
        If Not FileOrFolderPath = vbNullString Then FileOrFolderExistsOnYourMac = True
    End If
End Function
 
Ja, ook geprobeerd, zelfde resultaat, geen bestand in de folder dan krijg ik een negatief antwoord :confused:
 
Wat is eenvoudiger dan een folder aanmaken ?
Een check is dan overbodig.
Code:
Sub M_snb()
  on error resume next
  mkdir "/Users/homecare/Documents/Geertje/Facturen/" & Year(Date) 
  on error goto 0
  thisworkbook.saveas "/Users/homecare/Documents/Geertje/Facturen/" & Year(Date) & "/voorbeeld.xlsm",52
End Sub
 
Wat is eenvoudiger dan een folder aanmaken ?
Een check is dan overbodig.
Code:
Sub M_snb()
  on error resume next
  mkdir "/Users/homecare/Documents/Geertje/Facturen/" & Year(Date) 
  on error goto 0
  thisworkbook.saveas "/Users/homecare/Documents/Geertje/Facturen/" & Year(Date) & "/voorbeeld.xlsm",52
End Sub

Dat is inderdaad eenvoudig maar zo werkt het niet in mijn administratieprogramma.
De bedoeling is dat er elk nieuw jaar een folder in de folder "facturen" wordt aangemaakt met het nieuwe jaartal.
Dus het path is nu administratie/facturen/2022
en moet volgend jaar dus administratie/facturen/2023 worden
Hierin worden dan de facturen van 2023 opgeslagen.
Op de dashboard van het programma zit een knop waarmee de gebruiker de folder kan aanmaken, geen probleem, werkt prima.
Op het moment dat de gebruiker nu een nieuwe factuur aanmaakt wordt deze dus in de nieuwe folder opgeslagen.
Wat ik nu probeerde te bereiken is dat er gecheckt wordt bij het opslaan van de nieuwe factuur in het nieuwe jaar, of de folder wel is aangemaakt.
Is dat het geval wordt het bestand(factuur) opgeslagen in t nieuwe jaar, is dit vergeten dan zou er een foutmelding moeten komen met de mededeling dat de folder nog moet worden aangemaakt.
Een hele uitleg, maar dat is dus de reden dat ik middels een, dacht ik, eenvoudige Vba code het bestaan van deze folder wilden testen.

Zo het er nu naar uit ziet gaat dit niet lukken en moet ik er maar op vertrouwen dat de gebruiker niet vergeet om in januari een nieuwe folder aan te maken.
 
Heb je de code wel getest ?
De code doet precies wat ie moet doen zoals jij het beschrijft.
Die aparte knop is overbodig.
Verwijder de folder voor 2022 en laat dan de code lopen.
Ik vind het wel zorgwekkend dat je zegt dat een code niet goed zou zijn, waaruit blijkt dat jij hem niet snapt en niet test.
Dan is iedere hulp zinloos.
 
Heb je de code wel getest ?
De code doet precies wat ie moet doen zoals jij het beschrijft.
Die aparte knop is overbodig.
Verwijder de folder voor 2022 en laat dan de code lopen.
Ik vind het wel zorgwekkend dat je zegt dat een code niet goed zou zijn, waaruit blijkt dat jij hem niet snapt en niet test.
Dan is iedere hulp zinloos.

Beste SNB

Ben je altijd zo snel op je teentjes getrapt? en ja getest en nee nog niet wat ik bedoel.(knop)
Maar ik ga zeker je voorstel nog verder testen in de programma vba code (PDF_Boeken) die ik voor dit doel heb geschreven.(met veel hulp van o.a. jullie, zie geschiedenis)
Want idd zijn er som zaken die ik niet begrijp, ben maar een amateur-programmeur van 71 jaar die door zelfstudie probeert kennis te vergaren in VBA om daarmee o.a. een leuk administratie/facturatie programma voor mijn nichtje in elkaar te zetten.(nu bijna klaar)

Maar ondanks je toon, die ik zeker niet kan waarderen, toch bedankt.
mvg
René
 
Snel, snel ?
Hoeveel bijdragen heb ik in deze draad al geleverd ?
 
Misschien had snb even moeten uitleggen dat zijn Subje dankzij "On Error Resume Next" niet protesteert als je een map wilt aanmaken die al bestaat. En omdat geen van de methoden om te testen of de map al bestaat schijnt te werken op een Mac is zijn oplossing prima bruikbaar.
 
Beste mensen

Het werkt, beter nog dan ik had bedacht.
Dank aan iedereen die zich heeft ingespannen om een oplossing te vinden, mede door de laatste bijdrage van snb werkt het nu goed.
Zijn inbreng heb ik in de code ingevlochten en idd geen extra knop meer nodig.
Hieronder de complete code:
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


Dim Answer As VbMsgBoxResult
Answer = MsgBox("Wilt u deze factuur boeken?.", vbYesNo + vbQuestion + vbDefaultButton2, " ")
    If Answer = vbYes Then
    
    On Error Resume Next
    MkDir "/Users/homecare/Documents/Geertje/Facturen/" & Year(Date)
  On Error GoTo 0


        With Sheets("Verkoopfactuur")
        'maak PDF
        pdf = "/Users/homecare/Documents/Geertje/Facturen/" & Year(Date) & "/" & .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("Q7").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"
         Application.Goto sourceSheet.Range("H5")


    End If
    Sheets("Inkomsten").Protect
    Sheets("Gegevens").Protect
End Sub
 
Een paar tips.
Als je sheet objecten gebruikt geef ze dan een duidelijke naam, dus:
Code:
    Set shtInkomsten = Worksheets("Inkomsten")
en niet
Code:
[COLOR=#333333]Set dataSheet = Worksheets("Inkomsten")[/COLOR]
Als je With / End With gebruikt doe dat dan consequent.
Zie verder de code.
Code:
'Save data of verkoopfactuur on sheet inkomsten.Sub PDF_Boeken_Nieuws()


    Dim shtVerkoopfactuur As Worksheet
    Dim shtInkomsten As Worksheet
    Dim nextRow As Integer
    
    ' Make some sheet variables.
    Set shtVerkoopfactuur = Worksheets("verkoopfactuur")
    Set shtInkomsten = Worksheets("Inkomsten")
    
    'Unprotect the Worksheet
    shtInkomsten.Unprotect
    
    Dim Answer As VbMsgBoxResult
    Answer = MsgBox("Wilt u deze factuur boeken?.", vbYesNo + vbQuestion + vbDefaultButton2, " ")
    If Answer = vbYes Then
    
        On Error Resume Next
        MkDir "/Users/homecare/Documents/Geertje/Facturen/" & Year(Date)
        On Error GoTo 0


        With shtVerkoopfactuur
            'maak PDF
            pdf = "/Users/homecare/Documents/Geertje/Facturen/" & Year(Date) & "/" & .Range("H11").Value & " " & .Range("H5").Value & " " & .Range("H10").Value & ".pdf"
            Range("F2:M59").Select ' Hier wordt niets mee gedaan?
            ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdf  'Is activesheet toevallig hetzelfde als shtVerkoopfactuur?
                        
            ' boeken factuur
            ' Get the next empty row from the Data sheet.
            nextRow = shtInkomsten.Range("F" & shtInkomsten.Rows.Count).End(xlUp).Offset(1).Row


            ' Input the form values into the Data sheet.
            shtInkomsten.Cells(nextRow, 6).Value = .Range("H10").Value
            shtInkomsten.Cells(nextRow, 7).Value = .Range("Q3").Value
            shtInkomsten.Cells(nextRow, 8).Value = .Range("H11").Value
            shtInkomsten.Cells(nextRow, 9).Value = .Range("I15").Value
            shtInkomsten.Cells(nextRow, 10).Value = .Range("H5").Value
            shtInkomsten.Cells(nextRow, 11).Value = .Range("L45").Value
            shtInkomsten.Cells(nextRow, 12).Value = .Range("L46").Value
            shtInkomsten.Cells(nextRow, 13).Value = .Range("L47").Value
            shtInkomsten.Cells(nextRow, 14).Value = .Range("L48").Value
            shtInkomsten.Cells(nextRow, 15).Value = .Range("Q4").Value
            shtInkomsten.Cells(nextRow, 16).Value = .Range("Q7").Value
            shtInkomsten.Cells(nextRow, 17).Value = .Range("O15").Value
            shtInkomsten.Cells(nextRow, 19).Value = Month(.Range("H10"))
            shtInkomsten.Cells(nextRow, 20).Value = Year(.Range("H10"))
                             
            '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"
        Application.Goto .Range("H5")
    End If
    shtInkomsten.Protect
    Sheets("Gegevens").Protect
End Sub
 
Hoi Ahulpje,
Bedankt voor de tips, leuk en leerzaam om zo de code te kunnen perfectioneren.
super:thumb::thumb:
 
die 15 waarden die je cel per cel wegschrijft, dat kan je ook in 1 beweging doen, dat gaat sneller
' Input the form values into the Data sheet.
shtInkomsten.Cells(nextRow, 6).resize(,15).Value =array(.Range("H10").Value, .Range("Q3").Value, .Range("H11").Value, .Range("I15").Value, ........)
 
Beste Cow18

Mijn ervaring is dat deze manier alleen werkt als de data sheet, i.d.g. Sheet Inkomsten, een tabel is.
Dit is bij mij niet het geval.
In tabelvorm liep ik tegen andere problemen aan waar ik nu op deze manier geen last van heb.
Vandaar mijn keuze.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan