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

Code

  • Onderwerp starter Onderwerp starter thst
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

thst

Gebruiker
Lid geworden
10 apr 2001
Berichten
655
Hallo Allemaal,

Ik heb 3 regels if then else toegevoegd, en krijg nu dat die een end sub mist, en dan weer een end with, ik heb vanalles al geprobeerd, maar niet werken.

Angela


Code:
Sub opslaan_en_mailen()


'If MsgBox("Loes weet je zeker dat de factuur goed is ?", vbQuestion + vbYesNo) = vbYes Then
'If lAnswer = vbYes Then Hoort bij MsgBox Loes....

'End If Hoort bij MsgBox Loes ....
'Author : Ken Puls (www.excelguru.ca)
'Macro Purpose: Print to PDF file using PDFCreator
' (Download from http://sourceforge.net/projects/pdfcreator/)
' Designed for late bind, no references req'd

Dim pdfjob As Object
Dim sPDFName As String
Dim sPDFPath As String

MyName = Range("P29").Value & ""
'/// Change the output file name here! ///
sPDFName = MyName & ".xls"
'"testPDF.pdf"
sPDFPath = "E:\A2B4U\Opdrachten\2010\New\"
'ActiveWorkbook.Path & Application.PathSeparator

'Check if worksheet is empty and exit if so
If IsEmpty(ActiveSheet.UsedRange) Then Exit Sub

Set pdfjob = CreateObject("PDFCreator.clsPDFCreator")

With pdfjob
If .cStart("/NoProcessingAtStartup") = False Then
MsgBox "Can't initialize PDFCreator.", vbCritical + _
vbOKOnly, "PrtPDFCreator"
Exit Sub
End If
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
.cOption("AutosaveDirectory") = sPDFPath
.cOption("AutosaveFilename") = sPDFName
.cOption("AutosaveFormat") = 0 ' 0 = PDF
.cClearCache
End With

'Print the document to PDF
ActiveSheet.PrintOut Copies:=1, ActivePrinter:="PDFCreator"

'Wait until the print job has entered the print queue
Do Until pdfjob.cCountOfPrintjobs = 1
DoEvents
Loop
pdfjob.cPrinterStop = False

'Wait until PDF creator is finished then release the objects
Do Until pdfjob.cCountOfPrintjobs = 0
DoEvents
Loop
pdfjob.cClose
Set pdfjob = Nothing
If MsgBox("Factuur mailen ?", vbQuestion + vbYesNo) = vbYes Then
'versturen van pdf via mail
Set App = CreateObject("Outlook.Application")
Set Itm = App.CreateItem(0)

With Itm
'.Subject = "Bijgaand de factuur, en bevestiging aflevering."
.Subject = "Betreft rit: " & Range("O33").Value 'Plaats - Plaats
.To = Range("O32").Value & "" 'vul hier een mail adres in
.CC = ""
.Bcc = ""
'.Body = Range("P31").Value & Range("O31").Value & vbNewLine & vbNewLine & Range("P32").Value & vbNewLine & Range("P33").Value & vbNewLine & vbNewLine & Range("P34").Value & vbNewLine & Range("P35").Value & vbNewLine & vbNewLine & Range("P36").Value & vbNewLine & Range("P37").Value & vbNewLine & Range("P38").Value & vbNewLine & vbNewLine & Range("P39").Value & vbNewLine & Range("P40").Value
.Body = Replace([P31] & [O31] & "#" & "#" & [P32] & "#" & [P33] & "#" & "#" & [P34] & "#" & [P35] & "#" & "#" & _
                [P36] & "#" & [P37] & "#" & [P38] & "#" & "#" & [P39] & "#" & [P40], "#", vbNewLine)
'[ad1].CurrentRegion.ClearContents

    fn = Dir("E:\A2B4U\Opdrachten\2010\*.pdf")
    Do While fn <> ""
        myResult = myResult & fn & "|"
        fn = Dir()
     Loop
    [ad1].Resize(UBound(Split(myResult, "|"))) = WorksheetFunction.Transpose(Split(myResult, "|"))

.Attachments.Add sPDFPath & "\" & Replace(sPDFName, "xls", "pdf") 'Factuur word gemaild. (0123456789.pdf)
sPDFPath = "E:\A2B4U\Opdrachten\2010\"
 If Range("034") = 1 Then
 .Attachments.Add sPDFPath & "\" & (Range("O35").Value) 'Vrachtbrief word gemaild. (0123456789v.pdf)
Else
 If Range("036") = 1 Then
 .Attachments.Add sPDFPath & "\" & (Range("O37").Value) 'Vrachtbrief word gemaild. (0123456789b.pdf)
Else
 If Range("038") = 1 Then
 .Attachments.Add sPDFPath & "\" & (Range("O39").Value) 'Vrachtbrief word gemaild. (0123456789p.pdf)
Else

'.Attachments.Add sPDFPath & "\" & (Range("O29").Value) 'Vrachtbrief word gemaild. (0123456789v.pdf)

.Display
'.Save
'.Send

End With
Else
Worksheets(6).Cells(11, 16) = 0
Application.Calculate
ActiveSheet.PrintOut Copies:=1, ActivePrinter:="HP LaserJet 4100 PCL 6"
Worksheets(6).Cells(11, 16) = 1
Application.Calculate
End If
'End If Hoort bij MsgBox Loes ....
End Sub
 
Heb ik ook al geprobeerd. Het is om te huilen, krijg het maar niet voor elkaar, en alleen omdat ik if then else heb toegevoegd, voorheen werkte de code perfect.

Angela
 
Het is om te huilen

Dat kan ik niet ontkennen.

Ik zou teruggaan naar een eerdere versie van de code (die werkte), en opnieuw proberen.

Als je de code uitlijnt met de Smart Indenter, en je ziet het daarna nog niet, dan mis je basiskennis VBA en is een cursus op internet of een goed boek onvermijdelijk. Excuses als ik cru overkom, maar met meer dan 350 posts op een Excel forum en dan geen If-Then-Else werkend te krijgen... Foutopsporing is daarbij ook opgenomen in VBA, tevens kleurt de regel met een probleem geel!

Naar de toekomst toe: werk meer met procedures, die aangesproken worden door 1 centrale procedure. 1 procedure voor PDF-logica, 1 voor mail-logica, 1 voor het printen, enz. Zo raak je het overzicht niet kwijt wat nu jammer genoeg wel het geval is. Houd ook dezelfde stijl aan van programmeren: door codes van op allerlei fora te kopiëren en te plakken, is consistentie zoek. Simpel voorbeeld: de ene keer Range("P29").Value, de andere keer dan weer [P31].

Wigi
 
Laatst bewerkt:
Over de vraag:

Code:
                [SIZE="5"][B]If[/B][/SIZE] Range("036") = 1 Then
                    .Attachments.Add sPDFPath & "\" & (Range("O37").Value)    'Vrachtbrief word gemaild. (0123456789b.pdf)
                [SIZE="5"][B]Else[/B][/SIZE]
                    [COLOR="Red"][SIZE="5"][U]If[/U][/SIZE][/COLOR] Range("038") = 1 Then
                        .Attachments.Add sPDFPath & "\" & (Range("O39").Value)    'Vrachtbrief word gemaild. (0123456789p.pdf)
                    [COLOR="Red"][SIZE="5"][U]Else[/U][/SIZE][/COLOR]

                        '.Attachments.Add sPDFPath & "\" & (Range("O29").Value) 'Vrachtbrief word gemaild. (0123456789v.pdf)

                        .Display
                        '.Save
                        '.Send

                    [COLOR="Red"][SIZE="5"][U]End With[/U][/SIZE][/COLOR]
                [SIZE="5"][B]Else[/B][/SIZE]
                    Worksheets(6).Cells(11, 16) = 0
                    Application.Calculate
                    ActiveSheet.PrintOut Copies:=1, ActivePrinter:="HP LaserJet 4100 PCL 6"
                    Worksheets(6).Cells(11, 16) = 1
                    Application.Calculate
                [SIZE="5"][B]End If[/B][/SIZE]

Op zijn minst heb je een ElseIf nodig. En het gedeelte in rood zondigt ook tegen de regels van foutloos programmeren.

Wigi
 
Laatst bewerkt:
Hallo allemaal,

Erg slecht geslapen, maar heb de eerste fout al ontdekt bij de 3 if-then 034, 036 en 038 staat een 0 i.p.v. een o, ga nog het een en ander proberen, hulp is altijd welkom, ik moet er mijn administratie nog mee doen, en als het niet werkt kan ik niet veel.

Angela
 
Beste Excellers,

Hieronder is een stukje code, ik zal even uitleggen wat die doet; tussen Do en Loop zoekt die alle *.pdf bestanden en plaatst de namen in kolom AD met een formule ga ik zoeken naar o35 of het bestand bestaat en zo ja, wordt o34 1 dan moet de bijlage o35 meegestuurd worden.in dit geval vrachtbrief. en dit werkt.
Maar bij de 2e if-then als o36 is 1 , en ook bij de 3e if-then als o38 is 1 dus de bestanden bestaan stuurt die het niet mee als bijlage. Wat is hier aan de hand.
Overigings krijg ik geen foutmeldingen meer.

Angela

Code:
[ad1].CurrentRegion.ClearContents

    fn = Dir("E:\A2B4U\Opdrachten\2010\*.pdf")
    Do While fn <> ""
        myResult = myResult & fn & "|"
        fn = Dir()
     Loop
    [ad1].Resize(UBound(Split(myResult, "|"))) = WorksheetFunction.Transpose(Split(myResult, "|"))
Application.Calculate
.Attachments.Add sPDFPath & "\" & Replace(sPDFName, "xls", "pdf") 'Factuur word gemaild. (0123456789.pdf)
sPDFPath = "E:\A2B4U\Opdrachten\2010\"
If Range("o34") = "1" Then
 .Attachments.Add sPDFPath & "\" & (Range("o35").Value) 'Vrachtbrief word gemaild. (0123456789v.pdf)
sPDFPath = "E:\A2B4U\Opdrachten\2010\"
ElseIf Range("o36") = "1" Then
 .Attachments.Add sPDFPath & "\" & (Range("o37").Value) 'Bevestiging word gemaild. (0123456789b.pdf)
sPDFPath = "E:\A2B4U\Opdrachten\2010\"
ElseIf Range("o38") = "1" Then
 .Attachments.Add sPDFPath & "\" & (Range("o39").Value) 'Pakbon word gemaild. (0123456789p.pdf)
Else
 
Laatst bewerkt:
Ik mis een
Code:
End If
Als je van die "ElseIf" nu ook eens "If" van maakt?
Dan moet er natuurlijk wel 3x "End If" staan.
 
Dat was het heel hartelijk bedankt, kan nu mijn administratie gaan doen.

Angela
 
Dat was het heel hartelijk bedankt, kan nu mijn administratie gaan doen.

Was het de "End If" of de 3x "If" + 3x "End If"?

Heeft een ander ook wat aan je informatie als die ongeveer het zelfde probleem heeft.
 
Beste Wim,

het laatste dus 3x "If" + 3x "End "If"

Dank je

Angela
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan