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

Flikkeren beeldscherm ondanks disable screenupdating en enableevents

Status
Niet open voor verdere reacties.

Hans Gorter

Gebruiker
Lid geworden
27 okt 2008
Berichten
97
Application.ScreenUpdating = False
Application.EnableEvents = False

en toch flikkert het beeldscherm even als ik iets in een cel verander. Wat moet ik nog meer uitschakelen om dat te voorkomen?

Bij voorbaat dank!
 
Hallo Hans.

Volgens mij is het uitzetten van ScreenUpdates niet volmaakt, die met name als je werkbladen zichtbaar en onzichtbaar maakt. Als je beveiligde werkbladen hebt, moet je de beveiliging van die bladen opheffen voor je allerlei bewerkingen uitvoert. Het opheffen van de beveiliging van de werkmap als geheel is daarvoor niet voldoende.
 
ScreenUpdating = False is inderdaad de manier om te voorkomen dat het scherm voortdurend bijgewerkt wordt, en meestal werkt het ook vrij goed, maar in mijn ervaring is niet te voorkoment dat het Excel venster af en toe flikkert of knippert. Als echter alle wijzigingen zichtbaar zijn terwijl ze worden aangebracht, is er iets mis.
 
Maak gebruik van een userform, dan zijn al deze problemen verdwenen.

Zonder zicht op de overige code die je gebruikt is je vraag nauwelijks te beantwoorden.
 
Ik dacht dat het niet zo van belang was, maar hier komt ie

Private Sub Worksheet_Change(ByVal Target As Range)
Dim nX As Long
Dim nY As Long
Dim lAangekruisd As Boolean

Dim nDatumKolom As Long
Dim nGebeurtenisKolom As Long

'In de agenda wordt aangegeven welke gebeurtenis wanneer plaatsvindt
'én voor welke klassen deze gebeurtenis bedoeld is
'áls er met b.v. een spatie wordt aangegeven dat het bedoeld is voor bv groep 8 (kolom M)
'dan verandert het prg die spatie in de aanduiding van de groep zoals die staat op regel 19 (kopregel)

nDatumKolom = 4 'aanpassen aan instellingen in lesplanning
nGebeurtenisKolom = 26

Application.ScreenUpdating = False
Application.EnableEvents = False

If Target.Row < 20 Then
'pas vanaf regel 20 vinden mutaties plaats
GoTo Einde
End If

If Target.Column > nDatumKolom + 1 And Target.Column <> nGebeurtenisKolom Then
'er is een mutatie in een kolom van de groepsaanduidingen
If Sheets("Agenda").Cells(Target.Row, Target.Column).Value <> "" Then
'er is iets aangegeven, dat omzetten in aanduiding en kleur van de corresponderende kolom op rij 19
Cells(19, Target.Column).Select
Selection.Copy
Cells(Target.Row, Target.Column).Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Cells(Target.Row, Target.Column).Value = Cells(19, Target.Column).Value

Else
'kleur van D(datum)-kolom terugzetten omdat cel eerder een (nu verwijderde) waarde en dus afwijkende kleur kan hebben
With Sheets("Agenda").Cells(Target.Row, Target.Column)
.Interior.Color = Cells(Target.Row, nDatumKolom).Interior.Color
End With
End If
End If


If Sheets("Agenda").Cells(Target.Row, nDatumKolom).Value <> "" And Sheets("Agenda").Cells(Target.Row, nGebeurtenisKolom).Value <> "" Then
'er is een datum en gebeurtenis ingevuld

lAangekruisd = False
'controleren of tenminste één groep is geselecteerd
For nY = nDatumKolom + 2 To nGebeurtenisKolom - 1

If Sheets("Agenda").Cells(Target.Row, nY).Value <> "" Then
'er is iets aangekruisd
lAangekruisd = True
nY = nGebeurtenisKolom - 1
End If

Next

If lAangekruisd = False Then

MsgBox "Geen groep(en) aangegeven voor wie de gebeurtenis geldt.", vbCritical, "Directie Agenda De Startbaan houdt z'n hart vast"
Cells(Target.Row, nDatumKolom + 1).Select
GoTo Einde

End If

'sorteer de agenda op datum
Call hgSorteer

'zoek de eerste lege regel voor nieuwe invoer
For nX = ActiveCell.Row To 2500
If Cells(nX, nDatumKolom).Value = "" Then
Cells(nX, nDatumKolom).Select
GoTo Einde
End If
Next

End If




Einde:
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
 
Volgens mij moet je bij de tweede keer (Application.ScreenUpdating = True) ook False invullen ???
 
De ScreenUpdatings zijn goed. False in het begin en True aan het eind.

Als je je code eens goed doorneemt en niet "Select" gebruikt, maakt dat een verschil?

Er zijn veel voorbeelden op dit forum hoe je dat moet doen. Select is min of meer overbodig en eigenlijk gezien als
slechte codering (is dat een nederlands woord?)

HTH
Voormalige Bredanaar
 
Wat doe je in Call hgSorteer?
Met een werkend voorbeeld van je probleem zou je wel eens sneller geholpen kunnen worden.
 
Ai Frans, die was raak. Daar werdde screenupdate ook weer uit en later aan gezet. En dat was het dus. Dank, ook aan de voormailg Bredanaar.select jolivanes
 
Als iedereen die in deze valkuil is getrapt me een stuiver had gegeven was ik nu multi miljonair. Tenzij ik iedereen ook een stuiver had moeten geven voor elke keer dat ik zelf... :rolleyes:
 
Lid sinds 2008 en dan nog:
- geen code tags gebruiken
- geen voorbeeldbestand plaatsen
- partiële code plaatsen,

T'is wat.....
 
Geen idee wat code tags zijn en ik probeer verder zo positief mogelijk in het leven te staan, dus mensen afzeiken zul je mij niet zien doen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan