VBA code werkt niet?

nielsf91

Gebruiker
Lid geworden
21 nov 2023
Berichten
8
Hallo,

Ik probeer om in excel het volgende voor elkaar te krijgen:
Ik wil bereik A1 tot O34 passend exporteren op bladzijde 1 van een pdf bestand.

Op bladzijde 2 wil ik bereik O1 tot AG54 inclusief de grafiek hebben op bladzijde 2 van een pdf bestand.


PDF bestand mag liggend, en de bereiken mogen passend (het liefst gecentreerd) afgedrukt worden.

Ik heb een VBA code aan knop 2 toegevoegd maar die laat alleen de grafiek afdrukken en neemt het bereik A1 tot O34
niet mee:

Code:
Sub Knop2_Klikken()
    ' Roep de exporteerfunctie aan
    Call ExportToPDF
End Sub
Sub ExportToPDF()
    Dim ws As Worksheet
    Dim pdfPath As String
    Dim tempSheet As Worksheet
    
    ' Vraag de gebruiker om een opslaglocatie
    pdfPath = Application.GetSaveAsFilename(FileFilter:="PDF bestanden (*.pdf), *.pdf")
    If pdfPath = "False" Then Exit Sub ' Annuleer als gebruiker niets kiest
    
    ' Verwijs naar het actieve werkblad
    Set ws = ThisWorkbook.ActiveSheet
    
    ' Tijdelijke sheet maken
    Set tempSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    
    ' Configureer pagina-instellingen
    With tempSheet.PageSetup
        .Orientation = xlLandscape
        .Zoom = False ' Schakel handmatige schaal uit
        .FitToPagesWide = 1
        .FitToPagesTall = 1
    End With
    
    ' Bereik 1 (A1:O35) kopiëren en exporteren
    tempSheet.Cells.Clear ' Zorg dat de sheet leeg is
    ws.Range("A1:O35").Copy
    tempSheet.Paste Destination:=tempSheet.Range("A1") ' Plak op de tijdelijke sheet
    Application.CutCopyMode = False ' Schakel kopieermodus uit
    
    tempSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfPath, _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=False, From:=1, To:=1
    
    ' Bereik 2 (P1:AG54) kopiëren en exporteren
    tempSheet.Cells.Clear ' Leeg de sheet voor het tweede bereik
    ws.Range("O1:AH54").Copy
    tempSheet.Paste Destination:=tempSheet.Range("A1") ' Plak op de tijdelijke sheet
    Application.CutCopyMode = False ' Schakel kopieermodus uit
    
    tempSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfPath, _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=True
    
    ' Tijdelijke sheet verwijderen
    Application.DisplayAlerts = False
    tempSheet.Delete
    Application.DisplayAlerts = True
    
    MsgBox "PDF succesvol opgeslagen als: " & pdfPath, vbInformation
End Sub

Wat doe ik hier fout?
 
Wat is het resultaat van:

Code:
Sub M_snb()
    Range("A1:O34").exportasfixedformat 0,"G:\OF\voorbeeld.pdf"
End sub
 
Ik moet de bestanden veelal mailen en dan is 1 bijlage makkelijker dan 2. Vandaar dat ik ze het liefst samen in één bestand heb.
 
Plaats je bestand in plaats van alleen de code.
 
Je tweede bereik (O1:AH54) overlapt deels je eerste bereik (A1:O35), is dat de bedoeling?
En je comment klopt niet met je code, klopt dat?
Code:
 ' Bereik 2 (P1:AG54) kopiëren en exporteren
    tempSheet.Cells.Clear ' Leeg de sheet voor het tweede bereik
    ws.Range("O1:AH54").Copy
Kun je niet beide bereiken naar naar je temp werkblad kopiëren en dan pas exporteren naar PDF?
 
Zoiets dus:
Code:
Sub ExportToPDF()
    Dim ws        As Worksheet
    Dim pdfPath   As String
    Dim tempSheet As Worksheet
    
    ' Vraag de gebruiker om een opslaglocatie
    pdfPath = Application.GetSaveAsFilename(FileFilter:="PDF bestanden (*.pdf), *.pdf")
    If pdfPath = "False" Then Exit Sub ' Annuleer als gebruiker niets kiest
    Set ws = ThisWorkbook.ActiveSheet
    
    ' Tijdelijke sheet maken
    Set tempSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    
    ' Bereik 1 kopiëren
    ws.Range("A1:O34").Copy tempSheet.Range("A1")
    
    ' Bereik 2 kopiëren
    ws.Range("P1:AH54").Copy tempSheet.Range("A36")
    Application.CutCopyMode = False ' Schakel kopieermodus uit
    
    With tempSheet
        .HPageBreaks.Add Before:=tempSheet.Rows(36)
        With .PageSetup
            .Orientation = xlLandscape
            .PaperSize = xlPaperA4
            .Zoom = False
            .FitToPagesWide = 1
            .FitToPagesTall = False
            .printArea = tempSheet.UsedRange.Address
        End With
        .ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfPath, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
        ' Tijdelijke sheet verwijderen
        Application.DisplayAlerts = False
        .Delete
        Application.DisplayAlerts = True
    End With
    MsgBox "PDF succesvol opgeslagen als: " & pdfPath, vbInformation
End Sub
 
Dit komt al aardig in de buurt Ahulpje :)

Nog twee dingen die niet helemaal kloppen:

- Het bestand is nu 3 pagina's, dit komt denk ik door de onderste blauwe lijn in mijn bestand. Ik weet niet of het mogelijk is om het bestand passend op twee pagina's te krijgen, anders moet ik de range iets aanpassen, wat op zich ook niet erg zal zijn.

- Belangrijker: In het pdf bestand staat een minimale capaciteit van 0.00 m3/h en een max van 0.00 m3/h. In mijn excelbestand staat 4.6 m3/h en 24.4 m3/h. Deze komen uit een berekening en de uitkomst van die berekening staat in een verborgen cel (P74 en P91). Ik weet niet waar dit fout gaat, maar kunnen deze waarden er juist in komen te staan?
 

Bijlagen

Terug
Bovenaan Onderaan