Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: Afdrukbereik EXCEL opslaan als PDF in zelfde map  (gelezen 556 keer)

0 leden en 1 gast bekijken dit topic.

Offline jannacy

  • Lid
  • *
  • Berichten: 52
  • Geslacht: Vrouw
  • Oplossing.be
Afdrukbereik EXCEL opslaan als PDF in zelfde map
« Gepost op: 21 januari 2021, 11:51:05 »
Ik heb een vereenvoudigde inventaris opgesteld in excel en wil deze graag op datum exporteren naar pdf
in dezelfde map als daar waar de excel in staat.
Naam==> INV_ waarde van cel E3

Op een of andere manier lukt het niet met onderstaande code.   
Kan iemand helpen?  Alvast bedankt

Sub Opslaan_als_PDF()

Bestandsnaam = "INV_" & Range("e3").Value & ".pdf"

If Dir(ThisWorkbook.Path & Bestandsnaam) <> "" Then
     antwoord = MsgBox("Het bestand " & Bestandsnaam & "bestaat reeds.  Wil je dit vervangen?", vbYesNo)
        If antwoord = vbYes Then
            ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Bestandsnaam & ".pdf", Quality:=xlQualityStandard, _
            IncludeDocProperties:=False, IgnorePrintAreas:=False, From:=1, to:=1, OpenAfterPublish:=False
        Else
           ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Bestandsnaam & ".pdf", Quality:=xlQualityStandard, _
           IncludeDocProperties:=False, IgnorePrintAreas:=False, From:=1, to:=1, OpenAfterPublish:=False
        End If
End If

End Sub

Offline pitufo

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 1.319
  • Geslacht: Man
Re: Afdrukbereik EXCEL opslaan als PDF in zelfde map
« Reactie #1 Gepost op: 21 januari 2021, 12:23:01 »
Hallo jannacy,

Je macrodenkwijze zit goed fout  0:-)
Alles na de eerste IF wordt enkel uitgevoerd als het bestand al bestaat. Als het niet bestaat zal er bijgevolg nooit iets gebeuren...
Pas als het wel bestaat dien je de vraag te krijgen of je wil overschrijven, dat staat dus wel correct in je code. Maar vervolgens zie ik zowel bij JA als bij NEE exact dezelfde code staan.
Mijn idee? Als je dat nog eens goed doordenkt kom je er waarschijnlijk zelf uit. Dat zeg ik niet uit luiheid, maar uit de overtuiging dat je er op die manier het beste van leert.
Een foutje dat ik vaak zie passeren: er ontbreekt nog een "\" in je DIR-parameter; die kan je ofwel daar tussen zetten ofwel vooraan je bestandsnaam toevoegen.
Succes !

En als het toch niet lukt: één adres  :)

Groeten,
pitufo
"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

Offline jannacy

  • Lid
  • *
  • Berichten: 52
  • Geslacht: Vrouw
  • Oplossing.be
Re: Afdrukbereik EXCEL opslaan als PDF in zelfde map
« Reactie #2 Gepost op: 24 januari 2021, 16:08:14 »
Hoi Pitufo,

Je macrodenkwijze zit goed fout  0:-)
Alles na de eerste IF wordt enkel uitgevoerd als het bestand al bestaat. Als het niet bestaat zal er bijgevolg nooit iets gebeuren...
Pas als het wel bestaat dien je de vraag te krijgen of je wil overschrijven, dat staat dus wel correct in je code. Maar vervolgens zie ik zowel bij JA als bij NEE exact dezelfde code staan.
Een foutje dat ik vaak zie passeren: er ontbreekt nog een "\" in je DIR-parameter; die kan je ofwel daar tussen zetten ofwel vooraan je bestandsnaam toevoegen.

Ik zat inderdaad goed fout.  Te snel willen zijn.

Ik heb er nog eens even aan gewerkt.

In bijlage het bestand
De macro Opslaan werkt wel maar kan niet vervangen of annuleren.
De macro OpslaanPDF doet alleen wat hij moet doen als het bestand al bestaat maar doet niets als het nog niet bestaat.

Hieronder de code van de macro OpslaanPDF

Sub OpslaanPDF()

Dim Plaats As String
Dim Nm As String

Plaats = ThisWorkbook.Path & "\"
Nm = "INV_" & ActiveSheet.Range("E3").Value & ".pdf"

If Dir(Plaats & Nm) <> "" Then
Antwoord = MsgBox("Het bestand: " & Nm & ".pdf bestaat reeds.  Vervangen?", vbOKCancel, "Opletten!")
    If Antwoord = vbOK Then
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Plaats & Nm, Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, From:=1, To:=2, OpenAfterPublish:=True
    Else
        MsgBox "Controleer de datum."
        Exit Sub
    End If
End If

End Sub

Offline pitufo

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 1.319
  • Geslacht: Man
Re: Afdrukbereik EXCEL opslaan als PDF in zelfde map
« Reactie #3 Gepost op: 24 januari 2021, 17:45:18 »
Hallo jannacy,

Je hebt echt maar één stukje code nodig, hoor  ;)
Zoals altijd kan je het op verschillende manieren correct schrijven. Hier heb je er eentje waarmee het goed moet gaan:
Sub OplaanPDF()

Plaats = ThisWorkbook.Path & "\"
Nm = "INV_" & Format(Range("E3"), "yyyymmdd") & ".pdf"
opslaan = True
If Dir(Plaats & Nm) <> "" Then
     If MsgBox("Het bestand: " & Nm & " bestaat reeds.  Vervangen?", vbYesNo) = vbNo Then opslaan = False
End If
If opslaan = True Then
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Plaats & Nm, Quality:=xlQualityStandard, _
    IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish:=False
End If

End Sub

Groeten,
pitufo
"De computer doet wel degelijk wat je hem vraagt,
 maar NIET wat je DENKT dat je hem vraagt"

Offline Warme bakkertje

  • Lid
  • *
  • Berichten: 95
  • Geslacht: Man
Re: Afdrukbereik EXCEL opslaan als PDF in zelfde map
« Reactie #4 Gepost op: 24 januari 2021, 17:49:57 »
Had 'm ook juist klaar dus post ik 'm maar. :)

Sub OpslaanPDF()

Dim Plaats As String, Nm As String

Plaats = ThisWorkbook.Path & "\"
Nm = "INV_" & ActiveSheet.Range("E3").Value

If Dir(Plaats & Nm & ".pdf") = "" Then
    ActiveSheet.ExportAsFixedFormat 0, Plaats & Nm
Else
    If MsgBox("Het bestand: " & Nm & ".pdf bestaat reeds.  Vervangen?", vbOKCancel, "Opletten!") = vbOK Then
        ActiveSheet.ExportAsFixedFormat 0, Plaats & Nm
    Else
        MsgBox "Controleer de datum."
        Exit Sub
    End If
End If

End Sub
Windows 10 Home   NLD 64bit

Microsoft Office Professional Plus 2016 US

Offline jannacy

  • Lid
  • *
  • Berichten: 52
  • Geslacht: Vrouw
  • Oplossing.be
Re: Afdrukbereik EXCEL opslaan als PDF in zelfde map
« Reactie #5 Gepost op: 25 januari 2021, 10:04:01 »
Ik heb nog niet getest maar alvast bedankt voor de hulp. _/-\o_ 

Ik zat me nu, met mijn gsm in de hand, af te vragen waarom die Dim regels bovenaan een code staan.  Mij lijken deze toch niet nodig of zie ik dat verkeerd?  Wat is de meerwaarde. 

Offline Warme bakkertje

  • Lid
  • *
  • Berichten: 95
  • Geslacht: Man
Re: Afdrukbereik EXCEL opslaan als PDF in zelfde map
« Reactie #6 Gepost op: 25 januari 2021, 10:49:34 »
Er zijn er die het declareren van variabelen aanbidden als een godheid, anderen vinden het minder belangrijk (zoals ikzelf).

Als je een variabele niet vooraf declareert dan zal VBA automatisch de eigenschap Variant toekennen.

Dit vraagt meer geheugen dan wanneer je hem een specifieke eigenschap toekent en soms kan het wel eens verkeerd uitdraaien want in dit geval

doet XL zelf een gooi naar wat het zou kunnen zijn aan de hand van de gebruikte code.

In vroegere tijden wanneer geheugen nog schaars was kon het wel belangrijk zijn, dit  om zoveel mogelijk geheugen te sparen.

Nu met de toegenomen mogelijkheden qua geheugen is dit minder belangrijk geworden.

Er zijn enkele specifieke gevallen waarbij het wel degelijk echt nodig is om aan te geven waar een bepaalde variabele voor staat maar deze komen

niet zo vaak voor

Windows 10 Home   NLD 64bit

Microsoft Office Professional Plus 2016 US

Offline jannacy

  • Lid
  • *
  • Berichten: 52
  • Geslacht: Vrouw
  • Oplossing.be
Re: Afdrukbereik EXCEL opslaan als PDF in zelfde map
« Reactie #7 Gepost op: 25 januari 2021, 19:27:11 »
Ok Pitufo en Warme bakkertje, heel erg bedankt voor de hulp.

ik heb jullie codes getest en heb van allebei iets genomen (om de kerk in't midden te houden  :D - grapje)
Ik heb er ook een Active-X besturingselement van gemaakt.  Dit is gemakkelijker om wat met kleurtjes te werken in een knop.
Hieronder vind je de werkende code.

Om mijn vraag netjes af te sluiten heb ik het definitief bestand in bijlage gezet. 

Private Sub OpslaanPDF_Click()

'https://www.oplossing.be/excel/afdrukbereik-excel-opslaan-als-pdf-in-zelfde-map/

Dim Plaats As String, Nm As String

Plaats = ThisWorkbook.Path & "\"
Nm = "INV_" & Format(Range("b7"), "yyyymmdd") & ".pdf"

If Dir(Plaats & Nm) = "" Then
    ActiveSheet.ExportAsFixedFormat 0, Plaats & Nm
    MsgBox "Het bestand is succesvol opgeslagen"
Else
    If MsgBox("Het bestand: " & Nm & " bestaat reeds.  Vervangen?", vbOKCancel, "Opletten!") = vbOK Then
        ActiveSheet.ExportAsFixedFormat 0, Plaats & Nm
        MsgBox "Het bestand is succesvol vervangen"
    Else
        MsgBox "Controleer de datum."
        Exit Sub
    End If
End If

End Sub

 


www.combell.com