Waarden opnemen in e-mail werkt niet

Status
Niet open voor verdere reacties.

scw

Gebruiker
Lid geworden
5 jun 2009
Berichten
530
Goedendag, ik heb het volgende stukje code om gegevens te verzenden per mail. Het werkt op zich goed, alleen wil ik mijn 'Body' uitbreiden met nog meer gegevens die zijn ingevuld in het formulier. Het werkt goed met Aanname, maar zodra ik & Betrokkene erbij plaats gaat het mis (of een ander veld dan Betrokkene). Ik krijg dan de melding: Typen komen niet overeen.

Nu heb ik van het veld Betrokkene al een tekstveld gemaakt (net zoals Aanname) i.p.v. een numeriek (gebaseerd op een andere tabel met medewerkers), maar dat bood geen soelaas. Toch zijn het beide keuzelijsten. Wat doe ik nu verkeerd???

Het veld Soort geeft die overigens wel weer, maar dan weer numeriek :-( , hopelijk kan dat ook verholpen worden met jullie hulp

Alvast bedankt hoor.


Code:
Private Sub Opslaan_Click()
On Error GoTo Err_Opslaan_Click

Dim objOutlook As Object
Dim objEmail As Object

Datum = Me!Datum
Aanname = Me!Aanname
Betrokkene = Me!Betrokkene
Soort = Me!Soort

Set objOutlook = CreateObject("Outlook.application")
Set objEmail = objOutlook.CreateItem(olMailItem)

With objEmail
    .To = "mail@adres.nl"
    .Subject = "Verbeterpunt " & Soort
    .Body = "Dit is tekst: " & Aanname & "." & Chr$(13) & _
    Chr$(13) & _
    "Betrokkene: " & Betrokkene
    Chr$ (13) & _
    Chr$(13) & "----------------------------------------------------------" & _
    Chr$(13) & "Dit is ook tekst."
    .Send
 
Laatst bewerkt door een moderator:
Zonder te testen of iets dergelijks, zo op het eerste gezicht:
Als je je variabelen Aanname, Betrokken en Soort eerst eens declareert?

Zoiets dus:
Code:
dim Aanname as String
etc.

Zqwiqly
 
Hoi beste Zqwiqly,

Had ik inderdaad geprobeerd, maar het had nog weinig effect. Ik weet bijna wel zeker dat ik het in die hoek moet zoeken... Wat kan ik nog meer schrijven?
 
Wacht even, ik zie nu dat er ook sprake is van keuzelijsten?
Zijn alle drie keuzelijsten?
Zo ja, roep je ze met de juiste naam aan (oftewel: is de naam 'Betrokkene' ook de naam van de keuzelijst)?
En dan komen we waarschijnlijk op het volgende uit:
Welke waarde is de bepalende waarde in je keuzelijst? Is dat de eerste waarde (numeriek)? Ik kan me bijvoorbeeld voorstellen dat je bij Betrokkene liever een naam ziet staan dan een nummer.....

Als je antwoord kan geven op deze vragen, fantastisch, als je een uitgeklede (zonder privegegevens) database bij je antwoord kan doen, nog beter, dan zien we wat er gebeurt! ;)

Voor nu, 't is 00:16 alhier, dus je antwoord zie ik morgen.

Zqwiqly.
 
Hey die beste Zqwiqly,

Dank voor je antwoorden. Ik hoop dat je inmiddels helemaal uitgeslapen bent!

Bijgaand heb ik mijn database toegevoegd als bijlage. Er is inderdaad sprake van keuzelijsten. Het gekke is dat de Aanname keuzelijst wel gepakt wordt, maar overige keuzelijsten niet :-(. Het verschil tussen de Aanname is dat die gebaseerd is op een query en de overige gewoon op tabellen.

Inderdaad hebben de keuzelijsten dezelfde namen, dus Betrokkene, Aanname, Datum etc. Ik had niet de discipline om daar overal ook nog eens txtNaam voor te plaatsen enzo.
Je hebt gelijk dat ik natuurlijk de naam wil zien i.p.v. een nummer.

Alvast bedankt voor je hulp hiermee,

Yuri
 

Bijlagen

  • voorbeeld.zip
    25,8 KB · Weergaven: 21
Hoi,

Thnx, ik ben uitgeslapen :)

Ik heb wat zitten frutten in de code die je onder je knop hebt staan. Alle code mbt het versturen heb ik even wegge-'-t aangezien ik geen outlook gebruik. Met een msgbox commando heb ik wel even bekeken wat de waarden zijn voor de drie variabelen. Uitkomst: "Rene Froger, 9, 2". Maw Aanname doet het goed, Betrokkene en Soort geven een getal als uitkomst. De reden geef je zelf al: Aanname is gebaseerd op een query, met slechts 1 kolom, terwijl Betrokkene en Soort gebaseerd zijn op een tabel. Meest eenvoudige oplossing: even twee querietjes maken die je comboboxen vullen (op dezelfde manier zoals bij Aanname) en de boxen baseren op de queries.

Andere methode: in VBA middels een recordset opzoeken welke namen horen bij welke waarden van Betrokkene en Soort. Dan doe je eigenlijk hetzelfde als met de queries, alleen in code en pas op het moment dat je op de knop klikt.

Sowieso toch nog even die
Code:
Dim Betrokkene, Aanname, Soort as String
toevoegen.

Volgens mij moet het dan werken.

Suc6,

Zqwiqly.
 
Hey die Zqwiqly,

Erg bedankt voor je hulp. Ik zou het liefst voor optie 2 gaan (vind ik toch het netst staan), echter ook met de Dim krijg ik nu nog steeds de melding "Typen komen niet overeen"... kreeg jij deze melding niet? Mogelijk heb je nog suggesties voor me om toch nog met Dim te werken...

Anders moet ik inderdaad toch maar alles in query's gaan zetten; zou het hetzelfde effect hebben als ik van de tabel Verbeterpunten gewoon een query maak en dan het formulier daar op baseer? Of moet ik echt voor iedere tabel een query maken?

Zou ik je alsjeblieft nog een laatste vraag mogen stellen (volgens mij ben je een echte expert!)? Zoals je ziet heb ik drie keuzerondjes voor de Status, ik zou graag willen dat die deze statussen overneemt in de tabel Status, dus "afgehandeld" als tekst of "open" als tekst. Helaas kan ik de VBA code daarvoor nergens vinden, terwijl naar mijn idee het toch een vaker voorkomend iets is??

Thnx-a-lot Yuri!
 
Hoi,

De makkelijkste optie is met de queries. Die rammel je zo in elkaar met de wizzard. Uiteindelijk heb je niets anders nodig dan de ID-waarde en de bijbehorende naam. In feite zijn de queries hetzelfde als degene die je al gemaakt hebt. Als je per se het een en ander in VBA wil hebben dan wil ik die code wel voor je schrijven, echter dat wordt in het weekend... ;)

Mbt de keuzerondjes:
Met een simpele If-Then loop kom je er. Zet het veld 'status' op je formulier (eventueel verborgen). Als Keuzerondje1 = True Dan (komtie: ) Me!Status.Value = "In behandeling".
En zo verder. Als laatste een Form.Refresh om je wijzigingen op het scherm weer te geven. Deze code zet je bij de gebeurtenis 'na bijwerken'. Denk dat je daar zelf wel uit komt na deze voorzet.

Suc6,

Zqwiqly.
 
Zqwiqly, perfecte voorzet zonder meer!

Helaas weet ik zelfs nog voor open doel te missen :-( :

Veld status is geplaatst op formulier
Code:

Private Sub Kader71_AfterUpdate()
If Keuzerondje74 = True Then Me!Status.Value = "In behandeling"
If Keuzerondje76 = True Then Me!Status.Value = "Behandeld"
If Keuzerondje78 = True Then Me!Status.Value = "Open"
Form.Refresh
End Sub


Krijg ik de foutmelding:

Fout 2427 tijdens uitvoering:

U hebt een expressie zonder waarde opgegeven.


:confused:
Gelukkig zie ik wel dat bij optie 76 en 78 al wordt ingevuld in het tekstvak status.


Wat betreft het andere punt zou ik geweldig blij zijn met het in VBA plaatsen van jou, ik wil daar absoluut wel het geduld voor op brengen tot het weekend! Ik weet niet hoe ik je moet bedanken....

Groetjes Yuri!

ps. locatie: Roemenië?!
 
Hoi,

Foutje mijnerzijds, had niet gezien dat de rondjes in een kader staan. Aldus wordt de code:
Code:
If Me!Kader71 = 1 Then Me!Status.Value = "In behandeling"
If Me!Kader71 = 2 Then Me!Status.Value = "Behandeld"
If Me!Kader71 = 3 Then Me!Status.Value = "Open"

Als je bij elk keuzeronde in de eigenschappen bij Optiewaarde kijkt, zie je dat daar de waarden 1, 2 en 3 staan aangegeven. Een van de drie is dus de uitkomst van het kader als je op een rondje klikt. Haal je de form.refresh weg zie je dat 'ie vrolijk elke keer de status verandert en je geen foutmelding meer krijgt.

Suc6,

Zqwiqly.

Ps. Yep, Roemenie. Ploiesti om precies te zijn. Zoek maar eens op op Google Maps. Ah, en met betrekking tot het bedanken: kom een keer langs, doen we een biertje (halve liter voor 75 eurocent) :p
 
YESSSS!!! Functioneel werkt het helemaal!! Enige punt is nog dat het selecteren van de keuzerondjes nog niet helemaal soepelistisch gaat: beginstand staat het rondje keurig, maar na een klik op een ander rondje verdwijnt het rondje helemaal en komt niet meer terug. Ik heb al geprobeerd zonder Form.Refresh, misschien zijn we iets vergeten van Enabled of zo?? Desgewenst stuur ik het nog even als bijlage als je dat wilt.

Ik begrijp nu we dat tekstvak status hebben, is het nu natuurlijk een eitje van het weekend om die waarde te onttrekken voor het samenstellen van de e-mail! geweldig!

Wow, ik heb gekeken naar het plaatsje: ver weg en zo klein dat ik dacht dat Google niet meer laadde ahaha zo ver moest ik weer terugzoomen. "Kom een keer langs" zegt ie dan ahahah! Het biertje mag ook wel meer dan 75 cent kosten hoor, want die is dan zeker voor mij! Ben reuzeblij dat ik dit nu na lange tijd heb kunnen oplossen dankzij jou.:thumb:
 
Hoi,

Had nog even een gaatje :cool:, dus even snel in elkaar gezet:
Code:
Private Sub Opslaan_Click()
On Error GoTo Err_Opslaan_Click

Dim objOutlook As Object
Dim objEmail As Object
Dim Con, Cont As Object
Dim Rs, Rst As Object
Dim stSql As String

Datum = Me!Datum
Aanname = Me!Aanname

Set Con = Application.CurrentProject.Connection
stSql = "SELECT [Naam] FROM tblMedewerkers "
stSql = stSql & "WHERE [medewerkerID] = " & Me!Betrokkene
Set Rs = CreateObject("ADODB.Recordset")
Rs.Open stSql, Con, 1

Set Cont = Application.CurrentProject.Connection
stSql = "SELECT [Soort Verbeterpunt] FROM tblSoortVerbeterpunt "
stSql = stSql & "WHERE [SoortVerbeterPuntID] = " & Me!Soort
Set Rst = CreateObject("ADODB.Recordset")
Rst.Open stSql, Con, 1

Set objOutlook = CreateObject("Outlook.application")
Set objEmail = objOutlook.CreateItem(olMailItem)

With objEmail
    .To = "mail@adres.nl"
    .Subject = "Verbeterpunt " & Rst![Soort Verbeterpunt]
    .Body = "Er is een verbeterpunt toegevoegd door " & Aanname & "." & Chr$(13) & _
    Chr$(13) & _
    "Betrokkene: " & Rs!Naam
    Chr$ (13) & _
    Chr$(13) & "----------------------------------------------------------" & _
    Chr$(13) & "Dit is een automatisch gegenereerde e-mail."
    .Send

DoCmd.RunCommand acCmdSaveRecord
DoCmd.Close acForm, "Verbeterpunt toevoegen"
End With

Rs.Close
Rst.Close

Set Con = Nothing
Set Cont = Nothing
Set Rs = Nothing
Set Rst = Nothing

Exit Sub

Even kort getest middels een msgbox en hij geeft de namen weer zoals het hoort.
Nou jij nog even testen in de email variant :thumb:

Suc6,

Zqwiqly.

Wow, ik heb gekeken naar het plaatsje: ver weg en zo klein dat ik dacht dat Google niet meer laadde ahaha zo ver moest ik weer terugzoomen. "Kom een keer langs" zegt ie dan ahahah! Het biertje mag ook wel meer dan 75 cent kosten hoor, want die is dan zeker voor mij! Ben reuzeblij dat ik dit nu na lange tijd heb kunnen oplossen dankzij jou.
Hehe.... 'T is duidelijk dat Goegel hier nog niet echt geweest is... Ploiesti is niet echt klein hoor, ongeveer 250.000 inwoners! :D Ow ja, en als ik eenmaal aan het bier ga, blijft het niet bij eentje.... :p

Edit:
Ik ga nog even kijken naar het rondjes probleem, dat is raar.
 
Laatst bewerkt:
En als laatste het rondjesprobleem:
Even bij de eigenschappen van het kader bij 'Besturingselementbron' kijken. Daar staat nu 'Status'. Als je dat weghaalt doet 'ie het perfect. Het idee hierachter is dat het kader in feite onafhankelijk is. Het is niet gebonden aan een van de velden in je tabellen. In feite is het alleen maar een besturingsmethode voor het element 'Status'. Dmv de If-Then statements bestuur je immers 'Status'. Vandaar dus een onafhankelijk kader.

De Form.Refresh kan je inderdaad weglaten.

Zo, en nu een biertje :p
Cheers,

Zqwiqly.
 
YEAHHHHH het werkt compleet!! Je hebt mijn dag echt gemaakt! Hartstikke leuk!

HO HO HO nog niet aan het bier ahaha! Nog net geen weekend... Dit mag je ook wel uitstellen tot het weekend hoor, als je geen tijd meer hebt:

Pfff de code gaat me nu echt boven de pet voor wat betreft het mailen: wat is het verschil eigenlijk tussen "con" en "cont"?

Ik krijg nog steeds de melding dat de typen niet overeenkomen. Toen heb ik Betrokkene keuzelijst niets in geselecteerd, toen kreeg ik de melding:
Syntax error (missing operator) in query expression '[medewerkerID]='.

Dus het lijkt bij Betrokkene nog niet goed te gaan.

De overige velden van het formulier had ik er nog niet bij betrokkken in de e-mail code, maar kan ik gewoon die tekst kopieren en dan de namen veranderen of werkt het zo niet?
 
Even wat uitleg dan maar :D . 'T is handig om eerst te begrijpen wat er gebeurd alvorens verder te gaan.

Declareren van variabelen:
Code:
Private Sub Opslaan_Click()
On Error GoTo Err_Opslaan_Click

Dim objOutlook As Object
Dim objEmail As Object
Dim Con, Cont As Object
Dim Rs, Rst As Object
Dim stSql As String

Datum = Me!Datum
Aanname = Me!Aanname

De query om de medewerker naam te selecteren aan de hand van Me!Betrokkene.
Code:
Set Con = Application.CurrentProject.Connection
stSql = "SELECT [Naam] FROM tblMedewerkers "
stSql = stSql & "WHERE [medewerkerID] = " & Me!Betrokkene
Set Rs = CreateObject("ADODB.Recordset")
Rs.Open stSql, Con, 1

De query om het soort verbeterpunt te selecteren aan de hand van Me!Soort:
Code:
Set Cont = Application.CurrentProject.Connection
stSql = "SELECT [Soort Verbeterpunt] FROM tblSoortVerbeterpunt "
stSql = stSql & "WHERE [SoortVerbeterPuntID] = " & Me!Soort
Set Rst = CreateObject("ADODB.Recordset")
Rst.Open stSql, Con, 1

Jou email code: (let op even wat toegevoegd in rood)
Code:
Set objOutlook = CreateObject("Outlook.application")
Set objEmail = objOutlook.CreateItem(olMailItem)

With objEmail
    .To = "mail@adres.nl"
    .Subject = "Verbeterpunt " & Rst![Soort Verbeterpunt]  [COLOR="Red"]Rst is de recordset die hierboven geopend is, 
waarin we het soort verbeterpunt selecteren aan de hand van de opgegeven waarde in combobox Soort[/COLOR]
    .Body = "Er is een verbeterpunt toegevoegd door " & Aanname & "." & Chr$(13) & _
    Chr$(13) & _
    "Betrokkene: " & Rs!Naam [COLOR="Red"]Rs is de naam van de recordset die we geopend hebben 
voor het betrekken van de naam gebaseerd op Me!Betrokkene[/COLOR]
    Chr$ (13) & _
    Chr$(13) & "----------------------------------------------------------" & _
    Chr$(13) & "Dit is een automatisch gegenereerde e-mail."
    .Send

DoCmd.RunCommand acCmdSaveRecord
DoCmd.Close acForm, "Verbeterpunt toevoegen"
End With

Hier sluiten we de recordsets af en stellen alles weer op nul. Dit om geheugenvervuiling te voorkomen en eventueel verkeerd gebruik van waarden in volgende recordsets.
Code:
Rs.Close
Rst.Close

Set Con = Nothing
Set Cont = Nothing
Set Rs = Nothing
Set Rst = Nothing

Exit Sub

Het feit dat je een foutmelding krijgt als je niets invult in de combobox Betrokkene is logisch. Je probeert dan een naam uit je tabel op te halen gebaseerd op ID = niets (want niets geselecteerd).

Als je de foutmelding krijgt 'typen komen niet overeen' en je volgt de foutopsporing van VBA, welke regel wordt dan geel gemaakt? Ik krijg namelijk geen foutmelding (al heb ik het email stuk 'uit' staan, want geen Outlook).

Zqwiqly.

Ow, mbt con en cont... er is geen verschil. Deze variabelen geven alleen aan dat de connectie naar het huidige project moet lopen. Voor het overzicht en structuur heb ik er wel twee gebruikt, 1 voor elke query.
 
OK OK, het lastige was dat er niks geel werd gemaakt door Access. Maar ik heb gecontroleerd en wat spaties verwijderd en gespeeld met hoofdletters, nu kwam dat allemaal overeen. Heb ik opnu getest, met de volgende code:

Private Sub Opslaan_Click()
On Error GoTo Err_Opslaan_Click

Dim objOutlook As Object
Dim objEmail As Object
Dim Con, Cont As Object
Dim Rs, Rst As Object
Dim stSql As String

Datum = Me!Datum
Aanname = Me!Aanname

Set Con = Application.CurrentProject.Connection
stSql = "SELECT [Naam] FROM tblMedewerkers"
stSql = stSql & "WHERE [MedewerkerID] = " & Me!Betrokkene
Set Rs = CreateObject("ADODB.Recordset")
Rs.Open stSql, Con, 1

Set Cont = Application.CurrentProject.Connection
stSql = "SELECT [Soort verbeterpunt] FROM tblSoortverbeterpunt"
stSql = stSql & "WHERE [SoortverbeterpuntID] = " & Me!Soort
Set Rst = CreateObject("ADODB.Recordset")
Rst.Open stSql, Con, 1

Set objOutlook = CreateObject("Outlook.application")
Set objEmail = objOutlook.CreateItem(olMailItem)

With objEmail
.To = "mail@adres.nl"
.Subject = "Verbeterpunt " & Rst![Soort Verbeterpunt]
.Body = "Er is een verbeterpunt toegevoegd door " & Aanname & "." & Chr$(13) & _
Chr$(13) & _
"Betrokkene: " & Rs!Naam
Chr$ (13) & _
Chr$(13) & "----------------------------------------------------------" & _
Chr$(13) & "Dit is een automatisch gegenereerde e-mail."
.Send

DoCmd.RunCommand acCmdSaveRecord
DoCmd.Close acForm, "Verbeterpunt toevoegen"
End With

Rs.Close
Rst.Close

Set Con = Nothing
Set Cont = Nothing
Set Rs = Nothing
Set Rst = Nothing

Exit Sub

Exit_Opslaan_Click:
Exit Sub

Err_Opslaan_Click:
MsgBox Err.Description
Resume Exit_Opslaan_Click

End Sub


Krijg ik: Syntax error in FROM clause

Heb ik gekeken naar wat daar staat bij FROM maar zo ver ik zie klopt dat :confused:
 
Na even een 'euh?' momentje zie ik waar de fout zit:
stSql = "SELECT [Naam] FROM tblMedewerkers " <- Na tblmedewerkers moet een spatie staan.
Idem bij stSql = "SELECT [Soort verbeterpunt] FROM tblSoortverbeterpunt"

Laat je die spatie weg dan wordt de totale stSql namelijk
"SELECT [Naam] FROM tblMedewerkersWHERE [MedewerkerID] = " & Me!Betrokkene
dat kan dus niet ;)

Bij het opbouwen van een SQL query gelden in principe de normale schrijfregels: tussen twee woorden staat een spatie. Let ook op bijvoorbeeld na het = teken. Daar moet ook een spatie staan!

Zqwiqly.
 
Zqwiqly,

Heb weer even het bestand voor zover als bijlage gedaan. Ik wilde vragen of je er (van het weekend) nog even naar zou willen kijken, ik blijf de 'Functies komen niet overeen' melding houden :( Zou je dan gelijk die andere velden ook mee willen nemen voor me in de code? Zou nooit weten wat ik daar allemaal voor neer moet zetten :eek:

ps. is het eigenlijk een uur later in Ploiesti dan in Holland? Want gisteren zei je me, het is 0:16 uur hier, toen keek ik op mn klokje en zag dat het 23.16 was volgens mij....
 
Ja hoor, wil er best nog eens naar kijken. Moet je hem er alleen wel even bij doen... ;)

En yep, in roemenie is het een uur later dan in NL.

Thnx,

Zqwiqly
 
Wist zeker dat ik op de Upload knop had gedrukt:

bleek dat het bestand te groot is geweest ---> bij deze toch nog!
 

Bijlagen

  • voorbeeld.zip
    32,1 KB · Weergaven: 16
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan