Help!

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

Hulp bij posten

Recente topics

Auteur Topic: Opslaan van excel in pdf via VBA knop  (gelezen 3052 keer)

0 leden en 1 gast bekijken dit topic.

Offline MJV

  • Lid
  • *
  • Berichten: 15
  • Geslacht: Man
  • Oplossing.be
Opslaan van excel in pdf via VBA knop
« Gepost op: 31 maart 2018, 12:50:06 »
Beste forumleden,

Ik ben nog maar een paar dagen bezig met VBA in Excel en heb er totaal geen ervaring in.
Ook niet in forums zoals deze, dus excuses als ik een en ander niet goed doe.
Mijn vraag: ik heb een Excel sheet met een knop om deze op te slaan in PDF.
De naam van de sheet moet worden overgenomen en je moet de keuze krijgen waar je de pdf wilt opslaan.
Via diverse forums en internetsites heb ik een code gevonden, die dit uitvoert.
Alleen, als je in het scherm waar je de keuze kunt maken waar je de pdf wilt opslaan op "annuleren" klikt, dan slaat hij de sheet toch op onder de naam "onwaar" en in de directory waar het Excel bestand zich bevindt.
Kan iemand mij helpen?

Alvast bedankt,

groetjes,

Hier de gebruikte code:

Sub PDFActiveSheet()
Dim wsA As Worksheet
Dim wbA As Workbook
Dim strTime As String
Dim strName As Variant
strName = Range("L3").Value
Dim strPath As String
Dim strFile As String
Dim strPathFile As String
Dim myFile As Variant
On Error GoTo errHandler

Set wbA = ActiveWorkbook
Set wsA = ActiveSheet
strTime = Format(Now(), "dd-mm-yyyy\_hh-mm")

'get active workbook folder, if saved
strPath = wbA.Path
If strPath = "" Then
  strPath = Application.DefaultFilePath
End If
strPath = strPath & "\"

'create default name for savng file
strFile = strName & "_" & strTime & ".pdf"
strPathFile = strPath & strFile

'use can enter name and
' select folder for file
myFile = Application.GetSaveAsFilename _
    (InitialFileName:=strPathFile, _
        FileFilter:="PDF Files (*.pdf), *.pdf", _
        Title:="Kies de juiste map en pas eventueel de bestandsnaam aan!")

'export to PDF if a folder was selected
If myFile <> "False" Then
    wsA.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=myFile, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
    'confirmation message with file info
    MsgBox "PDF file is opgeslagen!" _
    & vbCrLf _
    & myFile
End If

exitHandler:
    Exit Sub
errHandler:
    MsgBox "PDF file is niet opgeslagen"
    Resume exitHandler
End Sub
« Laatst bewerkt op: 31 maart 2018, 14:32:33 door SoftAid »

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 1.938
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: Opslaan van excel in pdf via VBA knop
« Reactie #1 Gepost op: 31 maart 2018, 13:27:03 »
MJV, welkom op dit forum.

Pas dit stukje code If myFile <> (enz) maar 'ns aan naar deze... (het hele blok dus vervangen!!!)
If myFile <> False Then
    wsA.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=myFile, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
    'confirmation message with file info
    MsgBox "PDF file is opgeslagen!" _
    & vbCrLf _
    & myFile
Else
    MsgBox "PDF file is niet opgeslagen"
End If
En test dan nog 'ns.

P.s. Graag altijd code tussen zogenaamde code-tags zetten. Dat doe je met het knopje met het hekje #
Dit houdt vragen beter leesbaar.
______________________________

Groet, Leo

Offline MJV

  • Lid
  • *
  • Berichten: 15
  • Geslacht: Man
  • Oplossing.be
Re: Opslaan van excel in pdf via VBA knop
« Reactie #2 Gepost op: 01 april 2018, 08:59:12 »
Beste RedHead,

Bedankt voor de snelle reactie. Het werkt perfect!

Gaf eerst nog wel een fout melding in de code die ik oorspronkelijk gebruikte, maar door lijn 11 “On ERROR GoTo errHandler” te wissen werkte het perfect.

Hartelijk dank,
Groetjes,
MJV

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 1.938
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: Opslaan van excel in pdf via VBA knop
« Reactie #3 Gepost op: 01 april 2018, 15:20:17 »
MJV, ivm deze opmerking van je...
maar door lijn 11 “On ERROR GoTo errHandler” te wissen werkte het perfect.
...heb ik aan de moderator SoftAid gevraagd om het slotje van je topic af te halen.

Ik denk namelijk dat je mijn aanpassing If myFile <> False Then nog steeds op deze manier If myFile <> "False" Then in je code hebt staan. Dus met dubbele quotes om het woord False. Dat OnError statement zou er niet uit hoeven namelijk.
______________________________

Groet, Leo

Offline MJV

  • Lid
  • *
  • Berichten: 15
  • Geslacht: Man
  • Oplossing.be
Re: Opslaan van excel in pdf via VBA knop
« Reactie #4 Gepost op: 01 april 2018, 17:00:49 »
Dag RedHead,

Ik heb mijn stukje code compleet overgeschreven met jouw stukje code, zoals je gezegd had. Als ik dan op de knop "Save" klik, dan opent VBA met de melding "Compileer fout: Naam is niet gedefinieerd" en de lijn 11 "On Error GoTo errHandler" wordt blauw gearceerd. Als ik dan op "OK" klik, dan wordt de eerste lijn "Sub PDFActive Sheet()" geel gearceerd. "If myFile <> False Then" staat wel degelijk zonder "". Maar zoals gezegd, door het verwijderen van lijn 11, werkt het perfect.
gr,
MJV



Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 1.938
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: Opslaan van excel in pdf via VBA knop
« Reactie #5 Gepost op: 01 april 2018, 21:58:45 »
Hmmm.... Ik gok dat je ergens helemaal boven aan je VBA module "Option Explicit" hebt staan? Die checkt of je alle namen hebt gedefinieerd. Zo niet, krijg je deze melding. Alleen heeft dat niets te maken met die ErrHandler. Kan je je workbook hier als bijlage plaatsen? Er is iets anders aan de hand wat ik zo niet kan achterhalen. Een Error afhandeling uitzetten is eigenlijk geen optie namelijk.
______________________________

Groet, Leo

Offline MJV

  • Lid
  • *
  • Berichten: 15
  • Geslacht: Man
  • Oplossing.be
Re: Opslaan van excel in pdf via VBA knop
« Reactie #6 Gepost op: 02 april 2018, 14:59:01 »
Dag Leo,

In bijlagen het originele bestand, zonder jouw aanpassingen!
Dus met de fout bij het annuleren opslaan.

Ik heb wel alle overbodige tabbladen gewist. Het zijn de data tabbladen om het tabblad "Inventaris producten" in te vullen.

groetjes,

Marc 

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 1.938
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: Opslaan van excel in pdf via VBA knop
« Reactie #7 Gepost op: 02 april 2018, 16:23:20 »
MJV, ik kan je foutmelding niet reproduceren. Als ik mijn aanpassing in de code doorvoer, krijg ik bij het drukken op Cancel netjes de MSGBOX melding dat het opslaan niet is gedaan. Overigens krijg ik bij het opslaan wél een chaos beeld... Het wordt 1 groot knipper festijn. Dat heb ik eerlijk gezegd nog nooit meegemaakt bij het opslaan naar PDF. Wat hieraan ten grondslag ligt kan ik helaas niet vinden. Heb jij dat ook bij jou?

Zou  je 'ns willen kijken of er ergens in 1 van de door jou verwijderde sheets bovenaan de melding "Option Explicit" staat? En zo ja, delete die regel eens.
In de bijlage jouw laatst geplaatste versie maar dan wel met mijn aanpassing...
______________________________

Groet, Leo

Offline MJV

  • Lid
  • *
  • Berichten: 15
  • Geslacht: Man
  • Oplossing.be
Re: Opslaan van excel in pdf via VBA knop
« Reactie #8 Gepost op: 03 april 2018, 08:43:49 »
Dag Leo,

Dat knipperen heb ik niet, en de verwijderde sheets bevatten geen VBA code.
Ik heb de code uit het bestand dat je mij nu terug hebt gestuurd, in de volledige Excel file geplakt, en het werkt eveneens, zonder de foutmelding die ik eerst had. Waarschijnlijk heb ik de eerste keer met het kopiëren iets fout gedaan. Ik heb nu twee werkende versies :).

groetjes

Marc

Offline Wilbert

  • Lid
  • *
  • Berichten: 37
  • Oplossing.be
Opslaan van excel in pdf via VBA knop
« Reactie #9 Gepost op: 02 april 2020, 07:44:55 »
Beste,

Ik ben op zoek naar een oplossing voor het opslaan van mijn bestand.
Onderstaande heb ik een code die voor mij goed werkt alleen de bestandsnaam klopt niet.
Als ik nu op de knop opslaan druk zet hij automatisch als naam de datum neer  strTime = Format(Now(), "dd-mm-yyyy\_hh-mm")
Ik zou als voorstel voor de bestandsnaam graag een verwijzing naar een cel maken.
Hoe moet ik deze toevoegen aan onderstaande macro?

Alvast bedankt voor jullie reactie
 



Sub PDFActiveSheet()
Dim wsA As Worksheet
Dim wbA As Workbook
Dim strTime As String
Dim strName As Variant
strName = Range("L3").Value
Dim strPath As String
Dim strFile As String
Dim strPathFile As String
Dim myFile As Variant
On Error GoTo errHandler

Set wbA = ActiveWorkbook
Set wsA = ActiveSheet
strTime = Format(Now(), "dd-mm-yyyy\_hh-mm")

'get active workbook folder, if saved
strPath = wbA.Path
If strPath = "" Then
  strPath = Application.DefaultFilePath
End If
strPath = strPath & "\"

'create default name for savng file
strFile = strName & "_" & strTime & ".pdf"
strPathFile = strPath & strFile

'use can enter name and
' select folder for file
myFile = Application.GetSaveAsFilename _
    (InitialFileName:=strPathFile, _
        FileFilter:="PDF Files (*.pdf), *.pdf", _
        Title:="Kies de juiste map en pas eventueel de bestandsnaam aan!")

'export to PDF if a folder was selected
If myFile <> False Then
    wsA.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=myFile, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
    'confirmation message with file info
    MsgBox "PDF file is opgeslagen!" _
    & vbCrLf _
    & myFile
Else
    MsgBox "PDF file is niet opgeslagen"
End If


exitHandler:
    Exit Sub
errHandler:
    MsgBox "PDF file is niet opgeslagen"
    Resume exitHandler
End Sub

Offline Digicafé

  • Excel-Expert
  • Volledig lid
  • *****
  • Berichten: 131
  • Geslacht: Man
  • DigiCafé expert
Re: Opslaan van excel in pdf via VBA knop
« Reactie #10 Gepost op: 02 april 2020, 08:17:06 »
Dat kan je makkelijk door de zin :

strTime = Format(Now(), "dd-mm-yyyy\_hh-mm")
te vervangen door  :
strTime = activesheet.cells(x,y).text


waarbij je x en y natuurlijk vervangt door de correcte manier van verwijzen naar jouw cel ...
vriendelijke groeten,
antwoord niet voldoende ? vraag gerust verder ...

Philip

 


www.combell.com