VBA Printknop met document selectie

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

sep33

Gebruiker
Lid geworden
21 mrt 2013
Berichten
16
Hallo,

Ik zou graag een (print)lijst maken met alle zichtbare tabbladen. In deze lijst kan men dan selecteren welk tabblad er moet afgedrukt worden.
Deze vraag is al eens behandeld in volgende link:

http://www.helpmij.nl/forum/showthread.php/401488-VBA-Printknop-met-document-selectie

Toch is mijn geval iets(je) anders. Ik zou namelijk niet alleen "Sheets" willen afdrukken, maar ook nog "Charts".
Onderstaande code heb ik daarom een beetje aangepast en dit werkt ook. Nu worden zowel de Charts als de Sheets in de lijst weergegeven.

Code:
Private Sub UserForm_Initialize()
Dim sh As Worksheet
Dim ch As Chart

With LstPrint
    .Clear
    For Each sh In Worksheets
    If sh.Name = "Sheet1" Or sh.Name = "Sheet2" Or sh.Name = "Sheet3" Then
        .AddItem sh.Name
    End If
        Next
        For Each ch In Charts
    If ch.Name = "Chart1" Or ch.Name =  "Chart2" Then
        .AddItem ch.Name
    End If
Next
    End With
End Sub

Toch heb ik bij het rode gedeelte in onderstaande code een foutmelding. Ik heb namelijk nog niet gezegd dat de Charts ook uitgeprint moeten worden.
Misschien is er een 'eenvoudige' oplossing voor(?), maar aangezien mijn vba kennis vrij beperkt is geraak ik er maar niet uit.

Code:
Private Sub CmdPrint_Click()
mededeling = MsgBox("U gaat nu het zichtbare formulier afdrukken.", vbOKCancel, "Printen")
If mededeling = vbOK Then
    For x = 0 To LstPrint.ListCount + 1
      [COLOR="#FF0000"]  [B]If LstPrint.Selected(x) = True Then Worksheets(LstPrint.List(x)).PrintOut Copies:=1, Collate:=True[/B][/COLOR]
    Next
End If
End Sub

Kan er iemand misschien helpen?

Bij voorbaat hartelijk bedankt!

mvg,

Seppe
 
Denk ik nou te makkelijk als ik zeg dat dit volstaat?
Code:
Private Sub CmdPrint_Click()
    If MsgBox("U gaat nu het tabblad afdrukken", vbOKCancel, "Afdrukken") = vbOK Then
        Sheets(LstPrint).PrintOut
    Else
        MsgBox "Tabblad niet gevonden", vbInformation, "Fout"
    End If
End Sub
 
Laatst bewerkt:
Hey spaarie,

Bedankt voor de reactie.
Bij uw code geeft hij een foutmelding bij het gedeelte
Code:
Sheets (LstPrint.value).PrintOut

De eerste code werkt perfect als er alleen gewerkt wordt met Sheets, alleen als er ook nog met Charts als tabblad wordt gewerkt, doet hij het nog niet.
Indien je liever een voorbeeldbestand hebt(?), maak ik er één aan.

Mvg,

Seppe
 
Een voorbeeldbestand zou geweldig zijn en wil je geen u zeggen :cool:
 
Oke :)

Hier is het voorbeeld bestandjeBekijk bijlage afdrukken Charts.xlsm

Indien er op de knop gedrukt wordt, zullen allen actieve tabbladen weergegeven worden. Die je dan kan aanvinken om te printen.
Alleen de Charts afdrukken lukt dus nog niet.

mvg,

Seppe
 
En zo dan?
Code:
Private Sub UserForm_Initialize()
    With LstPrint
        .Clear
        For Each blad In Sheets
            If blad.Visible = True Then
                .AddItem blad.Name
            End If
        Next
    End With
End Sub
 
Laatst bewerkt:
Nope, bij mij geeft hij een foutmelding: run-time error '424' object required
 
Bedankt je reactie maar, voor zover ik probeer gaat alles in jouw bestand goed als er alleen maar "Sheets" worden geselecteerd. Het loopt pas fout als er in de printlijst gekozen wordt voor de "Charts".

Of lukt dit bij jou wel? Het zou me verwonderen aangezien er staat
Code:
If LstPrint.Selected(x) = True Then Worksheets(LstPrint.List(x)).PrintOut
Volgens mij kan dit dan ook niet gaan bij Charts, aangezien het ook niet in de code staat, of ben ik fout?


mvg,

Seppe
 
Een Chart is ook een Sheet en niet Worksheet...
Dit werkt bij mij wel voor zowel Sheets als Charts...
Code:
Private Sub CmdPrint_Click()
    If MsgBox("U gaat nu het zichtbare formulier afdrukken.", vbOKCancel, "Printen") = vbOK Then
        For x = 0 To LstPrint.ListCount - 1
            If LstPrint.Selected(x) = True Then Sheets(LstPrint.List(x)).PrintOut
        Next
    End If
End Sub
Private Sub UserForm_Initialize()
    With LstPrint
        .Clear
        For Each blad In Sheets
            If blad.Visible = True Then
                .AddItem blad.Name
            End If
        Next
    End With
End Sub
 
Laatst bewerkt:
Oke, dan had ik het fout :)

Deze werkt inderdaad foutloos!
Spaarie hartelijk bedankt voor de moeite!

Mvg,

Seppe
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan