Schonen van bepaalde cellen binnen een bereik

Status
Niet open voor verdere reacties.

dirktimm

Gebruiker
Lid geworden
7 feb 2006
Berichten
333
Hallo,

Ik heb een werkblad gemaakt waarop men in een aantal cellen waarden(164 antwoorden) moet invullen op vragen. Het werkblad is beveiligd en de cellen waarin waarden moeten worden ingevoerd zijn niet geblokkeerd. Nadat er volledig is ingevuld wordt er door een macro het werkblad gekopieerd naar een verzamelwerkblad. De "invoer" cellen moeten weer leeggemaakt worden voor de volgende opgave. In een code kun je cel voor cel benoemen om te schonen. De macro hiervoor wordt wel erg lang. Hoe kun je nu in een of twee regel-code alle cellen waarin een antwoord moet komen schonen zonder dat de rest van het werkblad of bereik wordt geschoond ?
 
Benoem in excel de cellen waarin de antwoorden staan als een "named range", dan kun je met 2 regels code die range selecteren en legen.


Grtz,
 
schonen cellen

Hallo

Bedankt voor je antwoord. Deze methode was bekend en maar niet de functie/ methode die ik zoek. Bij elke wijziging van een rij en/of kolom in het werkblad moet je ook de macro aanpassen. Dit wil ik voorkomen door er voor te zorgen dat de macro altijd het hele werkblad en een groot bereik gaat controleren. Eigenlijk een functie die alle cellen met een bepaalde eigenschap selekteert en vervolgens leeg kunt maken. In mijn voorbeeld zou de eigenschap zijn: indien cel locked = false, dan maak cel schoon.

Ik heb nu een macro gemaakt die de cellen een voor een doorloopt en vervolgens al dan niet schoont. Het aantal rij en kolommen wordt in de macro voldoende hoog ingesteld. Beter zou zijn een programmaregel te maken die het aantal rijen en kolom vooraf gaat tellen en vullen in de variabele Rngrij en Rngkol. Zal wel iets zijn met “count”. De macro gaat als volgt:


Rngrij = 5
Rngkol = 2
i = 1
j = 1
Range("A1").Select
Application.ScreenUpdating = False
For j = 1 To Rngkol
For i = 1 To Rngrij
If ActiveCell.Locked = False Then
Selection.ClearContents
ActiveCell.Offset(1, 0).Select
Else
ActiveCell.Offset(1, 0).Select
End If
Next i
ActiveCell.Offset(-5, 1).Select
Next j
Range("A1").Select
Application.ScreenUpdating = True

Groeten dirktimm
 
Ik kom even niet op de naam, maar er is een manier om va een werkblad de gebruikte rannge te selecteren. De helpfile zal wel uitkomst bnieden. Als je dat bereik selecteerd en kijkt hoeveel kolommen en rijen erin zitten dan weet je wat je wilt.


Grtz,
 
Met onderstaande code selecteer je het aaneengesloten gebied waarin je cursor staat en worden alle niet geblokkeerde cellen leeg gemaakt..
Je kunt Selection.CurrentRegion.Select vervangen door je eigen range.
Bijvoorbeeld Range("F2:L22").select of Range(Invulgebied).select waarbij je invulgebied vooraf gedefinieert hebt in de macro of je sheet.


Sub Macro1()
'
' Macro1 Macro

'
Selection.CurrentRegion.Select
For Each Cell In Selection
If Not Cell.Locked Then
Cell.ClearContents
End If
Next
End Sub
 
schonen cellen

Jan, bedankt voor je reactie. De oplossing die je aandraagt is fraai. Kort en duidelijk leesbaar. Nog een klein probleempje. Het werkblad is beveiligd, de invoercellen zijn locked = false. Dus loopt de macro niet, tenzij je aan het begin de beveiliging even uitzet en aan het eind weer aanzet.

Dim Password 'This line of code is optional
Password = "1234"
ActiveSheet.Unprotect Password
Selection.CurrentRegion.Select
For Each Cell In Selection
If Not Cell.Locked Then
Cell.ClearContents
End If
Next
Password = "1234"
ActiveSheet.Protect Password, True, True, True
End Sub

groet dirktimm
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan