• 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.

Opdrachtknop aan juiste pagina koppelen

Status
Niet open voor verdere reacties.
Nee. Zo:
Code:
With Sheets("Naam")
    .PageSetup.Orientation = xlLandscape
    .PrintOut copies:=1
End With
 
Laatst bewerkt:
Ik heb nu command buttons gemaakt voor verschillende printopdrachten.
Die werken allemaal.

Bij Button 3 is het de bedoeling dat er in Landscape wordt geprint en dat er dubbelzijdig wordt geprint.
Nu heb ik een code voor dubbelzijdig toegepast en daar de Landscape definitie 'ingebouwd'; het zal een gevalletje 'verbouwd' zijn.
Ik krijg namelijk enkelzijdig Portrait.

Nu heb ik wel eens begrepen dat er een verschil is tussen pagina einde en sectie einde ??????? Er zijn printdefinities ingesteld. Moet ik hierin misschien iets veranderen?Bekijk bijlage voorbeelddocument_24-04-2016 1230.xlsm

Dubbel printen onder CommandButton3

Private Sub CommandButton3_Click()
With Sheets("Overzicht kamers")
PageSetup.Orientation = xlLandscape
.Select Sheets("Overzicht kamers").Activate
ActiveSheet.PrintOut Copies:=1, Collate:=True
End With
End Sub

Als ik het goed zie dan zijn CommandButton 1 en 2 gekoppeld aan module 1 en 2.

Als dat zo is, zijn dan de modules in dezelfde volgorde gekoppeld aan de CommandButtons als de volgorde waarin de Commandbuttons 1 en 2 staan?

Hoe kan ik onder CommandButton1 een specifieke pagina laten wegzetten als pdf?
Hoe kan ik onder commandbutton 2 Roosterblad en Therapie als pdf wegzetten (Portrait)

Bijlage is van vandaag 12:31
 
De code die je in #22 laat zien is totaal afwijkend van wat ik in #21 liet zien. Je zet er dingen tussen die totaal overbodig zijn en zaken door elkaar gooien.

Daarnaast is dubbelzijdig printen een instelling van de printer.
Of je dat eenvoudig vanuit VBA kan aansturen weet ik zo niet.
 
Laatst bewerkt:
Dus toch een gevalletje "verbouwen".

De codes die je hebt laten zien gebruik ik onder de andere CommandButtons (v.a. 4) dat werkt allemaal als een trein. (Zie bijlage)

Dubbelzijdig printen instellen moet wel kunnen, kan het echter niet meer terugvinden.
Ik weet dat 'pagina einde' of 'sectie einde' daar kennelijk ook een rol in speelde.

Ik hoop dat iemand hierin kan helpen.
 
Het zal naar mijn mening alleen lukken als de fabrikant van je printer voor dat type printer een API beschikbaar heeft die je vanuit VBA kan aansturen.
 
Hoi,
Ben nog eens aan het rommelen geweest met je bestandje.
Volgens mij zit er nu alles in wat je tot nu toe hebt gevraagd.
Wat betreft het dubbelzijdig printen deel ik dezelfde mening als Edmoor, trouwens het lijkt mij in dit geval overbodig.
Beste Jan, deze code is net als mijn vrouw daar mag je naar kijken maar aankomen niet:d
In bijlage

Edit: alle code onder Roosterblad mag verdwijnen
 

Bijlagen

  • Kopie van voorbeelddocument_24-04-2016 1230.xlsb
    78,1 KB · Weergaven: 22
Laatst bewerkt:
Hoi.

Dat ziet er gaaf uit!!!

In de voet wordt gevraagd het bereikt om te printen aan te geven: Kan ik dat achterwege laten als die reeds zijn ingesteld zijn ingesteld bij de printdefinities?

M.b.t dubbel printen kwam ik het volgende tegen voor Overzicht kamers

Sub Printen()
' printer instellen op duplex printen
SetPrinterToDuplex "printernaam", 2

' printen
Activesheet.PrintOut

' printer terugzetten op enkelzijdig printen
SetPrinterToDuplex "printernaam", 1
End Sub

Het komt uit versie 2007. Dan zou 2010 het toch ook aan moeten kunnen?

De andere tip was:

Maak een kopie van de actuele printer.
Definieer die zo dat hij altijd op dubbelzijdig staat.
Zorg er voor dat bij een printopdracht Overzicht kamer DIE printer wordt aangesproken voor die printopdracht.

Hoe via een macro een specifieke printer aan te roepen wordt nogal wat over geschreven.
 
Ok, ik gebruik het zelf niet maar omdat je erom vraagt, bij deze de code voor SetPrinterToDuplex:
Code:
 Option Explicit

   Public Type PRINTER_DEFAULTS

       pDatatype As Long
       pDevmode As Long
       DesiredAccess As Long
   End Type

   Public Type PRINTER_INFO_2
       pServerName As Long
       pPrinterName As Long
       pShareName As Long
       pPortName As Long
       pDriverName As Long
       pComment As Long
       pLocation As Long
       pDevmode As Long       ' Pointer to DEVMODE
       pSepFile As Long
       pPrintProcessor As Long
       pDatatype As Long
       pParameters As Long
       pSecurityDescriptor As Long  ' Pointer to SECURITY_DESCRIPTOR
       Attributes As Long


       Priority As Long
       DefaultPriority As Long
       StartTime As Long
       UntilTime As Long
       Status As Long
       cJobs As Long
       AveragePPM As Long
   End Type

   Public Type DEVMODE
       dmDeviceName As String * 32

       dmSpecVersion As Integer
       dmDriverVersion As Integer
       dmSize As Integer
       dmDriverExtra As Integer
       dmFields As Long
       dmOrientation As Integer
       dmPaperSize As Integer
       dmPaperLength As Integer
       dmPaperWidth As Integer
       dmScale As Integer
       dmCopies As Integer
       dmDefaultSource As Integer
       dmPrintQuality As Integer
       dmColor As Integer
       dmDuplex As Integer
       dmYResolution As Integer
       dmTTOption As Integer
       dmCollate As Integer
       dmFormName As String * 32
       dmUnusedPadding As Integer
       dmBitsPerPel As Integer
       dmPelsWidth As Long
       dmPelsHeight As Long
       dmDisplayFlags As Long
       dmDisplayFrequency As Long
       dmICMMethod As Long
       dmICMIntent As Long
       dmMediaType As Long
       dmDitherType As Long
       dmReserved1 As Long
       dmReserved2 As Long
   End Type

   Public Const DM_DUPLEX = &H1000&
   Public Const DM_IN_BUFFER = 8

   Public Const DM_OUT_BUFFER = 2
   Public Const PRINTER_ACCESS_ADMINISTER = &H4
   Public Const PRINTER_ACCESS_USE = &H8
   Public Const STANDARD_RIGHTS_REQUIRED = &HF0000
   Public Const PRINTER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or _
             PRINTER_ACCESS_ADMINISTER Or PRINTER_ACCESS_USE)

   Public Declare Function ClosePrinter Lib "winspool.drv" _
    (ByVal hPrinter As Long) As Long
   Public Declare Function DocumentProperties Lib "winspool.drv" _
     Alias "DocumentPropertiesA" (ByVal hwnd As Long, _
     ByVal hPrinter As Long, ByVal pDeviceName As String, _
     ByVal pDevModeOutput As Long, ByVal pDevModeInput As Long, _
     ByVal fMode As Long) As Long
   Public Declare Function GetPrinter Lib "winspool.drv" Alias _
     "GetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, _
     pPrinter As Byte, ByVal cbBuf As Long, pcbNeeded As Long) As Long
   Public Declare Function OpenPrinter Lib "winspool.drv" Alias _
     "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, _
     pDefault As PRINTER_DEFAULTS) As Long
   Public Declare Function SetPrinter Lib "winspool.drv" Alias _
     "SetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, _
     pPrinter As Byte, ByVal Command As Long) As Long

   Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
    (pDest As Any, pSource As Any, ByVal cbLength As Long)
 
   ' ==================================================================
   ' SetPrinterDuplex
   '
   '  Programmatically set the Duplex flag for the specified printer
   '  driver's default properties.
   '
   '  Returns: True on success, False on error. (An error will also

   '  display a message box. This is done for informational value
   '  only. You should modify the code to support better error
   '  handling in your production application.)
   '
   '  Parameters:
   '    sPrinterName - The name of the printer to be used.
   '
   '    nDuplexSetting - One of the following standard settings:
   '       1 = None
   '       2 = Duplex on long edge (book)
   '       3 = Duplex on short edge (legal)
   '
   ' ==================================================================
   Public Function SetPrinterToDuplex(ByVal sPrinterName As String, _
       ByVal nDuplexSetting As Long) As Boolean

      Dim hPrinter As Long
      Dim pd As PRINTER_DEFAULTS
      Dim pinfo As PRINTER_INFO_2
      Dim dm As DEVMODE
   
      Dim yDevModeData() As Byte
      Dim yPInfoMemory() As Byte
      Dim nBytesNeeded As Long
      Dim nRet As Long, nJunk As Long
   
      On Error GoTo cleanup
   
      If (nDuplexSetting < 1) Or (nDuplexSetting > 3) Then
         MsgBox "Error: dwDuplexSetting is incorrect."
         Exit Function
      End If
      
      pd.DesiredAccess = PRINTER_ALL_ACCESS
      nRet = OpenPrinter(sPrinterName, hPrinter, pd)
      If (nRet = 0) Or (hPrinter = 0) Then
         If Err.LastDllError = 5 Then
            MsgBox "Access denied -- See the article for more info."
         Else
            MsgBox "Cannot open the printer specified " & _
              "(make sure the printer name is correct)."
         End If
         Exit Function
      End If
   
      nRet = DocumentProperties(0, hPrinter, sPrinterName, 0, 0, 0)
      If (nRet < 0) Then
         MsgBox "Cannot get the size of the DEVMODE structure."
         GoTo cleanup
      End If
   
      ReDim yDevModeData(nRet + 100) As Byte
      nRet = DocumentProperties(0, hPrinter, sPrinterName, _
                  VarPtr(yDevModeData(0)), 0, DM_OUT_BUFFER)
      If (nRet < 0) Then
         MsgBox "Cannot get the DEVMODE structure."
         GoTo cleanup
      End If
   
      Call CopyMemory(dm, yDevModeData(0), Len(dm))
   
      If Not CBool(dm.dmFields And DM_DUPLEX) Then
        MsgBox "You cannot modify the duplex flag for this printer " & _
               "because it does not support duplex or the driver " & _
               "does not support setting it from the Windows API."
         GoTo cleanup
      End If
   
      dm.dmDuplex = nDuplexSetting
      Call CopyMemory(yDevModeData(0), dm, Len(dm))
   
      nRet = DocumentProperties(0, hPrinter, sPrinterName, _
        VarPtr(yDevModeData(0)), VarPtr(yDevModeData(0)), _
        DM_IN_BUFFER Or DM_OUT_BUFFER)

      If (nRet < 0) Then
        MsgBox "Unable to set duplex setting to this printer."
        GoTo cleanup
      End If
   
      Call GetPrinter(hPrinter, 2, 0, 0, nBytesNeeded)
      If (nBytesNeeded = 0) Then GoTo cleanup
   
      ReDim yPInfoMemory(nBytesNeeded + 100) As Byte

      nRet = GetPrinter(hPrinter, 2, yPInfoMemory(0), nBytesNeeded, nJunk)
      If (nRet = 0) Then
         MsgBox "Unable to get shared printer settings."
         GoTo cleanup
      End If
   
      Call CopyMemory(pinfo, yPInfoMemory(0), Len(pinfo))
      pinfo.pDevmode = VarPtr(yDevModeData(0))
      pinfo.pSecurityDescriptor = 0
      Call CopyMemory(yPInfoMemory(0), pinfo, Len(pinfo))
   
      nRet = SetPrinter(hPrinter, 2, yPInfoMemory(0), 0)
      If (nRet = 0) Then
         MsgBox "Unable to set shared printer settings."
      End If
   
      SetPrinterToDuplex = CBool(nRet)

cleanup:
      If (hPrinter <> 0) Then Call ClosePrinter(hPrinter)

   End Function
 
Laatst bewerkt:
Dankje Edmoor,

Daar valt nog het nodige aan te bestuderen (WAAR moet WAT door XXX worden vervangen.
Volgens mij heb ik hem wel eens in een linkje voorbij zien komen waar dit ook werd uitgelegd.
Die leg ik even op de plank.

Voor nu werkt onderstaande ook goed (het is nog even zoeken naar de juiste bladinstellingen)

Sub printje()
myprinter = Application.ActivePrinter
x = 0
Do Until x = 9
On Error Resume Next
Application.ActivePrinter = "PRT-17 PCL6 Driver for Universal Print op Ne0" & x & ":"
If Err.Number <> 0 Then
x = x + 1
Else: Exit Do
End If
Loop
With Application
.Dialogs(xlDialogPrinterSetup).Show
.ScreenUpdating = False
Sheets("Overzicht kamers").Range("A2:L18, A19:L33, A38:L60, A61:L69").PrintOut
.Goto Blad1.[A1]
.ScreenUpdating = True
.ActivePrinter = myprinter

End With

End Sub

En het is nog even zoeken of in bovenstaande het aantal prints ingegeven kan worden of in de printerspecificaties.

Ik heb bv een printer die op de lijst van apparaten en printers staat onder de naam: Brother MFC-9970CDW Printer (=standaard)
Als ik "myprinter = Application.ActivePrinter" zou kunnen veranderen in een regel die verwijst naar: Brother MFC-9970CDW Printer2 (Kopie van de standaard) dan ben ik helemaal klaar.
 
Hoi Jan
In de voet wordt gevraagd het bereikt om te printen aan te geven: Kan ik dat achterwege laten als die reeds zijn ingesteld zijn ingesteld bij de printdefinities?
Waarom zou je dat nu weer willen? Los het dan op met een een ComboBox en zet in het blad data de verschillende bereiken dat je wilt gebruiken.
Als je dan eens een ander bereik wilt printen kan je het nog altijd manueel invoeren,maar je blijft in ieder geval de flexibiliteit behouden, met vast ingestelde bereiken niet.
Zie bijlage
 

Bijlagen

  • Kopie van voorbeelddocument_24-04-2016 1230(2).xlsb
    75,2 KB · Weergaven: 16
Hoi Philiep,

Het is niet zozeer dat ik dat zou willen maar er werken ook een paar andere mensen mee die de computer al doen laten vastlopen door er naar te kijken http://www.helpmij.nl/forum/images/smilies/mad2.gif

Maar ik ben er uit volgens mij.
Ik maak gewoon een kopie printer die ik goed instel en met hoofdletters KAMEROVERZICHT noem http://www.helpmij.nl/forum/images/smilies/biggrin.gif
Dan komt het helemaal goed.

Jullie ontzettend bedankt voor alle ondersteuning (en geduld).
Ik ga de gevoelig data weer terugzetten en dan is er een ontzettend mooi dingetje uitgekomen.

En dan nog kijken hoe ik dit het best beveilig want er zijn crea-bea mensen die de boel in no-time verbouwen.

Maar er zullen ook wel goede posts te vinden zijn over beveiliging van een excel.doc

Nogmaals; hartstikke tof dat jullie hebben willen helpen.
 
Wat beveiligen betreft kan je een wachtwoord op het VBA project zetten.
 
Ik wil het zo dichtspijkeren dat alleen de velden waar iemand iets te zoeken heeft toegankelijk zijn.
Die velden kunnen binnen een beveiligd blad liggen. Uitdaginkie.
Maar toch bedankt voor de tip
 
Hoi,
Hier heb je alvast een stukje code die alle werkbladen in één maal beveiligd, aan u om in ieder werkblad de cellen waar ze veranderingen mogen in aan brengen aan te passen:p
Code:
Private Sub Workbook_Open()
Dim ws As Worksheet
Dim pwd As String
pwd = "test"[COLOR="#008000"] '<- paswoord[/COLOR]
For Each ws In Worksheets
    ws.Protect Password:=pwd
Next ws
End Sub
 
Hoi, top zeg.

Private Sub Workbook_Open()
Dim ws As Worksheet
Dim pwd As String
pwd = "test" '<- paswoord
For Each ws In Worksheets
ws.Protect Password:=pwd
Next ws
End Sub

Dit is een Makro die actief wordt bij het openen van het bestand en dat meteen alle bladen van het bestand beveiligd? (ff checku of ik het goed heb)

Nu vind ik het OK dat in dit bestand het werkblad Rooster het bereik G15:K40 toegankelijk blijft en in het werkblad Weekindeling B5:H20 toegankelijk blijft.

==> Hoe ziet deze Makro er dan uit?
==> Waar komt de Makro te staan? Ik kan me voorstellen dat een WW Makro door zijn positie een bepaalde prioritering krijgt.
 
Hoi Jan,
Deze macro komt onder This workbook, om de toegelaten cellen aan te passen selecteer je de bereiken (per werkblad) waar aanpassingen mogen gebeuren, dan ga je naar celeigenschappen en onder de tab bescherming vink je Geblokkeerd uit.
 
Hoi Philiep,
Ik werk nu in 2010.

Daar is het nu zo dat je in de cellen van het bereik dat toegankelijk moet blijven het blokje Geblokkeerd uitvinkt om dan het blad te beveiligen.

I.t.t. oudere versies waar je het blad beveiligde om vervolgens aan te geven wat toegankelijk moest blijven.

Is het nu zo dat in v.2010 deze Makro de beveiliging nog aanscherpt?

Als ik het onder This workbook set dan moet ik kennelijk wat toevoegen. Nieuwe exercitie voor mij. http://www.helpmij.nl/forum/images/smilies/shocked2.gif

Dus maar even een bestandje bijgevoegd.
Gewoon maar even voor dit onderwerp. Kan ik het wel overzetten in HET bestand.
Dit is weer even een nieuw leermomentje voor mij.
Bekijk bijlage Bestand t.b.v. voorbeeld beveiliging middels Makro.xlsm
 
Hoi Jan,
Om bij deze te blijven
Nu vind ik het OK dat in dit bestand het werkblad Rooster het bereik G15:K40 toegankelijk blijft en in het werkblad Weekindeling B5:H20 toegankelijk blijft.
Week indeling kon ik niet vinden
Maar in het bestandje in bijlage zijn in het blad Rooster de cellen G15:K40 toegankelijk. Je zal ook zien als je het bestand hebt geopend alle bladen zijn beveiligd. (zie de uileg in vorig postje)
 

Bijlagen

  • Kopie van voorbeelddocument_24-04-2016 1230(2).xlsb
    67,8 KB · Weergaven: 17
Hoi Philiep,

Deze dyslect had in "komt onder This workbook" het woordje onder letterlijk genomen.
Ik zie nu dat het "in" is.

Helemaal top zeg.
Zijn ook alle Makro's, namen, printdefinities, enz beveiligd?

Sommigen klooien wat af om vervolgens in alle onschuld te melden dat "iets" het zomaar niet doet.:evil:
 
Hoi Jan,
Volgens mijn (bescheiden) mening plaats je code altijd onder iets (je plaatst de code onder een knopje, niet in een knopje;))
komt onder This workbook" het woordje onder letterlijk genomen.
Ik zie nu dat het "in" is.
Wat betreft de beveiliging
Zijn ook alle Makro's, namen, printdefinities, enz beveiligd?
Als je de standaard instellingen van Excel behoudt is het antwoord ja maar dan moet je ook de VBA niet vergeten te beveiligen (zie tip van Edmoor)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan