Rapport afdrukken per record

Status
Niet open voor verdere reacties.

dingesvandinges

Gebruiker
Lid geworden
20 apr 2006
Berichten
261
Beste,

Ik heb een database en een rapport ik kan alleen niet een rapport op record afdrukken, als ik nu het rapport afdruk krijg ik alle records.
Ik heb een formulier (werkbon) en deze wil ik afdrukken, Rapport heb ik al, zelfde soort indeling als het formulier.

Liefst wil ik vanuit het formulier een rapport afdrukken, net als ik Noordenwind.
Maar vanuit het formulier 1 record uitprinten mag ook

Voorbeeld: In noordenwind 2007 (wellicht ook 2003) kun je per order een factuur (=rapoort) afdrukken. Ook kun je dit rapport alleen maar openen vanuit de order, en niet vanuit formulieren.

Hoe kan ik dit oplossen? ik heb al verschillende dingen proberen uit te pluizen.
 
Laatst bewerkt:
Dit voorbeeld laat zien hoe je een rapport opent met een geselecteerd record:

Code:
Dim stDocName As String, sFilter As String
Dim iRecord As integer
    iRecord = Me.txtRecordID.Value
    stDocName = "Rapportnaam"
    sFilter = "[RecordID]= " & iRecord
    DoCmd.OpenReport stDocName, acViewPreview, , sFilter

Uiteraard nog wel de juiste veldnamen invullen...
Als je filtert op een tekstveld, verandert de sFilter regel:

sFilter = "[RecordID]= '" & iRecord & "'"
 
(bericht bijgewerkt en samengevoegd!

Dit werkte....

Aangezien ik altijd nog ctrl+p moest doen om te printen heb ik deze code eraan toegevoegd:
DoCmd.PrintOut, of DoCmd.RunCommand acCmdPrint Je hoef dan geen ctrl+p meer te doen.


Maar het volgende probleem doet zich voor:

Ik wil de werkbon (raport dat opent bij printen) e-mailen naar de TL, (deze staat onder een keuzemenu)
De volgende code toegevoegd aan bovenstaande stukje DoCmd.SendObject acSendReport, "Afdrukken werkbon". Echter de TL moet je nu zelf bij aan invoeren, dit wil ik automatisch.

Nu heb ik de volgende code ervan gemaakt alleen dit wil nog niet werken...
(code afkomstig van: http://www.helpmij.nl/forum/showthread.php?t=471027)

Code:
Private Sub Werkbonemail_Click()
    Dim stDocName As String, sFilter As String
    Dim iRecord As Integer
        iRecord = Me.OpdrachtID.Value
        stDocName = "Afdrukken werkbon"
        sFilter = "[OpdrachtID]= " & iRecord
        DoCmd.OpenReport stDocName, acViewPreview, , sFilter
        
sEmail = Me.CboTL.Column(2)
sEmail = Replace(sEmail, "#", "")
sEmail = Mid(sEmail, 8, Len(sEmail) - 7)

sTekst = "Hierbij willen wij de volgende artikelen bestellen. Zie bijgande bestelbon." & vbCrLf & "Bestelling " & sBon
Me.txtVerzonden = Date
dtDatum = CDate(Date)
iDatum = CDbl(dtDatum)
strSQL = "UPDATE tBestellingen SET Verzonden = cdate(" & iDatum & ") " & vbCrLf
strSQL = strSQL & "WHERE (BonID=" & sBon & ");"
DoCmd.RunSQL strSQL
sBijlage = "rBestellingen"

Call SendEmail(sBijlage, sEmail, sBon, sTekst)

Sub SendEmail(Optional Bijlage, Optional Email, Optional Bon, Optional Tekst)
DoCmd.SendObject acSendReport, Bijlage, "SnapshotFormat(*.snp)", sAdres, , , "Bestelling " & Bon, Tekst, False
End Sub
End Sub

Ik gebruik (nog) geen SQL server, het stukje over SQL kan ik dan vergeten denk ik).

Kan iemand bij verder helpen?
 
Laatst bewerkt:
Welke code heb je nu gemaakt voor de email?
Het voorbeeld is namelijk wel erg specifiek voor mijn situatie gemaakt, dus ik kan wel snappen dat-ie het bij jou niet doet.
Check bijvoorbeeld eens met een msgbox hoe het email adres er uitziet:

MsgBox sEmail
 
Ik heb net als bij het eerste probleem een CBO met de naam CboTL in kolom 2 heb ik een email adres staan.
Op het formulier werkt het keuzemenu perfect, tot hier geen problemen.

Het e-mailadres van kolom 2 moet in de aan komen te staan.
In het onderwerpveld moet Werkbon (en dan recordnummer (= OpdrachtID)) komen te staan.

Als je de bestandnaam kan aanpassen zou dit geweldig zijn (Werkbon + OpdrachtID).

Wat bedoeld u precies met een MsgBox (cheak sEmail)?
 
Laatst bewerkt:
In dit deel:

sEmail = Me.CboTL.Column(2)
sEmail = Replace(sEmail, "#", "")
sEmail = Mid(sEmail, 8, Len(sEmail) - 7)

lees je het email adres in, en voer je een paar opschoningen uit. Als je hieronder de Msgbox zet, geeft hij het eindresultaat weer. Dat moet dus een geldig email adres zijn.
 
Nu heb ik het volgende...

Code:
Private Sub Werkbonemail_Click()
    Dim stDocName As String, sFilter As String
    Dim iRecord As Integer
        iRecord = Me.OpdrachtID.Value
        stDocName = "Afdrukken werkbon"
        sFilter = "[OpdrachtID]= " & iRecord
        DoCmd.OpenReport stDocName, acViewPreview, , sFilter
        
sEmail = Me.CboTL.Column(2)
sEmail = Replace(sEmail, "#", "")
sEmail = Mid(sEmail, 8, Len(sEmail) - 7)

DoCmd.SendObject acSendReport, , "SnapshotFormat(*.snp)", sAdres, , , "Bestelling"
End Sub

Fout komt voor bij: sEmail = Replace(sEmail, "#", "")

Ik begrijp er nog steeds niks van.... best vreemd.
 
Laatst bewerkt:
Misschien zit er geen #-teken in de string, al zou dat niet uit mogen maken.
Je kunt aan het begin van de procedure de volgende regel zetten:

On Error Resume Next
Dan loopt hij in ieder geval door. Kun je zien waar de volgende fout zit...
 
Het is wederom niet gelukt tot gisteravond laat bezig geweest.
Ik probeer graag iets zelf, laat ik dit voorop stellen, maar het lukt niet.

Onderwerk veranderen lukt inmiddels wel.

Bijgaande de database.
Ga ook een vervolg cursus Access of VBA volgen..

(bijlage verwijderd, zie laatste bericht voor het bestand).
 
Laatst bewerkt:
Zal er vanavond een blik op werpen; heb nog geen 2007 op 't werk.
 
Hierbij het bestand voor Microsoft Access 2003

(bijlage verwijderd, zie laatste bericht voor het bestand).
 
Laatst bewerkt:
Dan ben ik ook de beroerdste niet....
Hierbij een werkende versie!
Je had hem bijna goed, maar zoals zo vaak, is dat dan nèt weer niet genoeg...
Om te beginnen: je haalde de verkeerde kolom op voor het emailadres. Je hebt in je tabel twee kolommen, maar je probeerde met Column(2) de derde kolom op te halen. Instinkertje dit; Access telt vanaf 0, dus de tweede kolom vraag je op met Column(1). Vandaar mijn tip om sEmail met een Msgbox op te vragen, want dan kun je zien of er inderdaad een email-adres is te vinden.
Verder heb ik je tabel een klein beetje aangepast: in het veld met emailadressen kun je beter het emailadres vastleggen met mailto: Dat heb ik dus als standaardtekst ingesteld.
Het moeilijkste is het meesturen van het goed rapport als bijlage. Hiervoor pas ik tegenwoordig de bron van het rapport aan. Ik zet de selectie dus hard onder het rapport. Daarvoor dient een aparte routine, die op de achtergrond het rapport opent, instelt en weer sluit. Het verzenden is daarna een fluitje van een paar duppies.
 
Laatst bewerkt:
Octafish

Maar waar komt de S elke keer vandaan en de Msgbox bijv. Smail MsgBOX Smail....

Zoals je zeg gebruik je een andere filter ik ga deze ook eens testen voor afdrukken en opslaan...

Mag ik vragen of je je bijlage wilt verwijderen, hier staan e-mailadressen in.
Ik ben momenteel ook bezig met 1 bestand die ik dan met een samenvatting hier post.

Graag hoor ik nog
 
Laatst bewerkt:
sEmail is in dit geval een variabele, net als sFilter. Ik gebruik, als het even kan, variabelen omdat ik daarmee het proces makkelijker kan volgen als ik stapvoets door de code loop om te debuggen. Als je bijvoorbeeld in een recordset een waarde uitleest, zie je die niet terug in het venster Direkt. Variabelen zie je wel, vandaar.
Bijlage is verwijderd...
 
Klopt de naam van de bijlage? Want dat is nu nog een harde verwijzing naar het rapport Bestelling. Die moet er dus wel zijn...
 
Beste,

Ik kreeg de foutmelding:
Code:
    DoCmd.SendObject acSendReport, Bijlage, "SnapshotFormat(*.snp)", Email, , , "Bestelling " & Bon, Tekst, False

Ik wilde dit zelf nog even uitzoeken dus had ik mijn vraag verwijderd, in de tussentijd had OctaFish een reactie geplaatst (zie hieboven).
----

Ik heb inderdaad geen bestellingen, maar jou test werkt wel.... waar heb jij dit verwerkt?
Ik heb enkel opdrachtgeverID en opdrachtID.

Bestelling veranderd in OpdrachtID maar dit was niet de oplossing...
 
Laatst bewerkt:
Als je de SendEmail routine bekijkt:

Code:
Sub SendEmail(Optional Bijlage, Optional Email, Optional Bon, Optional Tekst)
     DoCmd.SendObject acSendReport, Bijlage, "SnapshotFormat(*.snp)", sAdres, , , "Bestelling " & Bon, Tekst, False
End Sub
dan zie je dat er een paar optionele variabelen worden gebruikt bij de aanroep.
In de regel:
Code:
Call SendEmail(sBijlage, sEmail, sBon, sTekst)
stuur je een SendEmail opdracht met 4 variabelen. In de subroutine worden die in dezelfde volgorde toegekend aan de optionele variabelen, dus:
sBijlage --> bijlage
sEmail --> Email
sBon --> Bon
sTekst --> Tekst

Zou één van de variabelen ontbreken, bijvoorbeeld de bijlage, dan zou het commando nog steeds werken, omdat de variabelen dus optioneel zijn.

Het probleem met de code zoals hij hierboven staat zit dan ook hier:

"Bestelling " & Bon
Dit moet je veranderen in:
"Bestelling " & OpdrachtID
De tekst Bestelling en het opdrachtnummer verschijnen in de Onderwerpregel, vandaar dat hij het wel/niet doet; de variabele Bon gebruik jij niet.
 
Laatst bewerkt:
Nee, dit had ik ook al geprobeerd..

Echter je voorbeeldje werkte wel, best vreemd dus.

In het voorbeeld struikel hij niet over het stukje code Bon ..

OctaFish ik heb je al gemaild via de helpmij funcite met de vraag:
Of ik mijn database mag e-mailen zodat u hem na kunt lopen.
(kan deze niet posten, te veel informatie).

Ondertussen blijf ik zelf het een en ander proberen.
 
Laatst bewerkt:
Welk emailadres? Want ik heb gisteren niks ontvangen...
Probeer anders deze:
 
Laatst bewerkt:
Lezers,

Via de e-mail contact gehad met OctaFish, onderstaande code zou moeten werken.

Een fout die al opgelost was, was dat er een puntcode toegevoegd werd achter de Query (automatisch).
Hier is geen duidelijke verklaring voor.

Deze code werkt echter niet. Ik heb nog in contact met OctaFish wat het probleem precies kan zijn,

Code:
Private Sub Werkbonemail_Click()

Call cmdEmail

Exit Sub

End Sub

Private Sub cmdEmail()
    iRecord = Me.OpdrachtID.Value
    stDocName = "Afdrukken werkbon"
    Call RapportCode(stDocName, iRecord)

    sEmail = Me.CboTL.Column(1)
    sEmail = Replace(sEmail, "#", "")
    x = InStr(1, sEmail, ":")
    sEmail = Mid(sEmail, x + 1, Len(sEmail) - x)

    sTekst = "Hierbij willen wij de volgende artikelen bestellen. Zie bijgande bestelbon." & vbCrLf & "Bestelling " & iRecord

    Call SendEmail(stDocName, sEmail, iRecord, sTekst)

'-------------------------------------------------------------------------------------------------------------------------
'Onderstaande routine kun je gebruiken als je een verzenddatum wilt opslaan .....
'-------------------------------------------------------------------------------------------------------------------------
''    Me.txtVerzonden = Date
''    dtDatum = CDate(Date)
''    iDatum = CDbl(dtDatum)
''    strSQL = "UPDATE tBestellingen SET Verzonden = cdate(" & iDatum & ") " 
& vbCrLf
''    strSQL = strSQL & "WHERE (BonID=" & sBon & ");"
''    DoCmd.RunSQL strSQL

End Sub

Sub RapportCode(sRapport As String, sBon As String) Dim tmp

    DoCmd.OpenReport sRapport, acViewDesign, , , acHidden
    sTabel = Reports(sRapport).RecordSource
    If InStr(1, UCase(sTabel), "WHERE") > 0 Then
        strSQL = Left(sTabel, InStr(1, sTabel, "WHERE ") - 1)
    Else
        If InStr(1, UCase(sTabel), "SELECT") = 0 Then
            If InStr(1, sTabel, " ") > 0 And InStr(1, sTabel, "[") = 0 Then
                sTabel = "[" & sTabel & "]"
            End If
            strSQL = "SELECT * FROM " & sTabel & " "
        Else
            strSQL = sTabel
        End If
    End If

    'Extra loopje, om de punt-komma's te verwijderen.
    Do Until Right(strSQL, 1) <> ";"
        strSQL = Left(strSQL, Len(strSQL) - 1)
    Loop

    sFilter = " WHERE (OpdrachtID=" & sBon & ");"
    strSQL = strSQL & sFilter
''tmp = InputBox("", "", strSQL)
    Reports(sRapport).RecordSource = strSQL
    DoCmd.Close acReport, sRapport, acSaveYes

End Sub

Sub SendEmail(Optional bijlage, Optional Email, Optional Bon, Optional
Tekst)
''    DoCmd.SendObject acSendReport, , , sAdres, , , "Bestelling " & 
OpdrachtID
    DoCmd.SendObject acSendReport, bijlage, "SnapshotFormat(*.snp)", Email, , , "Bestelling " & Bon, Tekst, False

End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan