Variabele celwaarde

Status
Niet open voor verdere reacties.

masala09

Gebruiker
Lid geworden
6 aug 2012
Berichten
886
Beste allen.

Ik heb een beetje voorwerk gedaan. Hoop dat jullie het hiermee kunnen.

Nu is het zo dat zodra ik een actie wil uitvoeren er gegevens automatisch worden aangevuld wegens formules die in de cellen staan ( deze cellen zijn ook niet los in te voeren wegens een bescherming). Echter nu wil ik er voor zorgen dat zodra cel D4 van waarde is veranderd enkel deze cellen wel zijn in te voeren en de rest niet. Dit lukte mij wel een beetje, maar dan ben ik meteen de formules in de cellen kwijt en ook is het hele werkblad onbeveiligd. Ik weet dat dit wel mogelijk is via VBA, omdat je dan de formules in de code vastzet en in de cellen plaatst zodra dit moet.

De bedoeling is dat zodra broncel D4 op JA staat de zoekfunctie in cel C12 (Een lijst met klanten) de in de code staande cellen automatisch aanvult met de juiste gegevens via verticaal zoeken. Ik heb ook begrepen dat omdat ik de formule via VBA in de cellen wil plaatsen, de formules in het Engels moeten worden geschreven. Deze wijze in het Engels is mij helaas onbekend.

Zodra cel D4 op Nee staat, dan moet cel C12 worden geblokkeerd en worden overgeslagen. Vervolgens moeten de cellen waar normaal automatisch via verticaal zoeken een waarde komt te staan, worden vrijgegeven voor handmatige invoer ( deze cellen staan normaal beveiligd en zijn dus niet toegankelijk voor handmatige invoer ). Na deze moet cel C15 worden geselecteerd zodat ik hier meteen kan beginnen met handmatig invoeren.

Ik heb hieronder een code hoe ik het een beetje in gedachte had. En ja ik heb de volledige werking eruit gehaald en feitelijk neergezet als hoe ik het in mijn hoofd had. Deze moet dus werkend gemaakt worden. Als jullie hiermee willen helpen alvast bedankt.


Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 Select Case Range("D4")
    Case Is = "Ja"
        'range("C15").Formula =ALS(C12="";"";VERT.ZOEKEN(C12;Database_Klanten!A:Q;1;0))

        'range("C16").Formula =ALS(C12="";"";ALS(D6="Ja";VERT.ZOEKEN(C12;Database_Klanten!A:Q;13;0);""))

        'range("C17").Formula =ALS(C12="";"";ALS(EN(H6="JA";C12>0);"Postbus "&VERT.ZOEKEN(C12;Database_Klanten!A:Q;5;0);VERT.ZOEKEN(C12;Database_Klanten!A:Q;2;0)))

        'range("C18").Formula =ALS(C12="";"";ALS(EN(H6="Ja";C12>0);VERT.ZOEKEN(C12;Database_Klanten!A:Q;6;0);VERT.ZOEKEN(C12;Database_Klanten!A:Q;3;0)))

        'range("D18").Formula =ALS(C12="";"";ALS(EN(H6="Ja";C12>0);VERT.ZOEKEN(C12;Database_Klanten!A:Q;7;0);VERT.ZOEKEN(C12;Database_Klanten!A:Q;4;0)))

        'range("C22").Formula =ALS(D4="Nee";"";ALS(C12="";"";VERT.ZOEKEN(C12;Database_Klanten!A:Q;9;0)))

        'range("C23").Formula =ALS(D4="Nee";"";ALS(C12="";"";VERT.ZOEKEN(C12;Database_Klanten!A:Q;8;0)))

    Case Is = "Nee"
        'Range("C15,C16,C17,C18,D18,C22,C23").Unprotect "1235"
        'Range("C15,C16,C17,C18,D18,C22,C23") = vbNullString
        'Range("C15").Select
        
    End Select
    
End Sub
 
Laatst bewerkt:
Als het je gaat om de Engelse naam van de functie: VERT.ZOEKEN = VLOOKUP, ALS = IF, EN = AND

Jan
 
Laatst bewerkt:
JanEnEm, Dank je, maar zover was ik wel gekomen. Echter het schijnt ook te zijn dat als je deze formule via VBA in een cel wilt zetten de formule op een bepaalde manier moet worden geschreven. Ik krijg enkel maar foutmeldingen. Zodoende heb ik de code als hoe ik hem in mijn hoofd had hier geplaatst. Zo doe ik het in feite vaker zodat ik in ieder geval de opzet heb. Hierna ga ik de zaken omzetten, maar dat is in deze niet gelukt.
 
Te snel geoordeeld. Werkt niet. De zaken worden rood.

Ik krijg te lezen: Compileerfout, Verwacht eindinstructie.
Vervolgens wordt JA in de tweede range blauw gemarkeerd. ( Is overigens de eerste rode regel)

Ik moet erbij zetten dat de cellen D4, D6 en H6 een keuzelijst bevat met JA, NEE en "".



Code:
Private Sub Worksheet_Change(ByVal Target As Range)

 Select Case Range("D4")
    Case Is = "Ja"
        Unprotect "1235"
        Range("C15").FormulaLocal = "=ALS(C12="";"";VERT.ZOEKEN(C12;Database_Klanten!A:Q;1;0))"
        [COLOR="#FF0000"]Range("C16").FormulaLocal = "=ALS(C12="";"";ALS(D6="Ja";VERT.ZOEKEN(C12;Database_Klanten!A:Q;13;0);""))"
        Range("C17").FormulaLocal = "=ALS(C12="";"";ALS(EN(H6="JA";C12>0);"Postbus "&VERT.ZOEKEN(C12;Database_Klanten!A:Q;5;0);VERT.ZOEKEN(C12;Database_Klanten!A:Q;2;0)))"
        Range("C18").FormulaLocal = "=ALS(C12="";"";ALS(EN(H6="Ja";C12>0);VERT.ZOEKEN(C12;Database_Klanten!A:Q;6;0);VERT.ZOEKEN(C12;Database_Klanten!A:Q;3;0)))"
        Range("D18").FormulaLocal = "=ALS(C12="";"";ALS(EN(H6="Ja";C12>0);VERT.ZOEKEN(C12;Database_Klanten!A:Q;7;0);VERT.ZOEKEN(C12;Database_Klanten!A:Q;4;0)))"
        Range("C22").FormulaLocal = "=ALS(D4="Nee";"";ALS(C12="";"";VERT.ZOEKEN(C12;Database_Klanten!A:Q;9;0)))"
        Range("C23").FormulaLocal = "=ALS(D4="Nee";"";ALS(C12="";"";VERT.ZOEKEN(C12;Database_Klanten!A:Q;8;0)))"[/COLOR]
    Case Is = "Nee"
        'Range("C15,C16,C17,C18,D18,C22,C23").Unprotect "1235"
        'Range("C15,C16,C17,C18,D18,C22,C23") = vbNullString
        'Range("C15").Select
        
    End Select
    
End Sub


Ik zal morgen een voorbeeldbestand plaatsen. Als iemand de fout ziet, voel je dan vrij.

Alvast bedank.
 
Laatst bewerkt:
Waar je rekening mee moet houden bij het schrijven van werkboek functies in VBA, is dat het scheidingsteken in het Nederlands een ";" is en in het Engels een "," !

Je zult dat zien als je als voorbeeld een macro opneemt met de macro recorder (In het lint de tab VIEW (ik denk BEELD in de NL versie) rechts staat "Macro" waarbij "Macro opnemen").
Sorry als de NL-talige tekst anders is: Ik heb een engelse Office en windows versie.

Bij mij leidde dat tot b.v. :
ActiveCell.FormulaR1C1 = _
"=IF(R[-8]C[-3]=""Ja"",VLOOKUP(RC[-4],db_klanten!R[-10]C[-6]:RC[5],1,0))"

Ik hoop dat je hiermee uit de voeten kunt.

Jan
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan