• 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.

De gebruiker kan of in "cel A" of in "cel B" informatie kwijt

Status
Niet open voor verdere reacties.

CasperEx

Gebruiker
Lid geworden
3 dec 2013
Berichten
78
Beste forumleden, mijn probleem (zie bijgesloten bestand):

Een gebruiker mag of in C3 (gele cel) óf in D3 (groene cel) informatie typen. Maar niet in allebei!
D3 heeft een validatie ("Lijst") en die wil ik graag in deze vorm houden

Heeft iemand enig idee?

Alvast bedankt voor het meedenken
 

Bijlagen

  • Maar in 1 cel info.xlsx
    14,9 KB · Weergaven: 50
Validatiecriterium "aangepast" met formule voor C3/D3:
Code:
=AANTALARG($C3:$D3)<2
 
Beste AlexCel

In C3 werkt dit, maar in D3 heb ik al een validatie staan (de lijst) en die wil ik heel graag houden
Zou daar een oplossing voor zijn?
 
Volgens mij snap ik je niet helemaal. Als er al een lijst staat, waarom dan nog beveiligen tegen typen? Daarvoor is de gegevensvalidatie.

Dus misschien nog een kleine toelichting op wat je precies wilt bereiken?
 
Als er al een lijst staat, waarom dan nog beveiligen tegen typen?

Het is dan wel geen "typen" maar het is wel informatie/inhoud die je invoert. Dus ik denk dat het gewenste niet kan. Op internet is het ook altijd "custom" = aangepast.

Die van Roeljongman in post 7 lijkt mij goed. Heel mooi gedaan!
 
Laatst bewerkt:
Ik heb in D3 de validatie aangepast naar
Code:
=ALS(C3<>"";"";$G$3:$G$7)
Als C3 niet leeg is dan is de keuzelijst in D3 leeg.


en in C3 heb ik volgende formule gemaakt
Code:
=ISLEEG(D3)
Dus ook hier als D3 een keuze heeft kun je niks invoeren in C3
 

Bijlagen

  • Maar in 1 cel info.xlsx
    9,1 KB · Weergaven: 15
Zo?
met VBA
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address(0, 0)
    Case "C3"
     If Target <> "" Then Target.Offset(, 1) = ""
    Case "D3"
        If Target <> "" Then Target.Offset(, -1) = ""
End Select
End Sub
 
od zo?
 

Bijlagen

  • Maar in 1 cel info.xlsm
    19,5 KB · Weergaven: 18
Zowel de oplossing van emields als roeljongman zien er heel gaaf uit. Ik heb uiteindelijk voor de oplossing van
emields gekozen. Ik vind die "opploppende" vba boodschappen nou eenmaal gaaf om te zien

Dank jullie allemaal voor het meedenken. Ik ga het item sluiten
 
Sorry, ik heb het item toch weer open gezet. Niet goed zitten opletten

In hoeverre verandert de vbacode van emields als ik als ik op meerdere regels de controle wil
Zie bestand. Regel 3 doet het prima. Maar op regel 4 kan ik weer en in C en in D wat intikken

Stom van mij dat ik dit niet eerder heb bedacht. Wie heeft een oplossing?

Dank je wel! alvast
 

Bijlagen

  • Maar in 1 cel info.xlsm
    20,6 KB · Weergaven: 16
misschien zo.
 

Bijlagen

  • Maar in 1 cel info.xlsm
    20,7 KB · Weergaven: 16
Yes! Emields, dit is wat ik zocht, dank je wel

Maar om vervolgens tegen het volgende probleem aan te lopen: Ik kopieer jouw code in mijn bestand. Pas het aan zoals hieronder (mijn bestand loopt van A6..B18) en.....het doet niets
Zie jij wat ik fout doe? De onderste 3 regels zijn van jou. De code erboven heb ik ergens anders vandaan

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B5:B20")) Is Nothing Or Selection.Count > 1 Then Exit Sub
Application.EnableEvents = False
If LCase(Target.Value) = "overig" Then
Target.Value = LCase(Target.Value)
MsgBox "Overig kan je niet verder uitsplisen", vbOKOnly
End If
Application.EnableEvents = True

If Not Intersect(Target, [A6:b18]) Is Nothing Then
If WorksheetFunction.CountA(Range(Cells(Target.Row, 6), Cells(Target.Row, 7))) > 1 And Target.Count = 1 Then MsgBox "U kan hier niets meer invullen": Target = ""
End If
End Sub
 
Deze regel is het probleem..
Code:
If Intersect(Target, Range("B5:B20")) Is Nothing Or Selection.Count > 1 Then Exit Sub

De code wordt gestopt als er geen cel wijzigt in het bereik B5:B20 en wordt het nieuwe stuk code niet uitgevoerd tenzij er een cel in bereik B5:B20 is gewijzigd

vervang die ene regel naar het aan naar de volgende 2 regels

Code:
If Not Intersect(Target, Range("B5:B20")) Is Nothing Then
IF Selection.Count > 1 then Exit Sub

en dan zou je 2e test altijd moeten worden uitgevoerd
 
Laatst bewerkt:
Oke, ik heb nu dit
Met helaas de foutmelding "Blok if zonder end if"

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("B5:B20")) Is Nothing Then
If Selection.Count > 1 Then Exit Sub


Application.EnableEvents = False
If LCase(Target.Value) = "overig" Then
Target.Value = LCase(Target.Value)
MsgBox "Overig kan je niet verder uitsplisen", vbOKOnly
End If
Application.EnableEvents = True

If Not Intersect(Target, [A6:b21]) Is Nothing Then
If WorksheetFunction.CountA(Range(Cells(Target.Row, 6), Cells(Target.Row, 7))) > 1 And Target.Count = 1 Then MsgBox "U kan hier niets meer invullen": Target = ""
End If
End Sub
 
Zet de code tussen codetags en maak gebruikt van inspringen bij If End If
dan wordt het misschien duidelijk waar het mis gaat.
Zoek maar eens waar de End If ontbreekt.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("B5:B20")) Is Nothing Then
    If Selection.Count > 1 Then Exit Sub


    Application.EnableEvents = False

    If LCase(Target.Value) = "overig" Then
        Target.Value = LCase(Target.Value)
        MsgBox "Overig kan je niet verder uitsplisen", vbOKOnly
    End If
    
    Application.EnableEvents = True

    If Not Intersect(Target, [A6:b21]) Is Nothing Then
        If WorksheetFunction.CountA(Range(Cells(Target.Row, 6), Cells(Target.Row, 7))) > 1 And Target.Count = 1 Then MsgBox "U kan hier niets meer invullen": Target = ""
    End If
    

End Sub
 
dat is een van de redenen waarom er om een gelijkend voorbeeldbestand gevraagd wordt.
 
Oke, ik heb nu dit
Met helaas de foutmelding "Blok if zonder end if"

Als je er nog niet uit ben na de hints van AD1957 helpt mijn toelichting wellicht waarom dat gebeurd, dit is iets waar je vaak tegenaan zult lopen als je vaker VBA gebruikt.

Een IF statement heeft géén end if nodig als de uit te voeren code op dezelfde regel staat als het if .. then statement
dus deze regel kan zonder end if.
Code:
If Selection.Count > 1 Then Exit Sub

Want het enige wat het doet is als er meer dan 1 cel is geselecteerd dan wordt de uitvoering van decode gestopt ( Exit Sub)

Als je meerdere regels code moet uitvoeren (er staat dan meestal niks achter then) dan heb je wel een end if nodig. Als ik dezelfde code gebruik als hierboven maar dan op meerdere regels.. dan krijg je dit.

Code:
If Selection.Count > 1 Then
     Exit Sub
End If

Deze code doet precies hetzelfde maar de end if noodzakelijk omdat Exit sub nu op een nieuwe regel staat. Feitelijk is dit de standaard opmaak voor een if statement en wordt voor 1 regelige if statements een soort "afkorting" gebruikt om de code niet onnodig lang te maken en een milliseconde sneller.

Het inspringen van code die binnen de IF .. END IF is een goede gewoonte omdat je daardoor sneller opmerkt dat een End IF ontbreekt (of teveel is)
kijk maar in jou naar jou code 12 regels code maar 5 IF's waarvan 2 maar 1 regel zijn met de enige instructies achter then en 3 waar het meerdere regels is.
 
Ik ga jullie oplossingen eens rustig bestuderen. Een keer zal ik VBA doorgronden!. Voor nu opnieuw harstikke bedankt voor het meedenken
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan