Afdruk bereik aan VBA toevoegen.

Status
Niet open voor verdere reacties.

Robert09

Gebruiker
Lid geworden
6 dec 2012
Berichten
34
Hallo,

Ik heb een probleempje met mijn VBA-code.
Deze code word gebruikt bij een Excel bestand waar garantie formulieren worden ingevuld.

Hierbij zijn bepaalde cellen verplicht, en wordt het compleet ingevulde formulier opgeslagen als PDF.
Bij het opnieuw openen van het formulier worden wordt het garantie nummer met 1 verhoogd en de overige cellen leeggemaakt.

Dit gaat bij de meeste computers prima, echter bij enkele PC's waar als standaard printer een label printer staat ingesteld gaat het helemaal mis..
Nu word het PDF bestand wel in 1 pdf bestand opgeslagen maar worden er 9 pagina weergegeven.

Graag wil ik ook dat bij een andere type printers de complete pagina wordt weergegeven als 1 geheel en niet in 9 delen.

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim cl As Range
For Each cl In Sheets(1).Range("B5,D3,B14,G6,G7,G8,G9,G10,G14,G18,B27,C27,F27,H27,I33,I34,I35,I36,G38,G40")
    If cl.Value = Empty Then
        MsgBox "Cel " & cl.Address(False, False) & " is niet gevuld.", vbCritical, "Opslaan afgebroken"
        Cancel = True: Exit Sub
    End If
Next
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="P:\Aanvraag garantie\ " & Range("D3") & ".pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
        :=False, OpenAfterPublish:=False 'Dit zorgt er ervoor dat er een PDF bestand wordt aangemaakt.
       
        
        End Sub
    
Private Sub Workbook_Open()
Dim c1 As Range
For Each c1 In Range("B5,B14,B21,B28,B29,B30,B31,C28,C29,C30,C31,G5,G6,G7,G8,G9,G10,G11,G14,G15,G16,G17,G18,G21,G22,G23,G24,B27,C27,F27,F28,F29,F30,F31,H27,H28,H29,H30,H31,I33,I34,I35,I36,G38,G39,G40")
     c1 = "" 'Deze regel zorgt er voor dat de verplichte cellen worden geleegd.
Next
 Sheets("Blad1").Range("D3") = Sheets("Blad1").Range("D3") + 1
End Sub

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim cl As Range
For Each cl In Sheets(1).Range("B5,D3,B14,G6,G7,G8,G9,G10,G14,G18,B27,C27,F27,H27,I33,I34,I35,I36,G38,G40")
If cl.Value = Empty Then
MsgBox "Cel " & cl.Address(False, False) & " is niet gevuld.", vbCritical, "Printen afgebroken"
Cancel = True 'Deze regel zorgt voor het daadwerkelijk afbreken van het printen
Exit For
End If
Next
End Sub

Bovenstaand is de code die ik tot nu toe altijd gebruikt heb.

Bekijk bijlage Garantie-formulier-voorbeeld.xlsm

Graag hoor ik van jullie hoe dit eventueel op te lossen is zonder een ander standaard printer in te stellen.
 
Laatst bewerkt:
Hallo Robert09,

Helpt het als je je print functie aanpast naar:
Code:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim cl As Range

'Printbereik instellen
ActiveSheet.PageSetup.PrintArea = "$A$1:$J$43"

For Each cl In Sheets(1).Range("B5,D3,B14,G6,G7,G8,G9,G10,G14,B27,C27,F27,H27,I33,I34,I35,I36,G38,G40")
    If cl.Value = Empty Then
        MsgBox "Cel " & cl.Address(False, False) & " is niet gevuld.", vbCritical, "Printen afgebroken"
        Cancel = True 'Deze regel zorgt voor het daadwerkelijk afbreken van het printen
        Exit For
    End If
Next

End Sub

Misschien moet je ook even kijken dmv 'macro opnemen' en diverse printinstellingen maken die je nodig hebt om op die specifieke printer wél netjes op 1 pagina te krijgen. Waarschijnlijk zal dit voor je 'normale' printer niet uitmaken, anders kun je altijd nog een IF er in gooien om het verschil tussen de ene en de andere printer verschillende opties mee te geven.

Werkt dat?
 
Hallo Longpants,

Bedankt voor je reactie.

Ik heb de code aangepast en bewerkt, helaas zonder resultaat.
Ik wil eigenlijk geen specifieke printers instellen met als reden dat er per afdeling printers zijn met verschillende benamingen.

Wanneer ik het garantie formulier opsla krijg ik nog steeds het PDF bestand verknipt naar label formaat.

Weet u toevallig of er nog andere mogelijkheden zijn om dit probleem te tackelen?
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan