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

Kolom inhoud afhankelijk van checkbox wel of niet "echt" onzichtbaar maken

Status
Niet open voor verdere reacties.

Sanremo

Gebruiker
Lid geworden
27 mrt 2018
Berichten
41
Beste forumleden!

Voor een groot bestand waar ik al even aan bezig ben ben ik opzoek naar een manier om aan de hand van het wel of niet aanvinken van een checkbox bepaalde waardes (in dit geval een aantal hele kolommen) echt onzichtbaar te maken.

Nu is het gelukt om de kolommen te verbergen d.m.v. ".hidden", echter kan de gebruiker de kolommen simpelweg zelf weer uitvouwen en door een groter bereik te selecteren zelfs zonder uitvouwen de zogenaamd verborgen waardes selecteren en kopieren:

Code:
Private Sub CheckBox1_Click()

If CheckBox1.Value = True Then

Const PWORD As String = "wachtwoord"
Dim response As String
Dim msg As String
msg = "Voer wachtwoord in:"
Do
response = Application.InputBox(Prompt:=msg, _
Title:="Password", Type:=2)
If response = CStr(False) Then Exit Sub 'Cancelled
msg = "Incorrect!" & vbNewLine & "Voer opnieuw wachtwoord in:"
Loop Until response = PWORD

Sheets("Doelmap").Columns("N").Hidden = Not Sheets("Doelmap").Columns("N").Hidden

End if

End sub


Een andere manier die ik heb geprobeerd is om op het doelblad de waardes door een 'vertzoeken' op te halen uit een bron tabblad, en de te verbergen waardes d.m.v. code wel of niet in de kolom te plaatsen welke word uitgelezen:

Code:
Private Sub CheckBox1_Click()

If CheckBox1.Value = True Then

Const PWORD As String = "wachtwoord"
Dim response As String
Dim msg As String
msg = "Voer wachtwoord in:"
Do
response = Application.InputBox(Prompt:=msg, _
Title:="Password", Type:=2)
If response = CStr(False) Then Exit Sub 'Cancelled
msg = "Incorrect!" & vbNewLine & "Voer opnieuw wachtwoord in:"
Loop Until response = PWORD

Sheets("Doelmap").Columns("N").Hidden = Not Sheets("Doelmap").Columns("N").Hidden

    Sheets("Bronmap").Range("C2:C200").Copy
    Sheets("Bronmap").Range("E2:E200").PasteSpecial xlPasteValuesAndNumberFormats
    Sheets("Bronmap").Range("C2:C200").ClearContents

    MsgBox "Gegevens zijn nu onzichtbaar", vbInformation, "Modus gewijzigd"
    
    Else
    Sheets("Bronmap").Range("E2:E200").Copy
    Sheets("Bronmap").Range("C2:C200").PasteSpecial xlPasteValuesAndNumberFormats
    Sheets("Bronmap").Range("E2:E200").ClearContents

    Sheets("Doelmap").Columns("N").Hidden = Not Sheets("Doelmap").Columns("N").Hidden

    MsgBox "Gegevens zijn nu weer zichtbaar", vbInformation, "Modus gewijzigd"

End If

End Sub

Het nadeel hieraan is dat de foutmarge relatief groot is (1x een onderbreking in de macro en de gegevens worden overwritten) maar het voornaamste is dat de gegevens nog steeds relatief makkelijk vindbaar zijn.

Mijn doel is dus om de gegevens daadwerkelijk te verwijderen of versleutelen bij het ontvinken, en in goede staat terug te halen bij het aanvinken.
Voorwaarde is dat de gegevens door een manager wél toegankelijk blijven wanneer de checkbox is aangevinkt (waarmee ik bedoel dat de gegevens in de bronmap gewoon zoals normaal in excel gewijzigd kunnen worden).

Ik ben hier al even naar opzoek maar heb helaas geen oplossing kunnen vinden dus ik ben heel benieuwd of er hier iemand is die mij daar wel bij kan helpen! :D
 

Bijlagen

Beste,

De instructie very hidden bestaat ook. Probeer die instructie eens.
 
Is een bladbeveiliging met een wachtwoord niet voldoende?
 
Beste,

De instructie very hidden bestaat ook. Probeer die instructie eens.

@tkint bedankt voor je reactie! Zover ik kan vinden word deze functie alleen ondersteund voor hele sheets. Dat brengt me wel al verder op weg doordat de bronmap volledig verborgen kan worden ik data simpelweg wel of niet op kan vragen! Ideaal zou ik ook kolommen echt volledig kunnen verbergen.

Bedankt zover!
 
Is een bladbeveiliging met een wachtwoord niet voldoende?

Waar ik eigenlijk naar opzoek ben is een mogelijkheid om te zorgen het bestaan van de bladen en kolommen/ rijen uberhoubt niet zichtbaar/ bekend is.
Met bladen is dat dankzij de tip van @tkint gelukt. Op die manier kan ik ook met de inhoud spelen door de kopie paste methode in de voorbeeld code toe te passen.
Wat nu nog rest is een manier om variabel specifieke kolommen en of rijen te laten verdwijnen. :)
 
Kijk ook naar de opmerking van VenA

Als je de werkblad beveiliging aan zet dan kunnen gebruikers niet zomaar kolommen zichtbaar maken die verborgen zijn
Ik heb 2 code regels toegevoegd die de bladbeveiling regelt en daarvoor hetzelfde password gebruikt als voor de inputbox ingevoerd wordt.

Code:
Private Sub CheckBox1_Click()

If CheckBox1.Value = True Then

Const PWORD As String = "wachtwoord"
Dim response As String
Dim msg As String
msg = "Voer wachtwoord in:"
Do
   response = Application.InputBox(Prompt:=msg, _
   Title:="Password", Type:=2)
   If response = CStr(False) Then Exit Sub 'Cancelled
   msg = "Incorrect!" & vbNewLine & "Voer opnieuw wachtwoord in:"
Loop Until response = PWORD

Sheets("Doelmap").Unprotect password:=PWORD

   Sheets("Doelmap").Columns("N").Hidden = Not Sheets("Doelmap").Columns("N").Hidden

Sheets("Doelmap").Protect password:=PWORD

End if

End sub
 
Kijk ook naar de opmerking van VenA

Als je de werkblad beveiliging aan zet dan kunnen gebruikers niet zomaar kolommen zichtbaar maken die verborgen zijn
Ik heb 2 code regels toegevoegd die de bladbeveiling regelt en daarvoor hetzelfde password gebruikt als voor de inputbox ingevoerd wordt.

Code:
Private Sub CheckBox1_Click()

If CheckBox1.Value = True Then

Const PWORD As String = "wachtwoord"
Dim response As String
Dim msg As String
msg = "Voer wachtwoord in:"
Do
   response = Application.InputBox(Prompt:=msg, _
   Title:="Password", Type:=2)
   If response = CStr(False) Then Exit Sub 'Cancelled
   msg = "Incorrect!" & vbNewLine & "Voer opnieuw wachtwoord in:"
Loop Until response = PWORD

Sheets("Doelmap").Unprotect password:=PWORD

   Sheets("Doelmap").Columns("N").Hidden = Not Sheets("Doelmap").Columns("N").Hidden

Sheets("Doelmap").Protect password:=PWORD

End if

End sub

@roeljongman super bedankt voor het meedenken! Klopt inderdaad. Het nadeel is alleen dat de rest van het blad dan ook niet meer bewerkbaar is, wat wel zou moeten. Dit kan eventueel per cel worden aangegeven maar hier heb ik slechte ervaring mee en vind ik te omslachtig voor deze toepassing.
Daarnaast wil ik een vergelijkbare code ook toepassen op rijen in het "KLANT INFO" blad, welke zich (omdat het het eerste blad is) niet laat beveiligen.

Wat wellicht een oplossing zou kunnen zijn is als ik bijvoorbeeld middels code de mogelijkheid om de hoogte van rijen in te stellen wél zou kunnen beveiligen?
Dit is mij zelf in een "If" opstelling nog niet gelukt :d
 
Ok, als bladbeveiliging geen optie is dan zou mijn alternatief zijn om een selection_change event code in Doelmap-blad zetten.

Gebruikers kunnen dan nog wel kolommen tonen en verbergen, maar zodra een andere cel selecteren zal onderstaande code het tonen en verbergen herstellen op basis van de waarde van de checkbox1. het wordt dus uiteindelijk onmogelijk om de formules te bekijken.
Als de checkbox staat aangevinkt is de waarde TRUE daarmee kun je bepalen of een de kolom verborgen is of niet.
Ik vind het logischer om de tekst zichtbaar / onzichtbaar te wijzigen naar Toon formules of Toon Kolom N oid. en op basis daarvan te bepalen hoe de instelling .hidden moet staan voor kolom N.
maar dat betekent dat als de box is aangevinkt de kolom zichtbaar moet zijn en de .Hidden waarde moet False zijn dat leidt tot de volgende event code.

De tekst zichtbaar onzichtbaar zou ik vervangn door "Toon formules" zodat als er een vinkje voor
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Sheets("Doelmap").Columns("N").Hidden = Not Blad1.checkbox1.Value
End Sub

ook in de CheckBox1_Click code moet je m.i. het tonen en verbergen aanpassen. van

Code:
   Sheets("Doelmap").Columns("N").Hidden = Not Sheets("Doelmap").Columns("N").Hidden

naar
Code:
Sheets("Doelmap").Columns("N").Hidden = Not Blad1.checkbox1.Value

Dit omdat de eerste code een zogenaamde "Toggle instelling" is en die is ook makkelijk van slag te brengen als iemand de sheet een keer opent zonder macro's toe te staan en het vinkje veranderd zonder dat de code actief is.

Wat je even moet testen is of je ook nog de code mot aanpassen zodat alleen om een wachtwoord wordt gevraagd als je de kolom N zichtbaar maakt en niet als je hem verbergt.
 
@roeljongman

Top, bedankt voor je reactie! Een soortgelijke oplossing had ik ook bedacht (zie code). Het voordeel is dat het werkt en door er een msgbox bij te doen is het ook nog eens hoogst irritant om toch in die range bezig te zijn (dat is in dit geval goed;)

Het enige nadeel is dat je nog steeds de hoogte of breedte van alle klein gemaakte rijen of kolommen kan veranderen zonder dat je de corrigerende macro activeert. Zolang je je selectie maar niet veranderd. Helaas moet het echt onmogelijk zijn de kolommen of in onderstaand geval rijen uit te vouwen.

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Sheets("Blad01").rows("33:54").Hidden = True And Target.Row >= 32 Then
    Sheets("Blad01").rows("33:54").Hidden = True
MsgBox "Jammer joh"
End If
End Sub

Ik heb al geprobeerd obv change event te werken maar een hoogte verandering word niet als change herkent.

Nu is mijn volgende poging om d.m.v. een if code trigger dat 1 van de verborgen rijen in hoogte meer is dan 1 (of liefst zelfs 0,1) en als voorwaarde dat de rijen op verborgen staan ingesteld, maar dat is helaas nog niet gelukt:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If .Row("33") < 1 AND Sheets("Blad01").rows("33:54").Hidden = True Then
Sheets("Blad01").rows("33:54").Hidden = True
MsgBox "Jammer joh"
End If
End Sub

Mocht bovenstaande code niet werkend te krijgen zijn kan ik me nog maar 1 ding bedenken en dat is om middels vba de rijhoogte vast te zetten/ de mogelijkheid om deze te wijzigen te blokkeren. Maar werkelijk geen idee hoe dit te doen is :confused:
 
Ik heb toch moeten toegeven aan het versleutelen van de sheets. Af en toe wat onhandig maar het is te doen! Iedereen bedankt voor de hulp!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan