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

Afdrukken

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

sacha

Gebruiker
Lid geworden
27 nov 2001
Berichten
248
Ik heb een formulier en dat mag pas geprint worden als er een aantal cellen verplicht zijn ingevuld.
Nu probeer ik een code te bedenken maar dat lukt niet helemaal.
Het volgende heb ik bedacht:

Public Sub testafdrukken()
Dim inhoud As String
inhoud = Range("A2").Formula
If inhoud = "" Then
inhoud = MsgBox("Cel A2 moet nog ingevuld worden", vbOKOnly, "Cel A2 is leeg")
End
End If
Range("A1:G46").Select
Range("G46").Activate
Selection.PrintOut Copies:=1, Collate:=True
Range("A1").Select
End Sub

Deze code in niet helemaal compleet denk ik.
De bedoeling is dus wanneer er op de printknop gedrukt wordt en cel a2 is niet ingevuld er een bericht verschijnt. Er mag dus pas geprint worden asl A2 is ingevuld.
Kan iemand mij hierbij helpen?
 
Je was al een heel eind goed op weg.

Ik denk dat het zoiets moet worden:

Public Sub testafdrukken()
Dim inhoud As String
inhoud = Range("A2").value
If inhoud= "" Then
inhoud = MsgBox("Cel A2 moet nog ingevuld worden", vbOKOnly, "Cel A2 is leeg")
Range("A2").Select
else
Range("A1:G46").Select
Range("G46").Activate
Selection.PrintOut Copies:=1, Collate:=True
Range("A1").Select
end if
End Sub

als je wilt dat range A1:G46 wordt uitgeprint zal je deze niet moeten selecteren maar via onderstaande regel als afdrukbereik moet definieren.

ActiveSheet.PageSetup.PrintArea = "$A$1:$G$46"
 
Dank voor je antwoord Hans, maar het werkt nog niet helemaal goed.
Als je op de printknop klikt gaat ie gewoon de pagina afdrukken zonder dat er eerst naar cel A2 gekeken wordt???
Er moet ergens nog een stukje code bij die ervoor zorgt dat er niet direct geprint wordt maar eerst kijkt naar die cel A2.................
 
Als het goed is heb je de macro onder een eigen printknop gehangen. Als deze macro niet achter een eigen printknop zit moet je deze macro aanroepen vanuit de macro op het moduleblad van 'thisworkbook'


Private Sub Workbook_BeforePrint(Cancel As Boolean)
call testafdrukken
End Sub
 
Stapje verder weer Hans!
Deze code staat er nu:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim inhoud As String
inhoud = Range("A2").Value
If inhoud = "" Then
inhoud = MsgBox("Cel A2 moet nog ingevuld worden", vbOKOnly, "")
Range("A2").Select
Else
Range("A1:G46").Select
Selection.PrintOut Copies:=1, Collate:=True
End If
End Sub

Maar nu is het zo dat als er op de printknop gedrukt wordt en cel A2 is leeg het bericht verschijnt dat A2 nog ingevuld moet worden, maar als je op OK klikt gaat ie alsnog afdrukken!!!!!
Zonder dat er iets is ingevuld....
Dus nog niet afdrukken maar naar cel A2....
 
Sacha,

In een normale Module oner een Knop.

Public Sub testafdrukken()
If Range("A2") = "" Then
MsgBox "Cel A2 moet nog ingevuld worden", vbOKOnly, "Cel A2 is leeg"
Range("A2").Select
Exit Sub
End If
Range("G46").Activate
Selection.PrintOut Copies:=1, Collate:=True
Range("A1").Select
End Sub


Het zit em in de: Exit Sub
 
Neem deze maar, dan wordt er ook nog iets afgedrukt.

Sorry,Sacha.

Public Sub testafdrukken()
If Range("A2") = "" Then
MsgBox "Cel A2 moet nog ingevuld worden", vbOKOnly, "Cel A2 is leeg"
Range("A2").Select
Exit Sub
End If
Range("A1:G46").Select
Selection.PrintOut Copies:=1, Collate:=True
Range("A1").Select
End Sub
 
Sacha,

Je hebt gelijk, er ontbreekt nog een regeltje aan de code die ik gepost heb.

Voor else moet nog komen cancel=true.

Cancel is in dit geval een argument van de gebeurtenis procedure, die op true moeten worden ingesteld om het afdrukken te stoppen.
 
Beste Luc en Hans,

Bedankt alvast voor jullie meedenkwerk!
Maar het is blijkbaar toch niet zo'n makkelijke code al op het eerste gezicht lijkt.
Als ik de code van Luc gebruik krijg ik een foutmelding op de selection.PrintOut regel......er wordt dan dus niet geprint.

Bij de code van Hans gaat ie nadat op de OK knop gedrukt is wel naar cel A2 maar toch ook direct printen....

De code ziet ernu als volgt uit:

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Call testafdrukken
End Sub
Public Sub testafdrukken()
If Range("A2") = "" Then
MsgBox "Cel A2 moet nog ingevuld worden", vbOKOnly, "Cel A2 is leeg"
Range("A2").Select
Exit Sub
Else
Range("A1:G46").Select
Selection.PrintOut Copies:=1, Collate:=True
End If
End Sub

Hij zou er dus mee moeten stoppen nadat A2 geselecteerd is...?????
 
Hans,

Dit gebeurt er wanneer je op de printknop klikt (de standaard printknop in de werkbalk):
Als a2 niet gevuld is komt de melding
Als op op OK klikt wordt cel A2 geselecteerd
Er wordt gelijk alsnog geprint.........

btw als je de code onder een eigen knop hangt en je laat de eerste code weg, werkt het wel.....?????
Maar dat ziet er niet zo netjes uit... ik wil geen knop in het formulier.
:D
 
Sacha,

mijn fout

Even opnieuw.
Onderstaande code zou moeten werken( doet het bij mij in ieder geval)

Private Sub Workbook_BeforePrint(Cancel As Boolean)
If Range("A2") = "" Then
MsgBox "Cel A2 moet nog ingevuld worden", vbOKOnly, "Cel A2 is leeg"
Range("A2").Select
Cancel = True
Else
Cancel = False
ActiveSheet.PageSetup.PrintArea = "$A$1:$G$46"
End If
End Sub
 
Hans,

Bij mij werkt ie niet, blijft direct naar de printer gaan als je op OK geklikt hebt.

Nog een andere leuke uitdaging:
in dat zelfde formulier staat ook een vervolgkeuzelijstje waar verplicht een keuze moet worden gemaakt. Kun je die ook in die zelfde code vermelden?
 
Dat hij direct naar de printer gaat kan ik dan niets aan doen, bij werkt de code goed. Heb je alle eerdere macro's gewist ?

Voor je vraag met je keuzelijst is dit een beetje afhankelijk of deze van de werkset besturingselement is of van formulieren en of het een keuzelijst (listbox) of een keuzelijst met invoer vak (combobox) is.

Voeg anders het bestand toe, dan kan er naar gekeken worden.
 
Hans,

Op het formulier staat een vervolgkeuze lijst, gemaakt met de formulierenset. Die haalt gegevens op van blad 2. Men wil dat hier iets verplicht wordt gekozen. Zo'n drop down lijstje.

Het formulier bijvoegen is lastig, staan bedrijfsgegevens in.
 
In dit geval kun je een cel linken aan je keuzelijst en testen of deze leeg is of niet ( zelfde als bij a2) linked cel is in dit geval A3.



Private Sub Workbook_BeforePrint(Cancel As Boolean)
If Range("A2") = "" Then
MsgBox "Cel A2 moet nog ingevuld worden", vbOKOnly, "Cel A2 is leeg"
Range("A2").Select
Cancel = True
ElseIf Range("a3") = "" Then
MsgBox "Cel A3 moet nog ingevuld worden", vbOKOnly, "Cel A3 is leeg"
Range("A3").Select
Cancel = True
Else
Cancel = False
ActiveSheet.PageSetup.PrintArea = "$A$1:$G$46"
End If
End Sub
 
Ik heb, met jou hulp oa, het volgende ervan gebakken:

Sub testafdrukken()
Dim inhoud
If Range("C6").Value = "" Then
MsgBox "Naam aanvrager moet nog ingevuld worden"
Range("C6").Select
Cancel = True
End If
If Range("C7").Value = "" Then
MsgBox "groep moet nog ingevuld worden"
Range("C7").Select
Cancel = True
End If
If Application.WorksheetFunction.CountA(Range("C6:C7")) = 2 Then
ActiveSheet.PrintOut Copies:=1, Collate:=True
Else
MsgBox "U heeft iets vergeten in te vullen"
End If
End Sub

Dit werkt maar..... nu is het zo dat als je bv alle twee de cellen c6 en c7 niet invult de macro doorloopt. Eigenlijk mag ie pas verder gaan nadat c6 is ingevuld???
Dus als je vergeet C6 in te vullen komt de melding en wordt C6 geslecteerd. Heb je iets ingevuld en je drukt weer op de printknop gaat de macro weer verder.....kan dit?
 
Sacha,

Inderdaad Exit sub in plaats van Cancel = True.

Dit werkt bij mij prima.

Sub testafdrukken()

If Range("C6").Value = "" Then
MsgBox "Naam aanvrager moet nog ingevuld worden"
Range("C6").Select
Exit Sub
End If
If Range("C7").Value = "" Then
MsgBox "groep moet nog ingevuld worden"
Range("C7").Select
Exit Sub
End If
ActiveSheet.PrintOut Copies:=1, Collate:=True
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan