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

VBA - automatisch aanpassen range bij wijzigen document

Status
Niet open voor verdere reacties.

dewes86

Gebruiker
Lid geworden
15 nov 2010
Berichten
33
Goedemiddag,

Werkelijk geen idee of dit überhaupt mogelijk is maar daarom extra benieuwd of iemand een suggestie heeft.

Ik heb een Excel met meerdere VBA's die toegespitst zijn op specifieke cellen, rijen en/of kolommen. Het enige vervelende is dat als ik dan een kolom of rij toevoeg, alle ranges binnen deze VBA's handmatig aangepast moeten worden om het weer kloppend te krijgen. Een concreet voorbeeld:


Private Sub RESETBUTTON()
If MsgBox("Weet je zeker dat je het document wilt resetten?", vbYesNo) = vbNo Then Exit Sub
Range("J12:J21, Q12:Q21, R12:R21, J26:J65, Q26:Q65, R26:R65, J68:J82, Q68:Q82, R68:Q82, J85:J99, Q85:Q99, R85:Q99, J102:J116, Q102:Q116, R102:R116, J119:J130, Q119:Q130, R119:R130, J135:J184, Q135:Q184, R135:R184, J187:J201, Q187:Q201, R187:R201, J204:J218, Q204:Q218, R204:R218, J221:J235, Q221:Q235, R221:R235, D239:D248, J239:J248, Q239:Q248, R239:R248, J250:J259, Q250:Q259, R250:R259, J262:J271, Q262:Q271, R262:R271, J275:J277, Q275:Q277, R275:R277, J279:J281, Q279:Q281, R279:R281, J284:J290, Q284:Q290, R284:R290, J293:J301, Q293:Q301, R293:R301").Select
Selection.ClearContents
Range("D12:D21, D26:D65, D68:D82, D85:D99, D102:D116, D119:D130, D135:D184, D187:D201, D204:D218, D221:D235, D250:D259, D262:D271, D279:D281, D275:D277, D284:D290, D293:D301" & LastRow) = "Test"

End Sub

Bottom line; als ik nu ergens een extra rij invoeg dan klopt bijna geen enkele van de bovenstaande ranges meer en moet ik ze handmatig weer aanpassen. Het mooiste zou natuurlijk zijn als het zou kunnen anticiperen op deze actie.

Iemand een briljant idee en mij daarmee uit de brand zou willen helpen?

Alvast super bedankt voor de hulp!

Hartelijke groet
 
Laatst bewerkt:
werk met gedefinieerde namen, als je daar binnen een rij toevoegt, dan past die zich vanzelf aan.
Misschien hoef je dan enkel zoiets te doen voor de J-kolom, aangezien je steeds daarop Q en R meeneemt.
Lukt het niet, post dan een voorbeeldje.
 
Geef de bedoelde range een naam, bijvoorbeeld R_RESET
In je code doe je dan:
Code:
Range("R_RESET").ClearContents
 
Voorbeeld file

Bedankt allebei voor de reacties!

Het klinkt logisch maar ik ben eerlijk gezegd nog niet helemaal thuis met hoe je precies namen van ranges definieert. Kunnen jullie mij wellicht op weg helpen hoe je dit precies doet?

Ik heb een voorbeeld file bijgevoegd in de bijlage.

Ontzettend bedankt voor jullie hulp!
 

Bijlagen

  • VoorbeeldVBA.xlsx
    34 KB · Weergaven: 42
Super! Een groot deel heb ik al om kunnen zetten. Hoe pas ik de range juist in bij de onderstaande code? Dit is mij namelijk nog niet gelukt:

Private Sub Knop42_Klikken()
Dim Rng As Range
Set Rng = Union(Columns(15), Columns(16))
Rng.EntireColumn.Hidden = Not Rng.EntireColumn.Hidden
End Sub

Ik dacht dat ik de range moest toekennen in deze regel:

Set Rng = Union(Columns(15), Columns(16))

Dit lukt helaas niet en er ontstaat een compileerfout.

Alvast bedankt weer!
 
De code werkt prima als je 'Private' weglaat en de code aan de knop hangt.
 
Dit is voldoende:
Code:
Private Sub Knop42_Klikken()
    Columns("O:P").Hidden = Not Columns("O:P").Hidden
End Sub
 
Hi Ed, bedankt weer voor je reactie! Maar stel nou dat ik een nieuwe kolom invoer ergens voor of na, dan zal ik deze alsnog handmatig moeten veranderen omdat ze allemaal verspringen.

Vandaar dat het denk ik makkelijker zou zijn als ik er een range naam aan koppel, of zie ik dat verkeerd?
 
Dan geef je die twee kolommen een naam bij 'Insert Name'.
 
Wat heeft het bestand in #4 met de vraag te maken?
 
Selecteer de betreffende kolommen en geef die bijvoorbeeld de naam Kolommen.
En dan:
Code:
Private Sub Knop42_Klikken()
     Range("Kolommen").EntireColumn.Hidden = Not Range("Kolommen").EntireColumn.Hidden
End Sub
 
Selecteer de betreffende kolommen en geef die bijvoorbeeld de naam Kolommen.
En dan:
Code:
Private Sub Knop42_Klikken()
     Range("Kolommen").EntireColumn.Hidden = Not Range("Kolommen").EntireColumn.Hidden
End Sub


Wederom weer precies wat ik zocht! Super bedankt voor je hulp en geduld.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan