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

invoer beperken en macro starten

Status
Niet open voor verdere reacties.

SUVERMO

Gebruiker
Lid geworden
22 dec 2019
Berichten
481
Dag experten,

graag had ik wat hulp voor volgende punten.

De invoer in cellen beperken tot de tekens "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890?/" en geen spatie's toelaten
Een macro starten als er iets wordt ingevuld in een cel.
Een macro starten door te klikken op 1 van de vele mogelijke celadressen, afhangkelijk van het celadres met andere opdrachten.
Verdere uitleg in de gele cellen van blad "Dieren_Bib", kolommen D, M, S en AA
 

Bijlagen

Je eerste vraag kun je simpel oplossen door een naamlijst te maken met in een tabblad vanaf cel A2 tm A29 de gewenste tekens te zetten, en dan de naam Tekens te definiëren met deze formule: =VERSCHUIVING(Blad1!$A$2;0;0;AANTALARG(Blad1!$A:$A)-1). Die gebruik je dan in je Gegevensvalidatie op de oranje cellen. Door de naamlijst dynamisch te maken, kun je er nog andere tekens aan toevoegen als dat wenselijk is. Hoeft uiteraard niet, je kunt hem ook vast definiëren.
 
De vraag was mogelijk niet duidelijk genoeg.
nu mag er maar 1 teken in een cel ingevoerd worden.
het is de bedoeling van een tekst te kunnen invoeren waarin enkel de toegestane tekens gebruikt worden.

In kolom J staat in de groene cellen wat is toelaten en in de rode cellen wat niet is toegelaten. Sneltoets "Ctrl+;" moet nog kunnen worden gebruikt.
 

Bijlagen

In AC11 staat onderstaande formule die als resultaat WAAR geeft voor het invullen in S11
hoe kan deze formule gebruikt worden als gegevensvalidatie? mij lukte het niet om deze te gebruiken als formule bij aangepast.
hoe de formule is bekomen is te zien vanaf rij 70 kolom S en volgende



Code:
=en(ex.of(en(gelijk(lengte(s11);1);gelijk(links(s11;1);"?"));en(gelijk(lengte(s11);10);ex.of(en(code(links(s11;1))>=65;code(links(s11;1))<=90);en(code(links(s11;1))>=98;code(links(s11;1))<=122));gelijk(deel(s11;2;1);"/");isgetal(deel(s11;3;2)*1);gelijk(deel(s11;5;1);"/");isgetal(deel(s11;6;2)*1);gelijk(deel(s11;8;1);"/");isgetal(rechts(s11;2)*1))))
 

Bijlagen

ik heb gans die formule niet liggen uitspitten, dus in D14 en volgende
Code:
Function MijnTekst(tekst)
   Application.Volatile
   Select Case Len(tekst)
      Case 1: MijnTekst = (tekst = "?")
      Case 10: MijnTekst = (tekst Like "[A-Za-z]/##/##/##")
      Case Else: MijnTekst = False
   End Select
End Function
en dat dan gebruiken in een change-event
 

Bijlagen

Laatst bewerkt:
licht aangepast, een gedefinieerde naam Suverno, die die UDF aanroept en dan die gebruiken in de data-validatie
 

Bijlagen

Laatst bewerkt:
alvast bedankt

ik ben ook aan het testen geweest
nu gebruikt gegevensvalidatie voor B3
=EN(A3)
is het mogelijk om dit te gebruiken
=EN(Datum_niet_meer_in_bezit(B3))
 

Bijlagen

licht aangepast, een gedefinieerde naam Suverno, die die UDF aanroept en dan die gebruiken in de data-validatie

Beste cow18,
de door U aangeboden oplossing werkt prima, waarvoor ik U heel hard bedank.

nog een vraagje, nu kan er een niet bestaande datum ingegeven worden, kan dit worden voorkomen?
 
Code:
Function Datum_niet_meer_in_bezit(tekst)
   Application.Volatile
   Select Case Len(tekst)
      Case 1: Datum_niet_meer_in_bezit = (tekst = "?")
         'Case 10: Datum_niet_meer_in_bezit = (tekst Like "[A-Za-z]/##/##/##")
      Case 10: b = (tekst Like "[OVov]/##/##/##")
         If b Then
            sp = Split(tekst, "/") 'tekst spitsen op "/"
            b = Format(DateSerial(sp(3), sp(2), sp(1)), "dd/mm/yy") = Mid(tekst, 3) 'klopt aangemaakte datum met oorspronkelijke ?
         End If
         Datum_niet_meer_in_bezit = b
      Case Else: Datum_niet_meer_in_bezit = False
   End Select
End Function
 
Waarom =EN(A3) Begrijp je de functie EN() wel?

In VBA heb je de beschikking over IsDate. Je maakt het jezelf wel lekker makkelijk met deze kromme opzet.
 
@VenA, denkt IsDate op zijn amerikaans of europees of volgens je instellingen ?
Code:
Sub testje()
   MsgBox IsDate("29/02/21")
   MsgBox IsDate("02/29/21")
   MsgBox IsDate("21/29/02")
   MsgBox IsDate("21/02/29")
End Sub
 
Mag beide maar wel het hele jaar gebruiken.

Code:
Sub testje()
   MsgBox IsDate("29/02/2021")
   MsgBox IsDate("02/29/2021")
   MsgBox IsDate("02/29/2020")
   MsgBox IsDate("29/02/2020")
End Sub

Nb. Jouw reactie had ik gemist.

Gewoon 2 kolommen gebruiken lijkt mij overigens logischer.

Code:
Function VenA(s) As Boolean
  If s = "?" Or (s Like "[OVov]/##/##/##" And IsDate(Mid(s, 3, 6) & 20 & Right(s, 2))) Then VenA = True
End Function
 
Laatst bewerkt:
Code:
IsDate(Mid(s, 3, 6) & 20 & Right(s, 2)))
niet uitgeprobeerd, maar moet 20 niet "20" zijn ?
Anders is die wel lekker beknopt !
 
nou, dan rest er enkel :thumb:
 
Iedereen bedankt voor de hulp bij de gegevensvalidatie, het werkt prima.

Zijn er experten die een oplossing kunnen aanbieden voor onderstaande.
Een macro starten als er iets wordt ingevuld in een cel.
Een macro starten door te klikken op 1 van de vele mogelijke celadressen, afhangkelijk van het celadres met andere opdrachten.
Verdere uitleg staat in de gele cellen van bijgevoegde excel.
 

Bijlagen

1e = een change-event, dacht dat je die al kende.
Voor de 2e, gebruik gewoon een hyperlink, daar kan je tekst etc zo aanpassen.
 
Laatst bewerkt:
een kat zal er haar jongen niet in terug vinden.
Toch een aanzet in thisworkbook.
Ik versta dat ganse gedoe met werkbladen zichtbaar of veryhidden maken totaal niet.
Waarom zo moeilijk ? Wat heb je te verbergen aan de gebruiker ? Dit gaat ten koste van gebruikersgemak.
 

Bijlagen

Laatst bewerkt:
heel veel dank,
van TEST 2 naar TEST 1 lukt prima, maar van TEST 1 naar TEST 2 geeft een foutmelding.


Application.Run Replace(s2, " ", "_")

kunt U even nazien?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan