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

Bij 1 keuze uit de keuzelijst bepaalde cellen niet beveiligen

Status
Niet open voor verdere reacties.

Myrthe92

Gebruiker
Lid geworden
8 apr 2017
Berichten
94
Goedenavond,

Ik loop tegen een probleem aan in mijn Excel-sheet. In de bijlage heb ik mijn testdocument toegevoegd met fictieve namen.

Gebruikers kunnen op de tabbladen trainingsschema's een doel kiezen (D8) waarbij met behulp van VLOOKUP en ALS het juiste bijbehorende trainingsschema tevoorschijn komt. Ik wil het nu zo maken dat als iemand het doel 'zelf bepalen' kiest de de cellen waar nu de resultaten van de VLOOKUP komen worden leeggemaakt (clearcontent) en de gebruiker zelf kan typen. Dit moet in de cellen D17:E22.

Waar ik nu tegenaanloop is dat ik mijn hele sheet heb beveiligd, maar dat de gebruiker bij de keuze 'zelf bepalen' zelf moet kunnen typen (D17:E22). Kunnen jullie mij helpen hoe ik een bepaalde range (afhankelijk van het trainingsdoel) wel of niet mee beveilig?

Alvast bedankt.

Myrthe92
 
Laatst bewerkt:
Er staat een wachtwoord op je VBA.
Ook vind ik nergens "zelf bepalen" terug

Hier een voorbeeldje, zie vba code achter werkblad 1. Ik heb eerst alle cellen "unlocked" bij celeigenschappen --> beveiliging en toen het gebied geselecteerd wat je wilt
beveiligen (of niet).
 

Bijlagen

  • test3.xlsm
    22,7 KB · Weergaven: 26
Laatst bewerkt:
Beste,

Hartelijk dank voor uw reactie en voorbeeld uitleg. Echter, lukt het mij niet om het volledig in mijn eigen sheet te verwerken.
Ik heb inmiddels mijn beveiliging van mijn VBA af gehaald. De tabbladen zijn beveiligd met het wachtwoord 'abc', want dat is uiteindelijk de bedoeling.

Voorbeeld tabblad 'Trainingsschema 1-6' > linker blad 'ANAËROOB TRAININGSSCHEMA (1-6 WEKEN)':
In de keuzelijst staat nu 'Leeg - kies trainingsparameters'. Hiermee wil ik inderdaad ervoor zorgen dat de cellen 'D17:E22' leeg zijn, maar niet volledig '.ClearContents', omdat als men switcht in de keuzelijst naar een ander 'Doel' bv. 8x2 minuten - 2 minuten rust, dan moeten de formules in de cellen 'D17:E22' voor deze keuzes blijven bestaan en automatisch gegenereerd worden.

Huidig probleem:
Bij het selecteren in de keuzelijst 'Leeg - kies trainingsparameters' zijn de cellen 'D17:E22' nu leeg. Deze cellen dienen leeg te zijn en onbeveiligd bij deze keuze, zodat men in deze cellen zelf getallen/waarden kan invullen. Mocht men toch weer willen switchen naar een ander 'Doel' kiezen in cel 'D8', dan dienen de automatisch keuzes weer ingevuld worden.

Waar gaat het mis? Ik krijg als ik nu switch naar een ander 'Doel' soms ook (niet altijd) dat ik een wachtwoord moet invullen. Dit wil ik niet. Het werkt nog niet optimaal.

Alvast bedankt voor alle hulp.
 

Bijlagen

  • TEST.xlsm
    336,3 KB · Weergaven: 15
Laatst bewerkt:
Gebruik geen samengevoegde cellen. Plaats geen voorbeeld met een wachtwoord. Gebruik geen onnodige variabelen en nog een heleboel meer.
Nadenken over welke vorm van beveiliging dan ook lijkt mij nog veel te vroeg.

Ipv
Code:
Public Sub CelLeegmaken1()

Dim LeegmaakCel1 As Range
Dim LeegmaakCel2 As Range
Dim LeegmaakCel3 As Range
Dim LeegmaakCel4 As Range
Dim Invultekst As String


'Bereik Named Range moet zijn Werkmap
Set LeegmaakCel1 = Range("CelSoortDoelAN1")
Set LeegmaakCel2 = Range("CelSoortDoelAE1")
Set LeegmaakCel3 = Range("CelSoortDoelAN7")
Set LeegmaakCel4 = Range("CelSoortDoelAE7")


Invultekst = "(kies intensiteit)"


LeegmaakCel1 = Invultekst
LeegmaakCel2 = Invultekst
LeegmaakCel3 = Invultekst
LeegmaakCel4 = Invultekst


'LeegmaakCel1.ClearContents
'LeegmaakCel2.ClearContents
'LeegmaakCel3.ClearContents
'LeegmaakCel4.ClearContents


End Sub

Code:
Sub CelLeegmaken() 
  Application.EnableEvents = False
  Range("CelSoortDoelAN1,CelSoortDoelAE1") = "Lekker samengevoegd"
  Range("CelSoortDoelAN7,CelSoortDoelAE7").ClearContents
  Application.EnableEvents = True
End Sub
 
Laatst bewerkt:
Beste, VenA,

Dank voor uw complimenteuze bericht. Ik ben blij dat ik het toch altijd eerst zelf probeer.
Waar ik moet werken aan mijn Excel-skills, zal u moeten werken aan uw complimenteuze vaardigheden.

Oftewel, Range("CelSoortDoelAN1,CelSoortDoelAE1") = "Lekker complimenteus".

Ik zal met uw tip aan de slag gaan.
 
Formules in een RANGE invoeren

Dag allemaal,

Ik blijf tegen een aantal problemen aanlopen in mijn Excel-sheet.
In de bijlage heb ik mijn testdocument toegevoegd met fictieve namen.

Probleem 1)
Voor het tabblad 'Trainingsschema (1-6)' staat in onderstaande code "Je formules".

Code:
  With Range("D17:F22")
    If Target = "Leeg - kies trainingsparameters" Then
        ActiveSheet.Unprotect
       .Locked = False
       ActiveSheet.Protect
    Else
       ActiveSheet.Unprotect
       .Locked = True
       .Value = "Je formules"
       ActiveSheet.Protect
    End If
   End With

"Je formules" moet vervangen worden door verschillende ALS-formules.
Deze staan in de kolommen D17:E22. Maar deze ALS formules verschillen per cel. Zie hieronder een voorbeeld om aan te geven welke waarde steeds verandert (bold):
- CEL D17:=ALS($D$7="";"";ALS($D$8="(kies intensiteit)";"";VERT.ZOEKEN(TEKST.SAMENVOEGEN($D$7;$D$8;$D$9;$B17);$AI$12:$AL$60;3;ONWAAR)))
- CEL D18:=ALS($D$7="";"";ALS($D$8="(kies intensiteit)";"";VERT.ZOEKEN(TEKST.SAMENVOEGEN($D$7;$D$8;$D$9;$B18);$AI$12:$AL$60;3;ONWAAR)))

Een optie is macro opnemen en dan bijvoorbeeld dit: ' [D1].FormulaR1C1 = "=VLOOKUP(R[2]C,R[4]C[-1]:R[5]C,2,FALSE)". Echter, is dit voor één cel, waarbij niet elke keer de verticaal zoeken afwijkt. Welke code moet ik i.p.v. "Je formules" in mijn VBA opnemen om het voor al mijn ALS-formules (D17:E22) (die dus telkens verschillen) te realiseren?
Dit moet ook voor het tabblad 'Trainingsschema (7-12)' gerealiseerd worden.

Dit moet eerst kloppen alvorens ik mijn sheet goed kan beveiligen, want dat is probleem 2.

Probleem 2)
Mijn hele sheet wil ik beveiligen, maar de gebruiker moet bij de keuze 'Doel' (D8) 'Leeg - Kies trainingsparameters' de cellen (D17:E22) onbeveiligd maken, zodat de gebruiker hier zelf getallen kan invullen. Bij alle andere keuzes onder 'Doel' moeten deze beveiligd blijven. Momenteel hanteer ik de VBA-code:
Code:
With Range("D17:E22")
    If Target = "Leeg - kies trainingsparameters" Then
        ActiveSheet.Unprotect
       .Locked = False
       ActiveSheet.Protect
Hoe kan ik dit beter verwerken in mijn VBA-code als probleem 1 is opgelost?

Hopelijk kunnen jullie mij helpen met mijn sheet.
Alvast bedankt!!
 

Bijlagen

  • Format - Longrevalidatie (test).xlsm
    337,1 KB · Weergaven: 21
Laatst bewerkt:
Ik vind je post # overbodig.
Als jij net zoveel hulp zult hebben geboden als VenA - en daar zal het voorlopig, if ever, niet van komen - praten we verder.
Je post illustreert in ieder geval wat VenA al constateerde, dat je niet in staat bent de juiste prioriteiten te stellen.
Zinloze beveiliging maakt meer kapot dan je lief is
 
Laatst bewerkt door een moderator:
Mijn inziens is het gedrag van VenA niet geheel gepast. Onder elke post komt naar voren wat men niet goed doet in plaats van richting te geven aan de vraag.
Ik denk dat de meeste mensen hier zijn om te leren van hun fouten. Beveiliging is wel degelijk van belang voor de gebruikers in deze sheet (werkzame sector). Echter, mocht ik van VenA daar nog niet mee starten. Dus heb ik getracht eerst probleem 1 nader te onderzoeken.

Ik hoop dan ook dat iemand nog wel heil ziet in deze VBA smartie.
 
Ik al veel meer posts van VenA gelezen dan jij en weet daardoor dat jouw bewering onjuist is.
Baseer je op feiten en niet op incidentele beelden.
Ik vind jouw gedrag voor een hulpvrager onhandig.
 
Test het maar eens.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address(0, 0) = "D8" Then
  Application.EnableEvents = False
  Unprotect
   With Range("D17:E22")
     If Target = "Leeg - kies trainingsparameters" Then
        .Locked = False
        .ClearContents
      Else
        .Locked = True
sv = Range("ai12:al60")
  x = Array([d7&d8&d9&b17], [d7&d8&d9&b18], [d7&d8&d9&b19], [d7&d8&d9&b20], [d7&d8&d9&b21], [d7&d8&d9&b22])
    With Application
      For j = 0 To 1
        sq = .Index(sv, .Match(x, .Index(sv, , 1), 0), j + 3)
        Range("d17:d22").Offset(, j) = .Transpose(sq)
      Next j
    End With
  End If
 Protect
End With
End If
 Application.EnableEvents = True
End Sub
 
Laatst bewerkt:
Beste HSV,

Dank voor uw reactie!
Ik was inmiddels zelf ook een eind gekomen. Ik had de volgende code gebruikt:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Target.Worksheet.Range("D8:F8", "S8:U8")) Is Nothing Then
Application.EnableEvents = False
If ActiveSheet.ProtectContents Then
ActiveSheet.Unprotect Password:="pwd"
End If

If Target.Address(0, 0) = "D8" Then
        With Range("CelBlockedAN1")
                 If Target = "Leeg - kies trainingsparameters" Then
                    MsgBox "Vrije keuze: vul zelf de lege kolommen 'Duur' en 'Rust' in."
                    .ClearContents
                    .Locked = False
                 Else
                    MsgBox "Het door u gekozen trainingsdoel (traininsschema) is automatisch ingevuld."
                    .Locked = True
                    Sheets("Trainingsschema (1-6)").Range("CelFormulesVeiligStellenAN1").Copy
                    Sheets("Trainingsschema (1-6)").Range("CelBlockedAN1").PasteSpecial xlPasteFormulas
                     Application.CutCopyMode = False
                     Range("D8").Select
                 End If
        End With

ElseIf Target.Address(0, 0) = "S8" Then
          With Range("CelBlockedAE1")
           If Target = "Leeg - kies trainingsparameters" Then
              MsgBox "Vrije keuze: vul zelf de lege kolommen 'Duur' en 'Rust' in."
              .ClearContents
              .Locked = False
           Else
              MsgBox "Het door u gekozen trainingsdoel (traininsschema) is automatisch ingevuld."
              .Locked = True
              Sheets("Trainingsschema (1-6)").Range("CelFormulesVeiligStellenAE1").Copy
              Sheets("Trainingsschema (1-6)").Range("CelBlockedAE1").PasteSpecial xlPasteFormulas
               Application.CutCopyMode = False
               Range("S8").Select
           End If
          End With
End If
Application.EnableEvents = True
ActiveSheet.Protect Password:="pwd", UserInterfaceOnly:=True
End If
End Sub

Maar die van u is mooier en netter. Nogmaals dank!
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan