Gegevensvalidatie wijzigen o.b.v. inhoud naastgelegen kolom

Status
Niet open voor verdere reacties.

Robert Smidt

Gebruiker
Lid geworden
26 mei 2009
Berichten
901
Beste Helpmij'ers,

Weet iemand of je in een kolom een gegevensvalidatie aan kunt roepen (middels VBA) vanuit de inhoud van de naastgelegen kolom? Ik heb een voorbeeld bestand toegevoegd.

De bedoeling is wanneer in (blad1) kolom A "Opbrengsten" staat kolom B de gegevensvalidatie weergeeft vanuit (blad2) kolom A. Wanneer er willekeurig iets anders in (blad1) kolom A staat, de gegevensvalidatie weergeeft vanuit (blad2) kolom B.

Alvast heel erg bedankt.

RobertBekijk bijlage Gegevensvalidatie.xlsm
 
zoiets? Je kan nog wat dingen aanvullen in de code waar nu "" staan.

Is wel hoofdlettergevoelig!
 

Bijlagen

  • Gegevensvalidatie(SJonR).xlsm
    14,7 KB · Weergaven: 64
Als de validatie al bestaat

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Column > 1 Or Target.Count > 1 Then Exit Sub
  Target.Offset(, 1).Validation.Modify , , , IIf(Target = "Opbrengsten", "=Blad2!$A$1:$A$3", "=Blad2!$B$1:$B$3")
End Sub
 
Laatst bewerkt:
Beide codes werken perfect en kan hier zeer zeker mee uit de voeten, heel erg bedankt voor jullie hulp...:)
 
Kan ook gewoon met een formule.
Geef Blad2!A1:A3 een gedefinieerde naam 'kolomA' mee en blad2!B1:B3 → 'kolomB'.
Formule voor datavalidatie:
Code:
=ALS(A1="Obrengsten";kolomA;kolomB)
 
Laatst bewerkt:
Ik gok dat dit komt omdat je bestaande validatieregels nog naar blad 2 verwijzen.
 
Beter kan je het idee van HSV gebruiken met gedefinieerde namen dan heb je dit soort problemen niet. Als er spaties in de naam van een tab staan dan moet je er een ' (enkele quote) omheen zetten.

Code:
IIf(Target = "Opbrengsten", "=[COLOR="#FF0000"][SIZE=5]'[/SIZE][/COLOR]Persoonlijke instelling[COLOR="#FF0000"][SIZE=5]'[/SIZE][/COLOR]!$A$1:$A$3", "=[COLOR="#FF0000"][SIZE=5]'[/SIZE][/COLOR]Persoonlijke instelling[COLOR="#FF0000"][SIZE=5]'[/SIZE][/COLOR]!$B$1:$B$3")
 
Laatst bewerkt:
Ik heb jullie raad opgevolgd en hier KolomA en KolomB van gemaakt en werkt prima :thumb:, ik heb nog een vraag. Het systeem zoekt hier "Opbrengsten", ik heb echter te maken met meerdere soorten opbrengsten zoals: "Opbrengsten hoog", Opbrengsten laag enz. Ik dacht dat ik hier eenvoudig een (*) naast kon zetten. Ik kom er nu achter dat dat niet werkt. Heeft iemand hier misschien een oplossing voor?
 
Relevante voorbeeldbestanden willen wel eens helpen. Het is hier geen maakhetmaarvoormijengokjeraakenalsikweereennieuwideehebpashetaanvoormij.nl
 
Neem me niet kwalijk, ik doe bij deze het bestand toekomen.

Omdat ik dus meerdere opbrengsten gebruik is mijn vraag of ik naast "Opbrengsten" ook een (*) als jokerteken kan plaatsen?

Als tweede en laatste vraag; hoe kan ik i.p.v. KolomA resp. KolomB
Code:
        Target.Offset(, 1).Validation.Modify , , , IIf(Target = "Opbrengsten", "=VERSCHUIVING('Persoonlijke instelling'!$a$1;1;0;AANTAL.ALS('Persoonlijke instelling'!$a$2:$a$10;" * ")-AANTAL.ALS('Persoonlijke instelling'!$a$1;"");1)", " "=VERSCHUIVING('Persoonlijke instelling'!$b$1;1;0;AANTAL.ALS('Persoonlijke instelling'!$b$2:$b$10;" * ")-AANTAL.ALS('Persoonlijke instelling'!$b$1;"");1)")

Normaal werkt bovenstaande goed in een gegevensvalidatie, op deze wijze staat de cursor altijd bovenaan, echter werkt het niet in bovenstaande code.


Bekijk bijlage Gegevensvalidatie.xlsm
 

Bijlagen

  • Gegevensvalidatie.xlsm
    16,3 KB · Weergaven: 43
  • Gegevensvalidatie.xlsm
    16,3 KB · Weergaven: 41
Formules maken in Vba doe je in het Engels, tenzij je formulaLocal gebruikt.

Nog steeds met formules met de verschuiving zonder Vba.
 

Bijlagen

  • Gegevensvalidatie.xls
    29,5 KB · Weergaven: 50
Harry, heel erg bedankt voor jouw oplossing. Ik zou overigens niet weten hoe je dat gedaan hebt (zonder VBA). Wat mij opviel als je een verkeerde keuze maakt en dat wil herstellen de gegevensvalidatie niet meer wordt aangepast. Is het misschien toch mogelijk om het middels VBA te doen. Mocht het met verschuiven niet lukken, dan vind ik dat aanvaardbaar hoor. Ik ben al blij dat de code werkt wanneer de keuze "*Opbrengsten*" bevat.
 
Middels Vba Robert.

KolomA en kolomB zijn gedefinieerde namen incl. de verschuivingsformule t/m 999 argumenten.
 

Bijlagen

  • Gegevensvalidatie2.xlsb
    13,7 KB · Weergaven: 51
Ik ben zelf ook nog even bezig geweest en denk de oplossing gedeeltelijk te hebben door een Opbrengstenvak aan te maken. Zie voorbeeld

Code:
If Not IsError(Application.Match(Cells(Target.Row, 1), [Opbrengstenvak], 0)) Then
    .Validation.Modify , , , , "=KolomA", "=KolomB"
End If

Bij ".Validation.Modify" moet nog iets voor worden gezet om aan te geven dat de gegevensvalidatie in kolom B moet plaatsvinden. Die komma's heb ik maar overgenomen, maar zou niet weten wat daar het effect van is.

Ik hoop dat iemand mij hier mee kan helpen.

Alvast bedankt.

Bekijk bijlage Gegevensvalidatie.xlsm
 
Onze berichten hebben elkaar gekruist vermoed ik
 
Harry, heel erg bedankt. Het werkt perfect en ben hier super blij mee.

Ik heb nog wel even een vraag hoe je dat gedaan hebt met KolomA en KolomB. Ik zie dat je dat niet bij 'namen beheren' hebt gezet.
Hoe heb jij die selectie gemaakt? Ik wil deze techniek ook in andere programma's aanwenden.

Alvast bedankt.
 
Deze techniek is al heel lang bekend en er is voldoende over te vinden. Je kan beter gebruik maken van echte tabellen dan heb je het niet nodig.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  Application.EnableEvents = False
  If Target.Column = 1 Then
    Target.Offset(, 1) = ""
    c00 = Join(Application.Transpose(Sheets("Persoonlijke instelling").ListObjects(1).DataBodyRange), ",")
    c01 = Join(Application.Transpose(Sheets("Persoonlijke instelling").ListObjects(2).DataBodyRange), ",")
    Target.Offset(, 1).Validation.Modify , , , IIf(Target Like "*Opbrengsten*", c00, c01)
  End If
  Application.EnableEvents = True
End Sub
 

Bijlagen

  • Gegevensvalidatie.xlsb
    17,6 KB · Weergaven: 48
Laatst bewerkt:
Harry, ik ben net zolang gaan zoeken en heb bij toeval de oplossing gevonden. Ik kan het nu ook goed gebruiken voor andere toepassingen. Allen heel erg bedankt voor de moeite en het meedenken.
 
@VenA,

Waarom twee tabellen?
Code:
.ListObjects(1).DataBodyRange.[COLOR=#ff0000]columns(1)[/COLOR]
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan