• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Macro in Excel: printerkeuze?

Status
Niet open voor verdere reacties.

tomswaelen

Gebruiker
Lid geworden
8 dec 2004
Berichten
349
Ik heb een macro in Excel opgenomen die een verborgen sheet zichtbaar maakt, dat sheet afdrukt, en opnieuw verbergt.

Nu merk ik dat ik bij het uitvoeren van de macro geen scherm krijg om de printer te kiezen. Is dit normaal? Kiest de macro hier altijd de printer die als default in Windows is ingesteld? Dat op zich zou geen probleem zijn.

Of is er toch een lijntje code dat ik kan toevoegen waardoor het scherm met de printerkeuze wordt getoond?

Code:
Sub Afdrukken()
'
' Afdrukken Macro
'

'
    Sheets("Opvragen rekeninginformatie").Visible = True
    Sheets("Opvragen rekeninginformatie").Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=1
    Sheets("Opvragen rekeninginformatie").Select
    ActiveWindow.SelectedSheets.Visible = False
End Sub
 
Hier kom je zeker verder mee:
Code:
Sub M_printers()
  MsgBox Application.ActivePrinter
  For Each pr In CreateObject("Wscript.network").EnumPrinterConnections
    c00 = c00 & vbLf & pr
  Next
  MsgBox c00
End Sub

Eerst wordt de actieve printer getoond en daarna al de mogelijkheden.
 
Dit is trouwens voldoende
Code:
Sheets("Opvragen rekeninginformatie").Visible = True
  Application.Dialogs(xlDialogPrinterSetup).Show
 Sheets("Opvragen rekeninginformatie").PrintOut Copies:=1
 Sheets("Opvragen rekeninginformatie").Visible = False
 
Bedankt iedereen!

Application.Dialogs(xlDialogPrinterSetup).Show geeft inderdaad de printers. Ik had eerder het standaard Windows-scherm voor, maar dit scherm werkt zeker ook :)
 
Voor het standaard Windows-scherm

Code:
Application.Dialogs(xlDialogPrint).Show
 
Als ik op annuleren klik wil ik geen print natuurlijk.
Code:
dim selecteerprinter as string
selecteerprinter = Application.Dialogs(xlDialogPrinterSetup).Show
if selecteerprinter then Sheets("Opvragen rekeninginformatie").PrintOut Copies:=1,ActivePrinter:=selecteerprinter

of miscchien kan het korter; niet getest.
Code:
if Application.Dialogs(xlDialogPrinterSetup).Show then Sheets("Opvragen rekeninginformatie").PrintOut Copies:=1

Je kan ook nog de standaard printer even uitschakelen en de printernaam in de code verwerken waarmee je het blad altijd wilt printen.
 
Laatst bewerkt:
Ik heb het nu even geprobeerd met deze code (voor zover ik VBA kan bijeen knutselen ;-) ):

Code:
Sub Afdrukken()
'
' Afdrukken Macro
'

'
    Sheets("Stap 4 - Validatie en afdrukken").Select
    Sheets("Opvragen rekeninginformatie").Visible = True
    Sheets("Opvragen rekeninginformatie").Select
    Dim Selecteerprinter As String
    Selecteerprinter = Application.Dialogs(xlDialogPrint).Show
    If Selecteerprinter Then Sheets("Opvragen rekeninginformatie").PrintOut Copies:=1, ActivePrinter:=Selecteerprinter
    Sheets("Opvragen rekeninginformatie").Select
    ActiveWindow.SelectedSheets.Visible = False
End Sub

Dit zorgt ervoor dat ik kan annuleren, maar dit zorgt er ook voor dat hij het document 2 x afdrukt. Waar zit ik fout?
 
Je geeft hier twee printopdrachten.

Code:
Selecteerprinter = Application.Dialogs(xlDialogPrint).Show
    If Selecteerprinter Then Sheets("Opvragen rekeninginformatie").PrintOut Copies:=1, ActivePrinter:=Selecteerprinter
 
En zo zie je dat ik het toch nog niet helemaal begrijp ;-)

Ik heb de onderste lijn verwijderd, nu werkt het wel!
 
Ik heb de onderste lijn verwijderd, nu werkt het wel!

En zo begrijp ik er niets van.

Haal onderstaand gewoon weg.
Code:
, ActivePrinter:=Selecteerprinter
 
Als ik onderstaande code gebruik, drukt hij het twee keer af.

Code:
Sub Afdrukken()
'
' Afdrukken Macro
'

'
    Sheets("Stap 4 - Validatie en afdrukken").Select
    Sheets("Opvragen rekeninginformatie").Visible = True
    Sheets("Opvragen rekeninginformatie").Select
    Dim Selecteerprinter As String
    Selecteerprinter = Application.Dialogs(xlDialogPrint).Show
    If Selecteerprinter Then Sheets("Opvragen rekeninginformatie").PrintOut Copies:=1
    Sheets("Opvragen rekeninginformatie").Select
    ActiveWindow.SelectedSheets.Visible = False
End Sub
 
Vreemd, hier niet.
Dan probeer het zo maar eens.

Code:
Sub Afdrukken()
'
' Afdrukken Macro
'


'
    Sheets("Stap 4 - Validatie en afdrukken").Select
    Sheets("Opvragen rekeninginformatie").Visible = True
    Sheets("Opvragen rekeninginformatie").Select
   
    If Application.Dialogs(xlDialogPrinterSetup).Show  Then Sheets("Opvragen rekeninginformatie").PrintOut Copies:=1
    Sheets("Opvragen rekeninginformatie").Select
    ActiveWindow.SelectedSheets.Visible = False
End Sub
 
En dan zijn we weer terug in het andere 'Dialog'

Code:
Sub Afdrukken()
With Sheets("Opvragen rekeninginformatie")
  .Visible = True
  .Activate
  With Application
    .Dialogs(xlDialogPrint).Show
    .Goto Sheets("Stap 4 - Validatie en afdrukken").[A1]
  End With
  .Visible = False
End With
End Sub
 
Mijn reactie ging uit naar de printdialog van @gast0660, mazzelaar. ;)
 
Als ik deze code gebruik:

Code:
Sub Afdrukken()
'
' Afdrukken Macro
'


'
    Sheets("Opvragen rekeninginformatie").Visible = True
    Sheets("Opvragen rekeninginformatie").Select
   
    If Application.Dialogs(xlDialogPrinterSetup).Show Then Sheets("Opvragen rekeninginformatie").PrintOut Copies:=1
    Sheets("Opvragen rekeninginformatie").Select
    ActiveWindow.SelectedSheets.Visible = False
End Sub

Werkt het zoals het zou moeten, maar dan heb ik de ingekorte versie van het printerdialoogvenster (wat nu ook weer geen ramp is).

Als ik dit gebruik:

Code:
Sub Afdrukken()
'
' Afdrukken Macro
'


'
    Sheets("Opvragen rekeninginformatie").Visible = True
    Sheets("Opvragen rekeninginformatie").Select
    If Application.Dialogs(xlDialogPrint).Show Then Sheets("Opvragen rekeninginformatie").PrintOut Copies:=1
    Sheets("Opvragen rekeninginformatie").Select
    ActiveWindow.SelectedSheets.Visible = False
End Sub

Drukt hij het twee keer af. Vreemd toch? :-)
 
Bij '.Dialogs(xlDialogPrint).Show' heb je if controle niet nodig om te annuleren.
 
Ah, dus het lag aan de module zelf, de voorwaarden zijn anders. Dan zijn we er uit he :-)
 
Ondertussen heb ik al wat bijgeleerd (héél klein beetje) en heb ik wat voorwaarden toegevoegd. Het komt er op neer dat A14 op OK moet staan alvorens je kan afdrukken. Anders krijg je een melding.

Ik heb dit nu zelf bij elkaar geknutseld, en het werkt. Maar kan iemand mij zeggen of dit helemaal juist is? Of dat het nog eleganter kan? :-)

Code:
Sub Afdrukken()
'
' Afdrukken Macro
'


'
   
      If Range("A14").Value = "NOK" Then
      MsgBox "Vul alle gegevens in alvorens af te drukken"
      
      End If
      If Range("A14").Value = "NOK" Then Exit Sub
      
      If Range("A14").Value = "OK" Then
        MsgBox "Het aanvraagformulier wordt nu afgedrukt"
        
      End If
        
      Sheets("Opvragen rekeninginformatie").Visible = True
      Sheets("Opvragen rekeninginformatie").Select
      Application.Dialogs(xlDialogPrint).Show
      Sheets("Opvragen rekeninginformatie").Select
      ActiveWindow.SelectedSheets.Visible = False

    End Sub
 
Wat wil je nu eigenlijk. Ik zou er doodmoe van worden met alle berichten en dialogs om een pagina af te drukken. Hoe het eleganter kan staat in #14. Zoek ook eens op IF THEN ELSE of SELECT CASE.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan