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

Foutmelding m.b.t. If .... Else

Status
Niet open voor verdere reacties.

RMSpan

Gebruiker
Lid geworden
17 mrt 2022
Berichten
82
Beste allemaal

Ik krijg een foutmelding m.b.t. een code dat bij een Else de If mist, maar die zit wel in de code .
Waarschijnlijk heb ik de plaatsing niet juist.
Kan iemand mij daar mee helpen?
De bedoeling is als volgt; er moet een keuze gemaakt worden bij invoer met of zonder 9% BTW
Wanneer er in de factuur 21% en 9% BTW staan moeten deze beide in de sheet inkomsten komen te staan, maar als er in de factuur alleen maar 21% BTW producten staan moet er maar één rij geplaatst en ingevuld worden en niet twee rijen waarvan er dan een leeg is.
Vandaar de if else code.
Hierbij de code, misschien ziet iemand direct de fout, zo niet dan zal ik ook het testbestand bijvoegen.
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/Geert/Documents/Administratie/Facturen/" & Year(Date)
        MkDir "/Users/homecare/Documents/Geertje/Facturen/" & Year(Date)
        On Error GoTo 0
        
        'Kijkt of er ook 9% BTW in de factuur staat, indiendit zo is twee regels plaatsen
        If Range("k47").Value > 0 Then
        
        With Sheets("Verkoopfactuur")
            'maak PDF
            'pdf = "/Users/Geert/Documents/Administratie/Facturen/" & Year(Date) & "/" & .Range("H11").Value & " " & .Range("H5").Value & " " & .Range("H10").Value & ".pdf"
           pdf = "/Users/homecare/Documents/Geertje/Facturen/" & Year(Now()) & "/" & .Range("H11").Value & " " & .Range("H5").Value & " " & .Range("H10").Value & ".pdf"
 
            Range("F2:M59").Select
            ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=pdf
            
 
            ' posting invoices
            ' Get the next empty row from the Data sheet.
            nextRow = dataSheet.Range("F" & dataSheet.Rows.Count).End(xlUp).Offset(1).Row
    
            ' 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("K46").Value
            dataSheet.Cells(nextRow, 12).Value = sourceSheet.Range("I46").Value
            dataSheet.Cells(nextRow, 13).Value = sourceSheet.Range("M46").Value
            dataSheet.Cells(nextRow, 14).Value = sourceSheet.Range("P46").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("P15").Value
            dataSheet.Cells(nextRow, 19).Value = Month(.Range("H10"))
            dataSheet.Cells(nextRow, 20).Value = Year(.Range("H10"))
            
             ' posting invoices
            ' Get the next empty row from the Data sheet.
            nextRow = dataSheet.Range("F" & dataSheet.Rows.Count).End(xlUp).Offset(1).Row
            
            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("K47").Value
            dataSheet.Cells(nextRow, 12).Value = sourceSheet.Range("I47").Value
            dataSheet.Cells(nextRow, 13).Value = sourceSheet.Range("M47").Value
            dataSheet.Cells(nextRow, 14).Value = sourceSheet.Range("P47").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("P15").Value
            dataSheet.Cells(nextRow, 19).Value = Month(.Range("H10"))
            dataSheet.Cells(nextRow, 20).Value = Year(.Range("H10"))
                             
            'nieuwe factuur
            .Range("H5,O15,G15:L43").ClearContents
            .Range("P2").Value = Range("P2").Value + 1
             Application.Goto .Range("H5")
    
       ' Als er alleen 21% BTW staat een regel plaatsen
       Else
       
            ' posting invoices
            ' Get the next empty row from the Data sheet.
            nextRow = dataSheet.Range("F" & dataSheet.Rows.Count).End(xlUp).Offset(1).Row
    
            ' 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("K46").Value
            dataSheet.Cells(nextRow, 12).Value = sourceSheet.Range("I46").Value
            dataSheet.Cells(nextRow, 13).Value = sourceSheet.Range("M46").Value
            dataSheet.Cells(nextRow, 14).Value = sourceSheet.Range("P46").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("P15").Value
            dataSheet.Cells(nextRow, 19).Value = Month(.Range("H10"))
            dataSheet.Cells(nextRow, 20).Value = Year(.Range("H10"))
            
            
       End With
        UserForm2.Show
       End If
        MsgBox "Factuur is niet geboekt"
        Application.Goto sourceSheet.Range("H5")
    End If
    Sheets("Inkomsten").Protect
    Sheets("Gegevens").Protect
End Sub
 
Die End With moet voor de Else staan.
Dan in de Else een nieuwe With beginnen met een eigen End With.
 
Bedankt Edmoor

Werkt nu prima. Top:thumb:
Loop nu wel tegen een nieuw dingetje aan.
Bij het boeken van de factuur krijg je de vraag of deze geboekt moet worden, als je op ja klikt wordt hij geboekt en krijg je het bericht dat deze geboekt is, wanneer je op nee klikt krijg je het bericht factuur niet geboekt.
Aan het begin van de code:
Code:
 Dim Answer As VbMsgBoxResult
    Answer = MsgBox("Wilt u deze factuur boeken?.", vbYesNo + vbQuestion + vbDefaultButton2, " ")
    If Answer = vbYes Then
Aan het einde van de code staat een MsgBox commando als de factuur niet geboekt wordt geeft hij dit aan "Factuur niet geboekt"
Code:
  End With
        UserForm2.Show
              
         MsgBox "Factuur is niet geboekt"
        Application.Goto sourceSheet.Range("H5")
       End If
       
    End If
Maar bij niet boeken verschijnt dit bericht nu niet en bij wel boeken krijg je nu het bericht geboekt, is goed maar ook het bericht niet geboekt en dat moet natuurlijk niet.
Met de plaatsing van de nieuwe With en de End With gaat dit nu dus fout.
Waar moet ik nu die MsgBox commando plaatsen?

Voor de hele code zie vorig bericht.
 
zonder een bestand te zien is het natuurlijk moeilijk oordelen hoe een code juist moet werken.


toch enkele opmerkingen
-er is maar van 1 blad de beveiliging afgehaald en toch is het blijkbaar nodig 2bladen te beveiligen
- blijkbaar is er een verschil van opslaan tussen 2 BTW codes maar daar is nooit een controle over ( If Range("k47").Value > 0 Then is in beide gevallen waar en zal ook de 21% een pdf maken)
- waarom in het eerste stuk code 2 regels aanmaken met dezelfde waarden?

mijn inziens voldoende zijn.

Code:
Sub PDF_Boeken_Nieuws()
Set sourceSheet = Worksheets("verkoopfactuur")
Set dataSheet = Worksheets("Inkomsten")
If MsgBox("Wilt u deze factuur boeken?.", vbYesNo + vbQuestion + vbDefaultButton2, " ") = vbYes Then
     On Error Resume Next
        'MkDir "/Users/Geert/Documents/Administratie/Facturen/" & Year(Date)
        MkDir "/Users/homecare/Documents/Geertje/Facturen/" & Year(Date)
        On Error GoTo 0
        'Kijkt of er ook 9% BTW in de factuur staat, indien dit zo is twee regels plaatsen
    If Range("k47").Value > 0 Then  'is 21 dan kleiner dan 0
        With Sheets("Verkoopfactuur")
                    'maak PDF
                    'pdf = "/Users/Geert/Documents/Administratie/Facturen/" & Year(Date) & "/" & .Range("H11").Value & " " & .Range("H5").Value & " " & .Range("H10").Value & ".pdf"
            pdf = "/Users/homecare/Documents/Geertje/Facturen/" & Year(Now()) & "/" & .Range("H11").Value & " " & .Range("H5").Value & " " & .Range("H10").Value & ".pdf"
            .Range("F2:M59").Select '????
            ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdf
                ' posting invoices
                ' Get the next empty row from the Data sheet.
                ' Input the form values into the Data sheet.
                For i = 1 To 2
                    dataSheet.Range("F" & dataSheet.Rows.Count).End(xlUp).Offset(1).Resize(, 14) = Array(.Range("H10").Value, .Range("Q3").Value, .Range("H11").Value, .Range("I15").Value, .Range("H5").Value, .Range("K46").Value _
                    , Range("I46").Value, .Range("M46").Value, .Range("P46").Value, .Range("Q4").Value, .Range("Q7").Value, .Range("P15").Value, Month(.Range("H10")), Year(.Range("H10")))
                Next
           MsgBox "Factuur is geboekt"
        End With
    End If
Else
    With Sheets("Verkoopfactuur")
        dataSheet.Range("F" & dataSheet.Rows.Count).End(xlUp).Offset(1).Resize(, 14) = Array(.Range("H10").Value, .Range("Q3").Value, .Range("H11").Value, .Range("I15").Value, .Range("H5").Value, .Range("K46").Value _
                , Range("I46").Value, .Range("M46").Value, .Range("P46").Value, .Range("Q4").Value, .Range("Q7").Value, .Range("P15").Value, Month(.Range("H10")), Year(.Range("H10")))
     End With
 End If
MsgBox "Factuur is niet geboekt"
UserForm2.Show
End Sub
 
Laatst bewerkt:
1. maak geen gebruik van 'protection'
2.mak geen aparte directories per jaar voor offertes, maar zet in de bestandaam het jaar waarop het bestand betrekking heeft
3. zet in het werkblad een range van 16 horizontale cellen (bijv. AA1:AP1) waarin je met een formule verwijst naar de gegevens die naar het inkomsten werkblad gekopieerd moeten worden. Dat maakt de macro een stuk eenvoudiger.(zie tweede versie:
4. Hoe eenvoudiger de struktuur van je gegevens, hoe eenvoudiger de code.

Code:
Sub PDF_Boeken_Nieuws()
   On Error Resume Next
   c00 = "/Users/homecare/Documents/Geertje/Facturen/" & Year(Date)
   MkDir c00
   On Error GoTo 0

   If MsgBox("Wilt u deze factuur boeken ?", 292, " ") = 6 Then
     With Sheets("Verkoopfactuur")
        sn = .Range("A1:Q46")
        .Range("F2:M59").ExportAsFixedFormat 0, c00 & "/" & Join(Array(sn(11, 8), sn(5, 8), sn(10, 8))) & ".pdf"
        .Range("H5,O15,G15:L43").ClearContents
        .Range("P2") = Range("P2") + 1
      End With
      Sheets("Inkomsten").Cells(Rows.Count, 6).End(xlUp).Offset(1).Resize(, 15) = Array(sn(10, 8), sn(3, 17), sn(11, 8), sn(15, 9), sn(5, 8), sn(46, 11), sn(46, 13), sn(46, 16), sn(4, 17), sn(7, 17), IIf(sn(47, 11) > 0, sn(15, 16), ""), Month(sn(10, 8)), Year(sn(10, 8)))
      UserForm2.Show
   End If
End Sub

2e versie zonder aparte jaar-directory en offertegegevens in AA1:AP1

Code:
Sub PDF_Boeken_Nieuws()
   If MsgBox("Wilt u deze factuur boeken ?", 292, " ") = 6 Then
     With Sheets("Verkoopfactuur")
        .Range("F2:M59").ExportAsFixedFormat 0, "/Users/homecare/Documents/Geertje/Facturen/" & Join(Array([H11], [H5], [H10])) & ".pdf"
        .Range("H5,O15,G15:L43").ClearContents
        .Range("P2") = Range("P2") + 1
        Sheets("Inkomsten").Cells(Rows.Count, 6).End(xlUp).Offset(1).Resize(, 15).value = .range("AA1:AP1")
     end with
   End If
End Sub
 
Laatst bewerkt:
Bedankt heren, ik heb weer veel geleerd en het werkt nu zoals ik het bedoeld heb
Super, nogmaals dank:thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan