VBA Code om terug te gaan naar verplicht veld

Status
Niet open voor verdere reacties.

Dion3010

Gebruiker
Lid geworden
31 jul 2019
Berichten
10
Heb Middels jullie forum gezocht hoe ik kan terugkeren naar een verplicht veld in mijn formulier dat niet is ingevuld, echter na klikken op OK gaat de cursor niet naar veld TxtNaam, maar gaat door naar de mailbox en zet het formulier gereed voor verzending. Waarom gaat de cursor niet terug naar het tekstveld?

Private Sub CommandButton1_Click()
If TxtNaam = "" Then
response = MsgBox("U dient een naam in te voeren", 0, "")
End If
If reponse = "0" Then
TxtNaam.SetFocus
End If
'Updated by Extendoffice 2017/9/14
Dim xOutApp As Object
Dim xOutMail As Object
Dim xMailBody As String
On Error Resume Next
Set xOutApp = CreateObject("Outlook.Application")
Set xOutMail = xOutApp.CreateItem(0)
ActiveWorkbook.Save
xMailBody = "Beste collega's, " & vbNewLine & _
"" & vbNewLine & _
"Gelieve deze bestelling te plaatsen." & vbNewLine & _
"" & vbNewLine & _
"Met vriendelijke groet,"
On Error Resume Next
With xOutMail
.to = "bestellingen@humankind.nl"
.CC = "facilitydesk@humankind.nl"
.BCC = ""
.Subject = "Bestelling voor Facility"
.Body = xMailBody
.Attachments.Add ActiveWorkbook.FullName
.Display 'or use .Send
End With
On Error GoTo 0
Set xOutMail = Nothing
Set xOutApp = Nothing
End Sub
 
Je kan beter een voorbeeld document plaatsen.
De code die je plaatste is zonder codetags niet te lezen.

Het enige dat me er in opvalt zijn de weer totaal overbodige On Error Resume Next regels.
Daarnaast gaat de code na de .SetFocus gewoon door, dus die opdracht heeft geen nut.
 
Laatst bewerkt:
Omdat je hier nieuw bent wat meer aandacht aan besteed.
Je mail code niet gecontroleerd, maar doe het eens zo:
Code:
Private Sub txtNaam_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If txtNaam.Text = "" Then
        MsgBox "U dient een naam in te geven", vbCritical
        Cancel = True
    End If
End Sub

Private Sub CommandButton1_Click()
    Dim xOutApp As Object
    Dim xOutMail As Object
    Dim xMailBody As String

    Set xOutApp = CreateObject("Outlook.Application")
    Set xOutMail = xOutApp.CreateItem(0)
    ActiveWorkbook.Save
    xMailBody = "Beste collega's, " & vbNewLine & _
        "" & vbNewLine & _
        "Gelieve deze bestelling te plaatsen." & vbNewLine & _
        "" & vbNewLine & _
        "Met vriendelijke groet,"
    
    With xOutMail
        .to = "bestellingen@humankind.nl"
        .CC = "facilitydesk@humankind.nl"
        .BCC = ""
        .Subject = "Bestelling voor Facility"
        .Body = xMailBody
        .Attachments.Add ActiveWorkbook.FullName
        .display 'or use .Send
    End With
    
    Set xOutMail = Nothing
    Set xOutApp = Nothing
End Sub
 
Laatst bewerkt:
Hallo Ed,

Daar zit voor mij het probleem, waarom gaat het programma na setfocus niet terug naar het tekstveld (TxtNaam), dat is nu juist wat de lus zou moeten doen?


Ik ben pas net begonnen met VBA, dit is ook mijn eerste vraag op dit forum, dus ik zoek nog even naar de juiste vorm.

Alvast dank voor jouw reactie,

Dion
 
Kijk eens naar mijn reactie in #3.
 
Sorry Ed, had je vorige bericht nog niet gelezen, ga ermee ad slag!
 
Kan gebeuren :)
 
Ik heb een knop 'verzenden' in het formulier met daaronder de code van de commandbutton (deze code werkt overigens prima). Dus pas als daarop wordt geklikt moet hij controleren of het veld txtnaam is ingevuld. Door de code voor de code van de verzendknop te zetten (jouw suggestie), controleert hij niet op de inhoud van het tekstveld en gaat met het indrukken van de knop 'verzenden' direct naar Outlook.
 
Daarom zei ik, plaats je document, of een relevant voorbeeld er van.
 
Dat is geen Excel document maar een plaatje van een userform.
 
Dus na klikken op verzenden, checken op Naam besteller (TxtNaam), leeg dan meding, na ok terug naar veld Naam besteller
 
Hoe voeg ik dan het bestand toe, sorry voor de domme vraag, maar kan het niet vinden?
 
Vragen zijn nooit dom :)

Klik op Ga geavanceerd.
Klik dan in het nieuwe keuzemenu op de paperclip.
 
Heb het bestand geupload
 

Bijlagen

  • Bestelformulier Inkoop & Logistiek.xlsm
    97 KB · Weergaven: 41
Doe het dan zo. Gebruik in ieder geval nooit On Error Resume Next, tenzij je zelf de foutafhandeling doet:
Code:
Private Sub CommandButton1_Click()
    If TxtNaam.Text = "" Then
         MsgBox "U dient een naam in te geven", vbCritical
         TxtNaam.Activate
         Exit Sub
    End If
    
    Dim xOutApp As Object
    Dim xOutMail As Object
    Dim xMailBody As String
     
    Set xOutApp = CreateObject("Outlook.Application")
    Set xOutMail = xOutApp.CreateItem(0)
    ActiveWorkbook.Save
    xMailBody = "Beste collega's, " & vbNewLine & _
                 "" & vbNewLine & _
                 "Gelieve deze bestelling te plaatsen." & vbNewLine & _
                 "" & vbNewLine & _
                 "Met vriendelijke groet,"
    With xOutMail
        .to = "bestellingen@humankind.nl"
        .CC = "facilitydesk@humankind.nl"
        .BCC = ""
        .Subject = "Bestelling voor Facility"
        .Body = xMailBody
        .Attachments.Add ActiveWorkbook.FullName
        .Display [COLOR="#006400"]'or use .Send[/COLOR]
    End With
    Set xOutMail = Nothing
    Set xOutApp = Nothing
End Sub
 
Laatst bewerkt:
Fijn, dit werkt!

Alweer veel geleerd vanavond tijdens mijn eerste bezoek, hartstikke bedankt voor je hulp:):)
 
Vooral dat een voorbeeld document veel duidelijkheid schept ;)
 
Ik zal er de volgende keer aan denken en weet nu hoe!!

Nogmaals dank en fijne avond,

Dion
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan