Bosch_Guido
Gebruiker
- Lid geworden
- 30 dec 2004
- Berichten
- 107
Hallo allemaal.
Op een ander forum de volgende vraag gesteld. Helaas nog geen antwoord. Iemand hier een idee? Is de uitdaging te groot?
Ik heb meerdere selectievakjes, uit de werkbalk formulieren. Daar ligt echter niet het grootste probleem als je het mij vraagt!
Op het moment dat ik selectievakje in kolom B inschakel,
wordt de tekst van kolom A, zelfde rij, gekopieerd naar een ander blad. Wordt
het selectievakje uitgeschakeld dan wordt de waarde verwijderd. Dat is de
onderstaande code. (de selectievakjes staan in kolom b met een koppeling naar kolom I; zie code) Nu wil ik met het Worksheet_Change event een macro starten
dat, op het moment dat de tekst in kolom A verandert wordt, eigenlijk
dezelfde procedure uitgevoerd wordt. Dit betekend het volgende. De waarde die
in de veranderde cel zát, moet worden verwijderd uit de lijst. De lijst is
dynamisch dus er moet gezocht worden naar een soort van "vorige waarde" van de
cel. Deze waarde moet verwijderd worden en de rest van de argumenten moet
omhoog geschoven worden. Vervolgens moet de nieuwe waarde in de lijst komen
te staan. De plaats van de waarde maakt niet uit, deze mag dus ook de oude
waarde vervangen. Is dit allemaal mogelijk?
Guido
P.S. Ik heb gekeken naar mijn oude code, maar de veranderingen kloppen niet helemaal aangezien de selectievakjes uit de andere werkbalk komen.
"RP aka Ronny" schreef:
> Guido Bosch schreef:
> > Zie je wel, ik zie iets over het hoofd... :S
> >
> > Maar nu het volgende probleem...
> > De onderstaande code zorgt ervoor dat op het moment dat een selectievakje
> > aangevinkt wordt een waarde gekopieerd wordt (van werkblad 1 naar werkblad
> > 2). Vervolgens bij het weer uitzetten van het selectievakje wordt de waarde
> > die bij het selectievakje hoort opgezocht en verwijderd.
> >
> > Kan dit ook bij de Worksheet_Change? De waarde die opgezocht moet worden is
> > dat de waarde die de cel had voordat hij verandert werd. Dit is volgens mij
> > vrij lastig. Ik hoop dat iemand me kan helpen!!!
> >
> > Thnx, Guido
> >
> > Sub kopieren_faciliteiten_extra1()
> > Application.ScreenUpdating = False
> > Dim d As Variant
> > Dim x As Long
> >
> > With Sheets("Bezoekers_en_tarieven")
> > x = .Cells(Rows.Count, "O").End(xlUp).Row
> > End With
> > With ActiveSheet
> > If Range("I42") = True Then
> > Range("A42").Copy
> > Destination:=Sheets("Bezoekers_en_tarieven").Range("O" & x).Offset(1, 0)
> > Else
> > For Each d In
> > Sheets("Bezoekers_en_tarieven").Range("O69:O100")
> > If d = Range("A42").Value Then
> > d.Delete Shift:=xlUp
> > End If
> > Next d
> > End If
> > End With
> > Application.ScreenUpdating = True
> > End Sub
> >
>
> Heb je slechts 1 selectievakje?
> Is het selectievakje afkomstig uit de werkbalk Werkset Besturingselementen?
>
> Indien je 2 x ja antwoordt, dan kan je een dergelijke code
> gebruiken. Dubbelklik hiervoor (in de ontwerpmodus) op het
> selectievakje en plaats volgende code.
>
> Private Sub CheckBox1_Click()
> Call kopieren_faciliteiten_extra1
> End Sub
>
>
> Je andere sub moet je ook lichtjes aanpassen:
>
> Sub kopieren_faciliteiten_extra1()
> Dim d As Variant
> Dim x As Long
>
> Application.ScreenUpdating = False
> With Sheets("Bezoekers_en_tarieven")
> x = .Cells(Rows.Count, "O").End(xlUp).Row
> End With
> With ActiveSheet
> If .CheckBox1.Value = True Then '<-- dit is veranderd
> Range("A42").Copy _
> Sheets("Bezoekers_en_tarieven").Range("O" & x).Offset(1, 0)
> Else
> For Each d In _
> Sheets("Bezoekers_en_tarieven").Range("O69:O100")
> If d = Range("A42").Value Then
> d.Delete Shift:=xlUp
> End If
> Next d
> End If
> End With
> Application.ScreenUpdating = True
> End Sub
>
>
> Vergeet niet om achteraf de ontwerpmodus uit te schakelen.
> Hopelijk lukt het hiermee.
>
>
> --
> Met vriendelijke groeten
>
> Ronny
>
Op een ander forum de volgende vraag gesteld. Helaas nog geen antwoord. Iemand hier een idee? Is de uitdaging te groot?
Ik heb meerdere selectievakjes, uit de werkbalk formulieren. Daar ligt echter niet het grootste probleem als je het mij vraagt!
Op het moment dat ik selectievakje in kolom B inschakel,
wordt de tekst van kolom A, zelfde rij, gekopieerd naar een ander blad. Wordt
het selectievakje uitgeschakeld dan wordt de waarde verwijderd. Dat is de
onderstaande code. (de selectievakjes staan in kolom b met een koppeling naar kolom I; zie code) Nu wil ik met het Worksheet_Change event een macro starten
dat, op het moment dat de tekst in kolom A verandert wordt, eigenlijk
dezelfde procedure uitgevoerd wordt. Dit betekend het volgende. De waarde die
in de veranderde cel zát, moet worden verwijderd uit de lijst. De lijst is
dynamisch dus er moet gezocht worden naar een soort van "vorige waarde" van de
cel. Deze waarde moet verwijderd worden en de rest van de argumenten moet
omhoog geschoven worden. Vervolgens moet de nieuwe waarde in de lijst komen
te staan. De plaats van de waarde maakt niet uit, deze mag dus ook de oude
waarde vervangen. Is dit allemaal mogelijk?
Guido
P.S. Ik heb gekeken naar mijn oude code, maar de veranderingen kloppen niet helemaal aangezien de selectievakjes uit de andere werkbalk komen.
"RP aka Ronny" schreef:
> Guido Bosch schreef:
> > Zie je wel, ik zie iets over het hoofd... :S
> >
> > Maar nu het volgende probleem...
> > De onderstaande code zorgt ervoor dat op het moment dat een selectievakje
> > aangevinkt wordt een waarde gekopieerd wordt (van werkblad 1 naar werkblad
> > 2). Vervolgens bij het weer uitzetten van het selectievakje wordt de waarde
> > die bij het selectievakje hoort opgezocht en verwijderd.
> >
> > Kan dit ook bij de Worksheet_Change? De waarde die opgezocht moet worden is
> > dat de waarde die de cel had voordat hij verandert werd. Dit is volgens mij
> > vrij lastig. Ik hoop dat iemand me kan helpen!!!
> >
> > Thnx, Guido
> >
> > Sub kopieren_faciliteiten_extra1()
> > Application.ScreenUpdating = False
> > Dim d As Variant
> > Dim x As Long
> >
> > With Sheets("Bezoekers_en_tarieven")
> > x = .Cells(Rows.Count, "O").End(xlUp).Row
> > End With
> > With ActiveSheet
> > If Range("I42") = True Then
> > Range("A42").Copy
> > Destination:=Sheets("Bezoekers_en_tarieven").Range("O" & x).Offset(1, 0)
> > Else
> > For Each d In
> > Sheets("Bezoekers_en_tarieven").Range("O69:O100")
> > If d = Range("A42").Value Then
> > d.Delete Shift:=xlUp
> > End If
> > Next d
> > End If
> > End With
> > Application.ScreenUpdating = True
> > End Sub
> >
>
> Heb je slechts 1 selectievakje?
> Is het selectievakje afkomstig uit de werkbalk Werkset Besturingselementen?
>
> Indien je 2 x ja antwoordt, dan kan je een dergelijke code
> gebruiken. Dubbelklik hiervoor (in de ontwerpmodus) op het
> selectievakje en plaats volgende code.
>
> Private Sub CheckBox1_Click()
> Call kopieren_faciliteiten_extra1
> End Sub
>
>
> Je andere sub moet je ook lichtjes aanpassen:
>
> Sub kopieren_faciliteiten_extra1()
> Dim d As Variant
> Dim x As Long
>
> Application.ScreenUpdating = False
> With Sheets("Bezoekers_en_tarieven")
> x = .Cells(Rows.Count, "O").End(xlUp).Row
> End With
> With ActiveSheet
> If .CheckBox1.Value = True Then '<-- dit is veranderd
> Range("A42").Copy _
> Sheets("Bezoekers_en_tarieven").Range("O" & x).Offset(1, 0)
> Else
> For Each d In _
> Sheets("Bezoekers_en_tarieven").Range("O69:O100")
> If d = Range("A42").Value Then
> d.Delete Shift:=xlUp
> End If
> Next d
> End If
> End With
> Application.ScreenUpdating = True
> End Sub
>
>
> Vergeet niet om achteraf de ontwerpmodus uit te schakelen.
> Hopelijk lukt het hiermee.
>
>
> --
> Met vriendelijke groeten
>
> Ronny
>