VBA binnen Outlook gebruikt voor e-mailverzending

Status
Niet open voor verdere reacties.

SPeters

Gebruiker
Lid geworden
9 aug 2013
Berichten
6
Hallo,

Ik heb het volgende gebouwd via Visual Basic Editor in Outlook.
Wanneer een medewerker een mail verstuurd naar een bepaald e-mailadres, dan verschijnt er een formulier welke ingevuld dient te worden door de medewerker. Wanneer de medewerker op de commandbutton "Ok" clickt, dan wordt de e-mail verstuurd met als onderwerp de gegevens die hij ingevuld heeft. Nu heb ik nog twee problemen waar ik graag hulp mee zou willen hebben:

1. Wanneer de medewerker op commandbutton "Annuleren" clickt, dan mag de mail niet verstuurd worden. (Op dit moment sluit enkel het formulier, maar wordt de mail wel vestuurd)

2. Wanneer de mail in HTML formaat verstuurd wordt, dan verschijnt de userform niet op het scherm.

Dit is de eerste keer dat ik (met hulp van een collega) iets heb kunnen "knutselen" in VBA.
Bij voorbaat dank voor de reactie.
 
Daar is zonder de code die je hebt gemaakt niet zoveel over te zeggen.
 
Hoi Edmoor,

Ik heb het volgende in mijn outlook session zitten:

PHP:
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)

Dim olApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim objFolder As Outlook.MAPIFolder
Dim Msg As Outlook.MailItem
Dim sRecip As Outlook.recipient

Set olApp = Application
Set objNS = olApp.GetNamespace("MAPI")
Set Msg = Item

Msg.Subject = "Subject"


Dim str1 As String
Dim str2 

Dim answer
Dim strName As String

str1 = Msg.To
str2 = "Teste-mail"

strSubject = ""


If InStr(1, str1, str2) Then
 
    Load frmSparen
    frmSparen.Show
            
    strSubject = "REKNR " & Format(strRekeningnummer, "0000000000")

In mijn userform staat het volgende:

PHP:
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private wHandle As Long


Private Sub cmdCancel_Click()
Unload frmSparen
frmSparen.Hide
End Sub

Private Sub UserForm_Error(ByVal Number As Integer, ByVal Description As MSForms.ReturnString, ByVal SCode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, ByVal CancelDisplay As MSForms.ReturnBoolean)

End Sub

Private Sub UserForm_Initialize()

    SetWindowLong FindWindow("ThunderDFrame", Me.Caption), -16, 0
    DrawMenuBar FindWindow("ThunderDFrame", Me.Caption)
End Sub
Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
   'Code to drag the form
   If wHandle = 0 Then Exit Sub
   If Button = 1 Then
       ReleaseCapture
       SendMessage wHandle, &HA1, 2, 0
   End If
End Sub

Private Sub cmdOK_Click()

If Txtrekeningnummer = "" Then
    MsgBox "Rekeningnummer is verplicht!!"
    Exit Sub
Else
strRekeningnummer = Txtrekeningnummer.Value
End If

Unload frmSparen
frmSparen.Hide

End Sub
 
Om te beginnen: code opmaken met de PHP code is op zich al beter als geen code opmaak, maar een beetje onhandig omdat bij plakken de nummers meekomen. En die moet je dan weer weghalen. Extra handeling dus. Voortaan de gewone CODE knop ( # ) gebruiken graag!
Je kunt je probleem oplossen (overigens logisch dat je hem hebt; je roept een formulier aan en je stuurt daarna een mail weg zonder check op dat formulier) door een Public variabele te maken (bijv. bCancel As Boolean) en die te vullen met je knoppen.
Code:
Private Sub cmdCancel_Click()
    bCancel = True
    Unload frmSparen
End Sub
en
Code:
Private Sub cmdOK_Click()
    If Txtrekeningnummer = "" Then
        MsgBox "Rekeningnummer is verplicht!!"
        Exit Sub
    Else
        strRekeningnummer = Txtrekeningnummer.Value
    End If
    bCancel = False
    Unload frmSparen
End Sub
Bij je verzendprocedure check je dan eerst wat de status van bCancel is. Bij True is er op annuleren geklikt, en stop je de verdere procedure. Met False op OK, en ga je door.
 
Hi OctaFish,

Ik heb het userform aangepast zoals je hebt aangegeven en de public variabele toegevoegd aan mijn module. Ik krijg het echter in de verzendprocedure niet voor elkaar om te checken op deze variabele.
Heb je daar nog een oplossing voor.
Bij voorbaat dank. Ik ben nog echt heel nieuw in VBA.
 
Declareer die bCancel als globale variabele, dus bovenin de code buiten de Subs.
Dim bCancel As Boolean
 
Hoi Edmoor,

Done, maar werkt helaas nog niet. Ik denk dat ik nog iets van logica moet bouwen om het daadwerkelijk verzenden van de mail te stoppen. Ik zit in outlook natuurlijk al in de verzendprocedure op het moment dat het formulier geopend wordt. Op dit moment wordt het formulier gesloten en wordt het onderwerp niet overschreven met de juiste gegevens, maar de daadwerkelijke verzending vindt nog steeds plaats.

Enig idee hoe ik het daadwerkelijk verzenden van de e-mail kan stoppen?

Bedankt.
 
Nadat je die variabele hebt gedeclareerd kun je hem op de juiste plekken gebruiken.
"Werkt niet" is een beetje tekort door de bocht.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan