Teller op etiketten

Status
Niet open voor verdere reacties.

primater

Gebruiker
Lid geworden
16 jul 2010
Berichten
17
Beste mensen,
Ik maak een acces-database voor het printen van etiketten. Via een knop op een formulier stuur ik een printopdracht (zie onderstaande VBAcode)!
Bij het klikken krijg je een opvraagscherm waar het "aantal" gewenste afdrukken (etiketten) kan worden ingegeven, tot hier lukt alles perfect. Nu komt het: ik zou graag het "aantal" afdrukken willen weergeven op het etiket (bv. bij een afdrukopdracht van 10etiketten wil ik een opeenvolgende nummering weergeven op elk etiket van 1,2,3,4 tot 10.
Dit lukt mij langs geen kanten, kan iemand mij hier een handje helpen, ik vermoed dat dit geen gemakkelijke vraag is. Alvast bedankt!
Code:
 Dim iAantal          As Integer
    Dim Etiketrpt         As String
    sRapport = "Etiket-rpt"
    DoCmd.OpenReport "Etiket-rpt", acViewPreview
        iAantal = Val(InputBox("aantal afdrukken", "Rapport afdrukken", 1))
    If iAantal > 0 Then
        DoCmd.SelectObject acReport, "Etiket-rpt"
        DoCmd.PrintOut , , , , iAantal
    End If
    DoCmd.Close acReport, sRapport
End Sub
 
Laatst bewerkt door een moderator:
primater,

naar mijn weten is dit niet via een rapport te regelen.

Je kan dit wel via een omweg bereiken, neem in de tabel waarin de gegevens staan voor jouw rapport een veld op waarin je de aantal afdrukken zet.

Maak een nieuwe dummy tabel met zelfde velden die in de oorspronkelijke tabel staan PLUS een nieuw veld type tekst waarin 1 van 2, 2 van 2 komt te staan.

Via vba vul je de dummy tabel.

Dit ziet er ongeveer zo uit.

Private Sub Button0_Click()
On Error GoTo Err_Section
Dim rs As DAO.Recordset
Dim z As Long
Dim y As Integer

z = DCount("*", "Labels")
DoCmd.OpenQuery "QryverwresLabel"
Set rs = CurrentDb.OpenRecordset("resLabels")
DoCmd.GoToRecord , , acFirst

For i = 1 To z
For y = 1 To Me.aantal



rs.AddNew
rs!SoortLabel = Me.SoortLabel
rs!regel1 = Me.regel1
rs!regel2 = Me.regel2
rs!regel3 = Me.regel3
rs!regel4 = Me.regel4
rs!print = Me.print
rs!regel5 = y & " van " & Me.aantal
rs.Update
Next y
If i <> z Then
DoCmd.GoToRecord , , acNext
End If
Next i
rs.Close
Set rs = Nothing
DoCmd.OpenReport "rptLabels", acViewPreview

Exit_Section:
On Error GoTo 0
Exit Sub
Err_Section:
Select Case Err
Case 2501
MsgBox "Report Cancelled"
Case Else
MsgBox "Error in button click event procedure - " & Err & " - " & Err.Description
End Select
Resume Next
End Sub


Groet, Cor.
 
@Cor: Zou je code kunnen opmaken met de Code knop? Wordt-ie wat leesbaarder van.
 
Beste,
Ik zal dit morgen eens uitproberen. Alvast bedankt voor de reactie!

Groeten,
Kurt
 
Het kan met een simpele code op je rapport Detailsectie, zonder ingewikkelde toestanden...

Code:
Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer)
Dim iPalAantal As Integer
Dim lngIdOud As Long
    
    If lngIdOud <> Me!ID Then
        iPalAantal = Me!palAantal
    End If
    If PrintCount < iPalAantal Then
        Me.NextRecord = False
    End If

    Me!txtVolgNummer = PrintCount & "/" & iPalAantal
    lngIdOud = Me!ID
End Sub

In dit voorbeeld heb ik een tekstvak [txtVolgNummer] dat het aantal etiketten bevat, en een tekstvak [PalAantal] voor het aantal etiketten.
 
Beste Michel,
Ondanks de simpele code lukt het mij niet om een waarde te verkrijgen op het rapport (etiket). Bij het openen van het rapport krijg ik steeds de vraag dat het veld ID niet kan worden gevonden. Waarschijnlijk moet ik 1 van de bestaande velden in de tabel (productiegeg-nieuw) herbenoemen en twee extra tekstvakken aanmaken op mijn rapport? In bijlage probeer ik de database (rar-bestand van 85kb) om eventueel een voorbeeldje op uit te werken toe te voegen, maar het lukt me niet, er komt telkens een rood uitroepteken achter.
Alvast bedankt!
Groeten,
Kurt
 
Mijn code komt uit een voorbeeldje met bepaalde veldnamen. Die moet je uiteraard aanpassen. Wil je de getallen op je rapport, dan moet in ieder geval de veldnaam overeenkomen. Ofwel pas je het rapport aan (maar waarom zou je dat willen...) ofwel pas je de naam aan in de formule (lijkt mij logischer).
Je gebruikt zelf een inputbox voor het aantal; dat zou wel moeten kunnen, maar die variabele moet je dan wel meegeven bij het openen van het rapport, bijvoorbeeld via de OpenArgs parameter. Die lees je bij het openen van het rapport weer uit, en kun je dan dus gebruiken in de formules. Vermoedelijk wil je helemaal geen berekeningen laten uitvoeren, want uit je vraag haal ik alleen maar dat je de variabele wilt afdrukken. Dus dat is nog veel makkelijker!
 
Laatst bewerkt:
Beste Michel,

Het is mij uiteindelijk gelukt om het etiketnummer weer te geven.:) (het printaantal wordt nu gestuurd vanuit het veld 'aantal' i.p.v. een inputbox).
Het is nu wel zo dat het aantal gevraagde afdrukken op 1 of meerdere pagina's (afhankelijk van het aantal) na elkaar worden afgedrukt, terwijl anders etiket per etiket werd afdrukt (tot de opgegeven waarde in de inputbox).
Ik heb dit nu wel enkel getest op mijn printer thuis (dus op A4 formaat). De printer op mijn werk is een etiketprinter met sensor, en ik veronderstel (lees:hoop) dat de etiketten daar afzonderlijk worden geprint. Ik zal dit pas woensdag kunnen testen, indien alles correct werkt mag dit draadje als afgehandeld worden beschouwd! Alvast nogmaals bedankt voor de nuttige info!!
Groeten,
Kurt
 
Beste Michel,
Dankzij onderstaande code (op detailsectie v/h rapport) is het gelukt om alles correct te printen.

Private Sub Details_Print(Cancel As Integer, PrintCount As Integer)
Dim iPalAantal As Integer
iPalAantal = Me!Aantal
If PrintCount < iPalAantal Then
Me.NextRecord = False
End If
Me!txtVolgNummer = PrintCount
End Sub

Nu heb ik een volgende vraag. Mjn werkgever zegt dat het noodzakelijk is om een extra etiket te kunnen afprinten. De teller moet dan wel verder tellen vanaf het laatste aantal, indien hetzelfde etiket wordt afgedrukt (dus niet vanaf 1). Hieronder de code die achter mijn knop zit om de printopdracht te sturen.
Private Sub Knop42_Click()
Dim iAantal As Integer
Dim Etiketrpt As String
sRapport = "Etiket-rpt"
DoCmd.OpenReport "Etiket-rpt", acViewPreview
iAantal = 1
DoCmd.PrintOut , , , , iAantal
DoCmd.Close acReport, sRapport
End Sub
Hopelijk kan je mij hier verder mee helpen?
Groeten,
Kurt
 
Ik snap de vraag niet helemaal; je werkgever vindt het noodzakelijk om een extra etiket te kunnen afdrukken. Moet er elke keer een extra etiket worden afgedrukt, of moet het mogelijk zijn om per keer een extra etiket te kunnen afdrukken? Dus de ene keer wel een extra etiket, en de andere keer niet?
In dat geval zou ik er een extra inputbox of msgbox bij zetten, op basis waarvan je het aantal etiketten met 1 verhoogt. Of d.m.v. een checkbox op je formulier <Extra etiket>, die er voor zorgt dat de waarde van de checkbox automatisch wordt opgeteld bij het aantal etiketten.

Iets als:
Code:
iAantal=Me.Aantal.Value + Abs(Me.chkExtra.Value)

Een checkbox heeft de waarden 0 of -1, dus door de checkbox waarde absoluut te maken, wordt dat 1 of 0. Dat getal tel je op bij het aantal etiketten.
Overigens snap ik je code niet helemaal; je definieert een variabele iAantal, zet daar de waarde 1 in en geeft vervolgens een printopdracht met die variabele. Lijkt mij hetzelfde als: DoCmd.PrintOut , , , , 1

Maak je code overigens op met de code tag (knop #) dan is hij leesbaarder.
 
Het extra etiket is enkel noodzakelijk in geval van onvoorziene gevallen (bv. etiket is gevallen en niet meer bruikbaar door vuil, etiket gescheurd, ...).
Uw opmerking inzake de variabele is correct, dit is door mijn gebrek aan ervaring (ik start pas volgende week met een cursus VB), nu is het een beetje knip-en plakwerk en (proberen) te begrijpen.
Ik zal die checkbox eens uitproberen, maar moet die code op mijn formulier (via printknop) of detailsectie van het rapport?
 
Die code (en het selectiecvakje) zet je op je formulier. Maar ik weet niet of je er wat aan hebt, want je weet op voorhand uiteraard niet wanneer een etiket door iemand verziekt wordt. Al kun je dat vaak nog wel voorspellen :D
Je hebt het dan dus over het opnieuw afdrukken van een etiket, en dan wordt het nummer al een stuk lastiger. Tenzij je een tekstvak op je formulier zet waarin het aantal etiketten wordt ingevuld; dan kun je dat altijd wel weer terugvragen.
 
Ik heb het uitgeprobeerd via een tekstvak en dit lijkt mij een aanvaardbare oplossing. Het onderwerp mag als afgehandeld worden beschouwd.
Nogmaals bedankt voor de vele informatie!
Groeten,
Kurt
 
Je mag de vraag zelf op <Opgelost> zetten; dat kunnen wij namelijk niet!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan