o.b.v. resultaat query rapport verzenden of niet

Status
Niet open voor verdere reacties.

Gruytkluit

Gebruiker
Lid geworden
13 aug 2009
Berichten
24
Beste mensen,

Ik heb een vraagje over het uitvoeren\afbreken van een macro.
In Access wordt een rapport gegenereerd op basis van een query. Dit rapport verstuur ik via een macro met het commando objectverzenden. Ik wil deze macro alleen laten uitvoeren als er data uit de query komt. Als het resultaat van de query leeg is moet de macro afgebroken worden. Ik heb al het e.e.a. geprobeerd met een voorwaarde in de macro, helaas krijg ik het niet aan de praat.

Heeft iemand een idee??

Alvast bedankt
 
Je kunt wel een check doen op de query die onder het rapport ligt, waarin je controleert of er records in de recordset zitten.
Persoonlijk doe ik helemaal niks met macro's, maar ik zou wel kunnen kijken of ik er een VBA code voor kan maken, want zo zou ik het zelf doen.
Kun je een gestript voorbeeldje posten?

Michel
 
Hallo Michel,

Ik heb effe een testdatabase gemaakt waarin ik op dezelfde wijze werk.
De query heb ik nu effe gemaakt met een invulveld.
Op deze query is een rapport gebaseerd en vervolgens stuur ik dat rapport door met een macro. Ik zou mij kunnen voorstellen dat je met VBA eerst checkt wat het resultaat van de query is en vervolgens wel of niet de macro uitvoert.

Ik heb echter geen idee hoe die code eruit moet zien en waar ik deze moet ingeven. Het zou erg fijn zijn als je mij hiermee wilt helpen.

Alvast bedankt en groet


Remco
 

Bijlagen

Laatst bewerkt:
Zal er een blik op werpen!

Michel
 
@Gruytkluit,

Even off topic. Misschien wist je het al, maar misschien ook niet.

1. Ga in het database venster naar "Macro's.

2. Selecteer een macro.

3. Ga naar menu "Extra" ---> "Macro" en kies voor "Macro converteren naar "Visual basic".

4. Beide opties vinkje aan zetten en kies nu voor "Converteren".

In het database venster is bij "Modules" een module aangemaakt met de naam "Geconverteerde macro" met de naam van de macro. Selecteer de module en klik op "Ontwerpen". Nu zie je de VBA code die je hebt gemaakt met je macro.

Leuk leerproces toch?

mvg
Charles
 
Hallo Charles

Het is zeker een leuk leerproces.
Bedankt voor de tip

Groet
Remco
 
Hoi Remco,

Hierbij een stukje VBA met een controle op de juiste records. Ik heb deze code in een formulier onder een knop <Verzenden> gezet. Zou bij jou ook moeten werken.

Code:
Private Sub cmdVerzenden_Click()
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim strTabel As String
Dim sDatum As Date, iDatum As Double
Dim strSQL As String

    strTabel = "[testtabel]"
    sDatum = CDate(InputBox("Typ de datum:", "Datumselectie", Date))
    iDatum = CDbl(sDatum)
    strSQL = "SELECT [Post Id], Onderwerp, Hoofdcategorie, Subcategorie, [Bestemd voor], [Datum poststuk] " & vbCrLf
    strSQL = strSQL & "FROM " & strTabel & " " & vbCrLf
    strSQL = strSQL & "WHERE ([Datum poststuk]= cDate(" & iDatum & "));"
    
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset(strSQL)

    If rst.RecordCount > 0 Then
        DoCmd.SendObject acReport, "testtabel Query", "HTML(*.html)", "r_gruyters@hotmail.com", "", "", _
        "Poststukken", "Beste ....    Hierbij de posttukken van vandaag  enz", False, ""
    Else
        MsgBox "In deze selectie zitten geen records...", vbOKCancel
    End If

    rst.Close
    Set rst = Nothing
    dbs.Close
    Set dbs = Nothing
    Exit Sub

End Sub

Er zit een vertaalslag in voor de datum; i.v.m. het feit dat SQL in amerikaanse datumnotatie werkt, en je dus problemen kunt verwachten met datums als 8-6 en 6-8.

Michel
 
Hallo Michel,

Allereerst al hartelijk dank voor de code.:thumb:
Zoals je al voorspelde werkt hij prima.
Zou jij mij nog kunnen helpen met een kleine aanpassing.
In mijn voorbeeld heb ik het er niet over gehad dat ik ook graag per persoon wil filteren.
Ik zou graag nog een filter willen op het veld bestemd_voor. Dit is een tekstveld. voorbeeldwaarde "CH"

Alvast reuze bedankt

Groet

Remco

P.S. hieronder de code zoals ik deze heb ingevoerd in de database




Code:
Private Sub Verzenden_Click()
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim strTabel As String
Dim sDatum As Date, iDatum As Double
Dim strSQL As String

    strTabel = "[Inkomende post]"
    sDatum = CDate(InputBox("typ de datum:", "Datumselectie", Date))
    iDatum = CDbl(sDatum)
    strSQL = "SELECT [Poststuknummer], [Onderwerp], [Hoofdcategorie], [Subcategorie], [Bestemd_voor], [Datum_poststuk]" & vbCrLf
    strSQL = strSQL & "FROM " & strTabel & " " & vbCrLf
    strSQL = strSQL & "WHERE ([Datum_poststuk]= cDate(" & iDatum & "));"

    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset(strSQL)
    
If rst.RecordCount > 0 Then
    DoCmd.SendObject acReport, "Coen", "HTML(*.html)", "test@test.com", "", "", "Overzicht dagelijkse documenten", "Geachte heer/mevrouw,    In de bijlage een overzicht van nieuwe documenten die voor u klaar staan in het digitaal archief", False, ""
Else
    MsgBox "In deze selectie zitten geen records...", vbOKCancel
End If

    rst.Close
    Set rst = Nothing
    dbs.Close
    Set dbs = Nothing

End Sub
 
Laatst bewerkt:
Zal ik nog naar kijken. Ben zelf nog niet zo heel geweldig met mailen vanuit een formulier, maar er zijn voldoende voorbeelden te vinden...

Michel
 
Stapje verder?

Hopelijk ben ik weer een stapje verder, krijg nu de foutmelding op de volgende regel:
Set rst = dbs.OpenRecordset(strSQL)

Ik heb de volgende regel aangepast waardoor deze melding ontstaat
strSQL = strSQL & "WHERE ([Datum_poststuk]= cDate(" & iDatum & "))" & "And ([Bestemd_voor]=Bestemd_voor_CH)"

de regel was voorheen
strSQL = strSQL & "WHERE ([Datum_poststuk]= cDate(" & iDatum & "));"

Heeft iemand een idee??

Code:
Private Sub Verzenden_Click()
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim strTabel As String
Dim sDatum As Date, iDatum As Double
Dim strSQL As String

    strTabel = "[Inkomende post]"
    sDatum = CDate(InputBox("typ de datum:", "Datumselectie", Date))
    iDatum = CDbl(sDatum)
    strSQL = "SELECT [Poststuknummer], [Onderwerp], [Hoofdcategorie], [Subcategorie], [Bestemd_voor], [Datum_poststuk]" & vbCrLf
    strSQL = strSQL & "FROM " & strTabel & " " & vbCrLf
    strSQL = strSQL & "WHERE ([Datum_poststuk]= cDate(" & iDatum & "))" & "And ([Bestemd_voor]=Bestemd_voor_CH)"

    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset(strSQL)
    
If rst.RecordCount > 0 Then
    DoCmd.SendObject acReport, "Coen", "HTML(*.html)", "test@test.nl", "", "", "Overzicht dagelijkse documenten", "Geachte heer/mevrouw,    In de bijlage een overzicht van nieuwe documenten die voor u klaar staan in het digitaal archief", False, ""
Else
    MsgBox "In deze selectie zitten geen records...", vbOKCancel
End If

    rst.Close
    Set rst = Nothing
    dbs.Close
    Set dbs = Nothing

End Sub
 
Controleer de volgorde van de bibliotheken eens, en check dat, als hij wordt geladen, de DAO 3.6 bibliotheek onder de ADO bibliotheek staat. Ook kun je de DAO verwijzingen bij het declareren van de variabelen verwijderen, zodat je dus het volgende krijgt:
Dim rst as Recordset

Michel
 
Wanneer je werkt met de Jet-database (in feite dus Access) gebruik je het beste DAO ipv ADO. Zet dan die verwijzing naar ADO uit!
Als je ze beiden nodig hebt dan moet je naar beide bibliotheken verwijzen. Maar dan is het noodzakelijk om bij objectnamen die in beiden voorkomen expliciet te vermelden om welke het gaat. Dus dan wel b.v. DAO.RecordSet
 
Hallo Allemaal,

Het kan aan mij liggen, maar ik kan dit effe niet volgen.
Ik heb net in de help file het volgnde opgezocht:
Opmerking In Microsoft Access 2002 of hoger worden geen versies van de DAO-bibliotheek verstrekt of ondersteund die lager zijn dan 3.6.

Ik Werk met 2003 dus volgens mij moet dat geen probleem zijn.

Als ik de opdracht uitvoer krijg ik de volgende foutmelding:

Fout 3061 tijdens uitvoering:

Er zijn te weinig parameters. Het verwachte aantal is: 1.


Ik heb de DOA weg gehaald, maar dan werk hij nog niet.
Ik zou dit toch zo graag werkend krijgen!!!!

Alvast bedank voor jullie feedback.

Groet

Remco
 
Kun je weer een vers voorbeeldje posten? Dan zien we ook welke bibliotheken er inzitten/uitkunnen. Dit soort problemen is erg lastig (voor mij althans) om op afstand te beoordelen/op te lossen, omdat ze nogal vaag blijven.
De foutmeldingen die je krijgt hebben meestal ook niks met het probleem te maken, maar wekken dus wel de indruk dat je, in jouw geval dus, een parameter ergens bent vergeten. Waarschijnlijk is dat dan ook het probleem niet.

Michel
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan