Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[VBA - Outlook] Code werkt niet na toevoegen één IF

Pagina: 1
Acties:

  • F.West98
  • Registratie: Juni 2009
  • Laatst online: 12:05

F.West98

Alweer 16 jaar hier

Topicstarter
Hallo,

Ik kom een raar probleempje tegen waar ik niet uit kom.Na het toevoegen van een IF in de code werkt de code niet meer gedeeltelijk, en ja, de if werkt wel :+

Om te beginnen de code:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub moEmailCheckSend_BeforeCheckNames(Cancel As Boolean)
    If moEmailCheckSend.SenderEmailAddress = "foo@bar.com" Then 'HIER GAAT HET MIS
        Dim ontvanger As String
        Dim blockeditem As Variant
        ontvanger = moEmailCheckSend.To
        Dim blocked(0 To 4) As String
        blocked(0) = "@hotmail"
        blocked(1) = "@msn"
        blocked(2) = "@live"
        blocked(3) = "@outlook"
        blocked(4) = "@foooo"
        For Each blockeditem In blocked
            If InStr(ontvanger, blockeditem) Then
                If MsgBox("Je wil naar een geblokkeerd adres versturen!! Stoppen?", vbOKCancel + vbQuestion) = vbOK Then
                    Cancel = True
                    Exit For
                End If
            End If
        Next blockeditem
    End If 'HIER DUS OOK
End Sub


Als ik de IF (met de opmerking) weghaal, dan werkt de code, krijg ik de melding en returned hij true (als ik een blocked mailadres invoer) en verstuurt hij de mail dus NIET.
Als ik de If erbij zet krijg ik de melding nog wel, maar returned hij true NIET en stuurt hij de mail wel.
Ik kom er niet uit, dus: Wat gaat er mis?


Ik zat te twijfelen tussen hier en CSA, hiervoor gekozen

[ Voor 16% gewijzigd door F.West98 op 06-01-2013 00:40 ]

2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI


Verwijderd

Je doet een toewijzing met het volgende stukje code
Visual Basic .NET:
1
If moEmailCheckSend.SenderEmailAddress = "foo@bar.com"

In plaats van een vergelijking, namelijk
Visual Basic .NET:
1
If moEmailCheckSend.SenderEmailAddress == "foo@bar.com"

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

VBA en VB kennen geen == en vergelijkingen gaan daarin ook gewoon met =.

Verder: Waar hoort mijn topic?
PRG>>CSA

[ Voor 30% gewijzigd door NMe op 06-01-2013 12:29 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • F.West98
  • Registratie: Juni 2009
  • Laatst online: 12:05

F.West98

Alweer 16 jaar hier

Topicstarter
Ik heb het inmiddels al anders opgelost, maar ik vraag me nog steeds wel af waarom dit niet werkt

2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Als de IF-statement er staat en moEmailCheckSend.SenderEmailAddress heeft niet de waarde "foo@bar.com" dan doet de sub niets en krijg je het gedrag zoals je dat beschrijft. Wat retourneert een msgbox moEmailCheckSend.SenderEmailAddress? (Bij versturen met de te bewaken afzender, natuurlijk)

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • F.West98
  • Registratie: Juni 2009
  • Laatst online: 12:05

F.West98

Alweer 16 jaar hier

Topicstarter
F_J_K schreef op zondag 06 januari 2013 @ 18:59:
Als de IF-statement er staat en moEmailCheckSend.SenderEmailAddress heeft niet de waarde "foo@bar.com" dan doet de sub niets en krijg je het gedrag zoals je dat beschrijft. Wat retourneert een msgbox moEmailCheckSend.SenderEmailAddress? (Bij versturen met de te bewaken afzender, natuurlijk)
Die is gewoon foo@bar.com. Verder wordt ook de melding van het geblokkeerde adres getoond. Maar het verzenden wordt niet geannuleerd.

2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

krijg ik de melding nog wel
Ah inderdaad. Hmm. Code lijkt OK.. Zou niets mogen uitmaken, maar doe evt exit Sub ipv exit IF (al zijn IMHO beide niet erg mooi :o )

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • F.West98
  • Registratie: Juni 2009
  • Laatst online: 12:05

F.West98

Alweer 16 jaar hier

Topicstarter
F_J_K schreef op zondag 06 januari 2013 @ 19:52:
[...]

Ah inderdaad. Hmm. Code lijkt OK.. Zou niets mogen uitmaken, maar doe evt exit Sub ipv exit IF (al zijn IMHO beide niet erg mooi :o )
Geen verschil....

2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Vreemd. De toevoeging van het if-statement verklaart niet wat je beschrijft. Sowieso lijkt de code iets anders te doen dan je beschrijft: cancel = true annuleert het resolven van de mailadressen. Bij geldige adressen kan (dacht ik) het verzenden gewoon doorgang vinden. Er wordt strikt genomen geen waarde geretourneerd (het is een sub) maar een variabele gezet. Hoe controleer je die waarde dan? Wat is de rest van de code? Wat wil je eigenlijk bereiken? Waar krijgt het mo zijn waarde toegewezen?

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • F.West98
  • Registratie: Juni 2009
  • Laatst online: 12:05

F.West98

Alweer 16 jaar hier

Topicstarter
Hoe controleer ik die waarde: geen idee, de basis van internet geplukt (onsendbutton die dingen doen) en aangepast wat 'ie dan moet doen.
Wat is de rest van de code:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Option Explicit
'Add to 'ThisOutlookSession' in VBA
Private WithEvents moEmailCheckSend As Outlook.MailItem
Private WithEvents moInspectors     As Outlook.Inspectors


Private Sub Application_MAPILogonComplete()
    Set moInspectors = Application.Inspectors
End Sub

'EERDER DEEL HIER

Private Sub moInspectors_NewInspector(ByVal Inspector As Inspector)
    Select Case Inspector.CurrentItem.Class
        Case olMail
            Set moEmailCheckSend = Inspector.CurrentItem
    End Select
End Sub

Wat wil ik bereiken: Dat als het ontvanger mailadres een @msn/outlook/hotmail/live adres is een melding geven dat die geblokkeerd zijn bij de server en dat ze via een ander mailadres moeten verzenden (en daar de melding niet toont). Inmiddels is het beter opgelost (hij herkent per to adres (is een contact dus kan ook naam zijn) wat de mailadres is, controleert die, als die dan matcht verandert hij het senderaccount naar de juiste die niet geblokkeerd is bij msn/enz en verzendt daarna de mail), maar ik vroeg me nog steeds af waarom dit MET de if niet werkt.

2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI

Pagina: 1