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

Wissen van data

Status
Niet open voor verdere reacties.

wacco

Gebruiker
Lid geworden
9 mrt 2006
Berichten
229
Hallo,
Nadat ik eerder door Ahulpje er goed ben geholpen, nogmaals dank daarvoor, ben ik opnieuw tegen een ander probleem aan gelopen.
Ik heb een grote lijst met data, waardoor met het plaatsen van x in kolom L een aantal cellen wordt gedeblokkert en het is mogelijk om data in verschilende cellen in te voeren.
Bij het weghalen van x, moet ook de data verdwijnen en de cellen worden geblokkeerd.
Met behulp van AHulpje is dat prima opgelost.

Deze verschillende rijen met data worden geselecteerd en onder elkaar geplaatst.
Nu is er ook data welke in de geselecteerde en onder elkaar geplaatste rijen, met de hand moet worden ingevoerd.
Dit gebeurd in de kolommen BM t/m BX.
Deze ingevoerde data moet ook in de lijst, welke niet onder elkaar is geplaatst, in de kolommen AD t/m AO worden weergegeven.
Echter deze rijen staan niet op dezelfde hoogte als in de geselcteerde en onder elkaar geplaatste rijen in de kolommen BM t/m BX.
Ook als er in kolom L een x wordt weggehaald, zal in het onder elkaar geplaatste overzicht een rij verdwijnen, echter de met de hand ingevoerde data blijft staan en schuift nu op er is immers een rij er tussen uit gehaald.

Is het mogelijk dat de met de hand ingevoerde data in het onder elkaar geplaatste overzicht, op de juiste rijen in de kolommem AD t/m AO worden weer gegeven.
En als de x wordt weggehaald in kolom L, de data in de kolommen AD t/m AO wordt gewist, en tevens de met de hand ingevoerde data in de kolommen BM t/m BX op de juiste rij wordt gewist, zodat de ingevoerde data niet opschuift.

Ik hoop dat het een beetje duidelijk overkomt wat het probleem is.
Heb een voorbeeld bijgevoegd, hoop dat dit bijdraagd om het duidelijk te maken wat het probleem is.
Heb boven in het blad nog wat tekst toegevoegd om het te verduidelijken, hopelijk genoeg om tot een oplossing te komen
 

Bijlagen

Laatst bewerkt:
Wat je wilde was niet in één oogopslag duidelijk, mede doordat je document erg veel redundante data bevatte.
Om het zoekgebied voor VERT.ZOEKEN eenduidig te maken zijn er twee benoemde bereiken (named ranges) aangemaakt, "Data" en "Invuldata".
De invuldata is verhuisd naar een eigen werkblad "Invuldata" en de totaal overbodige redundante data in de kolommen CC t/m DN zijn verwijderd, daarvoor in de plaats zijn er vier kolommen ingevoegd op Blad1, nu Basisdata genoemd. Deze vier kolommen A t/m D worden met formules gevuld en zou je kunnen verbergen.
 

Bijlagen

@Ahulpje,

Dankje voor je snelle reactie.
Dit ziet er inderdaad een stuk rustiger uit, heb het zojuist getest.
Maar als ik in het blad Basisdata een rij wis (door weghalen x), dan wordt deze rij in in blad Invuldata gedeeltelijk gewist.
Het gedeelte onder de gele maanden wordt inderdaad gewist, maar het bijbehorende gedeelte onder de blauwe maanden wordt niet gewist maar schuift een rij op waardoor deze gegevens niet meer kloppen.
Ook schuiven deze gegevens in het blad Basisdata op, ook hier staan dan niet de juiste invuldata bij de juiste rij bassigegevens.
Ik hoop dat je nog eens wil kijkenof dit ook is op te lossen
 
Ook nu weer een sterk vereenvoudigde versie.
Het werkblad "Invuldata" is verwijderd, deze data kun je nu direct naast de basisdata invoeren.
Om de rijen met invuldata in één overzicht te krijgen is de filterknop toegevoegd.
Onderhoud is nu veel eenvoudiger geworden en als je geen al te klein beeldscherm hebt past het nog op een scherm!
 

Bijlagen

Beste Ahulpje,

Wederom hartelijk dank voor de snelle reactie.
En wat een idee om dit met een filter te doen.
Het geheel is inderdaad veel ovberzichtelijker en zeker veel beter te onderhouden.
Ga het weer verder uit testen, maar zie voor nu geen echte problemen.
 
@ahulpje,

Ik heb volgens mij op alle manieren jouw laatste suggestie uitgeprobeerd.
En ben geen verrassingen tegen gekomen.
Maar ik eb (natuurlijk) nog een vraagje.
Hiervoor had jij onderstaande code gemaakt.
En ik wil daar graag een waarschuwing in voordat er iets werkelijk wordt verwijderd, en dit lukt mij maar niet omdat op het juiste moment te genereren.
Het probleem is (waarschijnlijk) ook dat het kruisje (x) met de hand middels delete wordt gewist, waardoor de gehele rij wordt gewist.
Dit werkt prima, maar een waarschuwing voor dat daadwerkelijk alles wordt gewist lijkt op zijn plaats te zijn.
Bij bevestiging mag alles dus gewist worden, maar bij annuleren zou alle data moeten blijven staan en ook het kruisje (x) wat handmatig is verwijderd zou dan hersteld moeten worden
Ik heb geen idee of dit al mogelijk is, en of jij nog tijd heb om hier eens naar te kijken.....al hoop ik natuurlijk van wel.
Code:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
'Met dank aan Ahulpje
    If Target.Column = 17 Then
        Dim rng As Range
        Unprotect
        For Each rng In Target
            If rng = "x" And rng.Offset(0, -15) = 1 Then
                With Range(rng.Offset(0, 1), rng.Offset(0, 2))
                    .Locked = False
                End With
                With Range(rng.Offset(0, 17), rng.Offset(0, 28))
                    .Locked = False
                End With
            ElseIf rng = "x" And rng.Offset(0, -15) = 0 Then
                'verder niets doen
            ElseIf rng = vbNullString Then
                With Range(rng.Offset(0, 1), rng.Offset(0, 2))
                    .ClearContents
                    .Locked = True
                End With
                 With Range(rng.Offset(0, 17), rng.Offset(0, 28))
                    .Locked = True
                End With
                
                'Invuldata ook verwijderen
                Range(rng.Offset(0, 17), rng.Offset(0, 28)).ClearContents
            Else
                MsgBox "Alleen x toegestaan.", vbCritical, "Foutieve invoer"
                rng.Select
                rng.ClearContents
            End If
        Next
        Protect
    End If
End Sub
 
Beetje lastig testen zonder bijgewerkt voorbeelddocument met gewijzigde layout, maar hierbij een poging:
Code:
Private Sub Worksheet_Change2(ByVal Target As Range)
'Met dank aan Ahulpje
    If Target.Column = 17 Then
        Dim rng As Range
        Unprotect
        For Each rng In Target
            If rng = "x" And rng.Offset(0, -15) = 1 Then
                Range(rng.Offset(0, 1), rng.Offset(0, 2)).Locked = False
                Range(rng.Offset(0, 17), rng.Offset(0, 28)).Locked = False
            ElseIf rng = "x" And rng.Offset(0, -15) = 0 Then
                'x geplaatst, verder niets doen
            ElseIf rng = vbNullString Then
                'x verwijderd
                If MsgBox("Gegevens worden verwijderd, wilt u doorgaan?", vbYesNo + vbCritical + vbDefaultButton2, "Waarschuwing") = vbYes Then
                    With Range(rng.Offset(0, 1), rng.Offset(0, 2))
                        .ClearContents
                        .Locked = True
                    End With
                    'Invuldata ook verwijderen
                    With Range(rng.Offset(0, 17), rng.Offset(0, 28))
                        .ClearContents
                        .Locked = True
                    End With
                Else
                    'x weer terugzetten
                    Target = "x"
                End If
            Else
                MsgBox "Alleen x toegestaan.", vbCritical, "Foutieve invoer"
                rng.Select
                rng.ClearContents
            End If
        Next
        Protect
    End If
End Sub
 
@Ahulpje,

Helaas werkt code niet zoals de bedoeling is.
Ingevoerde data wordt nu niet gewist, en het is ook mogelijk om iets anders in te voeren dan x.
Ook verschijnt er geen melding.
Ik had natuurlijk een aangepaste test versie moeten uploaden, excuses daarvoor.
Nu alsnog een test versie.
Versie 3, is de versie met de oude code.
Versie 4 is met de laatste code, welke niet werkt.
 

Bijlagen

Voor invoercontrole heeft MS Userforms uitgevonden.
Als je vindt dat een gebruiker niet met een werkblad mag werken, moet je hem/haar dat werkblad ook niet tonen.
Bestanden met samengevoegde cellen negeer ik.
 
In bericht #7 kun je zien dat ik je per abuis een tijdelijk uitgeschakelde Worksheet_Change event had gestuurd:

Code:
[COLOR=#333333]Private Sub Worksheet_Change[/COLOR][COLOR=#ff0000]2[/COLOR][COLOR=#333333](ByVal Target As Range)[/COLOR]

Om het goed te maken bijgaand een wel werkende versie met diverse verbeteringen.
 

Bijlagen

@Ahulpje,

Wederom hartelijk dankvoor je geweldige hulp.
Lijkt nu perfect te werken

Code ziet er plotseling een stuk ingewikkelder uit, ik begrijp alleen niet goed op wat voor manier je de oude waarden bewaard.
Code:
    If Target.Column = 17 Then
        OudeWaarden = UsedRange.Columns(17)

    End If

En ook de tem Union snap ik niet.
Code:
Union(Range(rng.Off

Als het niet teveel gevraagd is, graag enige uitleg over deze code
 
Een Google search op Excel VBA UsedRange levert 153.000 hits op terwijl Excel VBA Union zelfs 2.690.000 hits oplevert.

Mocht je er dan nog niet uitkomen dan wil ik best een korte toelichting geven, maar eerst even wat zelfwerkzaamheid.;)
 
Je hebt helemaal gelijk. :thumb:
Zal eens gaan kijken of ik wat wijzer kan worden
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan