• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Mail verzenden onder voorwaarden

Status
Niet open voor verdere reacties.

avdavd15

Gebruiker
Lid geworden
23 okt 2007
Berichten
55
Beste,

In het bijgevoegd voorbeeldbestand is een opzet voor het aanvragen van verplichtingen. Er zijn een aantal voorwaarden waaraan voldaan moet worden voordat het bestand per mail verzonden mag worden. Er is alleen 1 voorwaarde waar ik niet uitkom: In cel I10 moet in sommige gevallen een zogenoemd startnotitienummer staan. Als dit het geval is, kleurt de cel rood op, maar ik krijg niet voor elkaar in VB om in te stellen dat als deze cel gevuld is, deze gevuld moet zijn volgens een bepaald stramien. Dit is altijd 4 cijfers, gevolgd door een koppelteken en dan weer 3 cijfers. Bijvoorbeeld "2015-001". Is in VB in te stellen dat als de cel gevuld is, dit volgens het hiervoor genoemde stramien moet en anders een melding moet geven?

Alvast bedankt!

Groeten AlexanderBekijk bijlage Aanvragen - Verplichtingen - helpmij vb 2.xlsm
 
Dat stramien kan je bijvoorbeeld zo valideren:
Code:
    Dim str As String
    str = Range("I10")
    If Right(Left(str, 5), 1) = "-" And _
       Left(Right(str, 4), 1) = "-" Then
        MsgBox "Stramien in orde"
    End If

Als extra zou je dan nog kunnen controleren of de eerste vier en de laatste drie posities wel getallen zijn.
 
Laatst bewerkt:
Reactie op numeriek.
Code:
Sub hsv()
Dim sq, i As Long, y As Long
sq = Split(Cells(10, 9), "-")
  For i = 0 To 1
   If IsNumeric(CVar(sq(i))) Then y = y + 1
  Next i
MsgBox "Stramien " & IIf(y = 2, "", "niet ") & "in orde"
End Sub
 
Beste Edmoor en Harry,

Hartelijk dank voor jullie snelle reactie. Op de één of andere manier krijg ik hem niet werkend binnen VB. Dat zal waarschijnlijk aan mij liggen en niet aan jullie codes. Zou iemand dit in het voorbeeldbestand in het eerste bericht van mij kunnen plaatsen, zodat ik kan zien wat ik verkeerd heb gedaan?

Alvast bedankt.

Groeten Alexander
 
Dat zou dan zoiets moeten zijn:
Code:
Sub Mail()
    With Sheets("Blad1")

        If Right(Left(.Range("I10"), 5), 1) <> "-" Or _
           Left(Right(.Range("I10"), 4), 1) <> "-" Then
            MsgBox "Startnotitienummer niet correct."
            Exit Sub
        End If
        
        If .Range("C8") = "" Or .Range("C9") = "" Then
            MsgBox "Niet alle verplichte velden zijn ingevuld, graag de rode velden vullen.", vbCritical, "Onvolledige invoer"
            Exit Sub
.
.
.
 
Laatst bewerkt:
Of:
Code:
If InStr(Cells(10, 9), "-") = 5 And Len(Cells(10, 9)) = 8 Then
        sq = Split(Cells(10, 9), "-")
          For i = 0 To 1
             If IsNumeric(CVar(sq(i))) Then y = y + 1
          Next i
      End If
     MsgBox "Stramien " & IIf(y = 2, "", "niet ") & "in orde"

edit: extra controle op lengte.
 
Laatst bewerkt:
Allemaal heel erg bedankt! Ben weer een heel stuk verder. Ik heb nog 1 aanvullende vraag op de code: Hij hoeft alleen te kijken of cel I10 voldoet aan de voorwaarden als er iets is gevuld in cel I8. Als er niets in I8 staat, dan hoeft er ook geen controle op cel I10 plaats te vinden. Is dat ook mogelijk?

Alvast bedankt weer!
 
In mijn voorbeeld in #5 kan je eenvoudig zien hoe je de inhoud van een cel opvraagt. Daar kan je dan de controle mee doen die je wenst.
 
Hoi Edmoor,

Ik snap er niks van. Ergens doe ik wat fout in de volgorde, maar ik krijg hem niet helder. Volgens mij moet de code als volgt zijn:

Code:
        If .Range("I8") <> "" And Right(Left(.Range("I10"), 5), 1) <> "-" Or _
           Left(Right(.Range("I10"), 4), 1) <> "-" Then
            MsgBox "Startnotitienummer niet correct."
            Exit Sub
        End If

Met andere woorden als cel I8 is ongelijk aan leeg, en I10 heeft geen "-" op positie 5, dan de msgbox. Toch blijft hij de controle doen op cel I10 als I8 leeg is.

Gr Alex
 
Code:
    If .Range("I8") <> "" Then
        If Right(Left(.Range("I10"), 5), 1) <> "-" Or _
           Left(Right(.Range("I10"), 4), 1) <> "-" Then
            MsgBox "Startnotitienummer niet correct."
            Exit Sub
        End If
    End If
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan