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

Ongewenste celwijziging bij draaien macro

Status
Niet open voor verdere reacties.

Warme bakkertje

Meubilair
Lid geworden
13 apr 2008
Berichten
8.016
Besturingssysteem
Windows 10
Office versie
MO Home and Business 2024
Door in bijgaande file de cel A1 (dd/mm/jjjj) te wijzigen wordt het volledige werkblad aangepast volgens enkele macros.
Het probleem is echter dat ook cel C2 wordt veranderd terwijl dit niet zou mogen.
Iemand een oplossing of een goede tip?

Rudi
 

Bijlagen

Door in bijgaande file de cel A1 (dd/mm/jjjj) te wijzigen wordt het volledige werkblad aangepast volgens enkele macros.
Het probleem is echter dat ook cel C2 wordt veranderd terwijl dit niet zou mogen.
Iemand een oplossing of een goede tip?

Rudi

Bij welke macro gebeurt dit?

Met vriendelijke groet,


Roncancio
 
Het begint in macro Vrij, maar wordt ook mee gewijzigd bij de daaropvolgende macros.
Ik vermoed dat de fout ergens in het for each-statement zit.

Rudi
 
Het begint in macro Vrij, maar wordt ook mee gewijzigd bij de daaropvolgende macros.
Ik vermoed dat de fout ergens in het for each-statement zit.

Rudi

Nee.
De fout zit in de IF-voorwaarde.
Je gebruikt:

Code:
If c.Value = ("do") Then [B]c.Offset(1, 0).Select[/B]
        With Selection
Het probleem bij deze constructie is dat de With Selection ALTIJD wordt uitgevoerd.
De IF-voorwaarde slaat uitsluitend op wat achter de THEN staat, niet eronder.
Dus als c.Value = "do" dan wordt de volgende cel geselecteerd en met die cel worden een aantal handelingen uitgevoerd.
Maar als c.Value geen "do" is, dan worden de handelingen ook uitgevoerd maar dan met de huidige cel (C2).
Beter is om het als volgt te doen.
Code:
If c.Value = ("do") Then [B]
        c.Offset(1, 0).Select[/B]
        With Selection


Nog een paar opmerkingen:
1. In plaats van:

Code:
   With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
Is onderstaande al voldoende:

Code:
ActiveCell.BorderAround Weight:=xlThin

2.
Op het werkblad verwees je steeds naar de maand in de B-kolom.
Dat is een behoorlijke monnikenwerk geweest.
Je zou gebruik kunnen maken van de dagen die in de 1e rij staan.

Dus ipv
cel C2 - =TEKST($B$2;"ddd")
cel C3 - =TEKST($B$2+1;"ddd")
cel C4 - =TEKST($B$2+2;"ddd")

cel C2 - =TEKST(DATUM($A$1;$A2;C$1)

A1 (jaartal) verandert niet.
A2 (maand) verandert niet.
En je maakt gebruik van de dagen in de 1e rij vanaf C1 zodat je de formule kunt doorslepen naar rechts en naar beneden.

Met vriendelijke groet,


Roncancio
 
Laatst bewerkt:
Je wil C2 als Weekdag Ma,Di,Wo enz ... weergeven.
Maar in de macro's zet je de celopmaak om in tijdsnotatie uu:mm
Dan wijzigt bv Di in 00:00.

Dus moet je die cellen die geen tijdsnotie mogen krijgen uit die macro's halen.

Cobbe
 
Beste Roncancio,
Je voorstel rond het if-statement was inderdaad juist, maar ik heb dan wel een End If moeten invoegen na de End With omdat ik een foutmelding kreeg betreffende een Next zonder For.
Je voorstel betreffende de borders was ook correct, echter heb ik nog een resize moeten toevoegen omdat de border i.p.v 2 cellen slechts 1 cel bevatte.
De datums was inderdaad wat werk maar je oplossing was niet bruikbaar aangezien het jaartal in A1 een volledige datum is met een jjjj-notatie.

Voor Cobbe: dit was juist mijn vraag omdat de bedoeling was dat C2 en volgende niet mocht wijzigen maar door een fout in de macro dit wel gebeurde. De tijnotatie was enkel bedoeld voor de twee onderliggende rijen.

Kan ik voor een vraag betreffende het eventueel inkorten van de module hier verder of open ik beter een nieuwe topic?

Alvast bedankt voor uw snelle antwoord

Rudi
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan