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

Regel highlighten - Excel 2019 tergend langzaam

Status
Niet open voor verdere reacties.

jelle87

Gebruiker
Lid geworden
13 nov 2013
Berichten
278
Goedenmorgen,

Op mijn werk hebben we een aantal bestellijsten, die vol zitten met formules, queries en voorwaardelijke opmaak. In Office/Excel 2010 ging dat allemaal prima (daar zijn ze ook in gemaakt).

We hebben nu helaas een update gehad naar Office 2019, maar op de een of andere manier zijn de lijsten nu enorm traag. Wanneer we bijvoorbeeld getallen invullen en verschillende cellen onder elkaar, zit er wel 3 seconden tussen elke cel die ingevuld wordt (dus je bent allang klaar met het invullen, maar de Excel weergave is dan stapje voor stapje alles nog aan het invullen). De reden weet ik denk ik ook al, we highlighten bepaalde regels zodra een cel geselecteerd is.

Dat heb ik op de volgende manier gebouwd;
- Een formule in voorwaardelijke opmaak: =CEL("rij")=RIJ()
(en dan opmaak lichtblauw)
- En in Visual Basics staat het volgende:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Calculate
End Sub

Ik heb even een simpel voorbeeld bestand toegevoegd. Dit is natuurlijk een simpele weergave, de echte bestanden zijn enkele MB's groot en hebben honderden regels.

Zelf weet ik bijna zeker dat het probleem zit in de 'Calculate' functie van Visuals basics. Deze zou ik er natuurlijk uit kunnen halen, maar dan werkt het highlighten van de regels niet meer.

Is er een andere manier om de regels te highlighten, en dan met name eentje waar Office 2019 niet zo gruwelijk langzaam van wordt?

Alvast bedankt!
 

Bijlagen

Misschien zo?
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Cells.Interior.ColorIndex = xlNone
    Cells(Target.Row, 1).Resize(, 4).Interior.Color = RGB(221, 235, 247)
End Sub
en de voorwaardelijke opmaak eruit
 
Ja, dat lijkt zeker te helpen. Alleen heb ik dan een andere uitdaging, haha. Er zijn verschillende kolommen die (verschillende) kleurtjes hebben.

Door deze code verdwijnen al die kleuren.

Zoals in de bijlage is hoe ik het graag zou zien (is nog wel even op basis van mijn oude code, maar dan zie je het effect zeg maar). Is daar ook nog iets op te bedenken?
 

Bijlagen

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Range("A:D").Interior.ColorIndex = xlNone
Cells(Target.Row, 1).Resize(, 4).Interior.Color = RGB(221, 235, 247)
End Sub
 
en stel nou voor dat ik kolom H t/m K er ook bij wil highlighten (maar E-G niet), lukt dat ook nog?
 
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Range("A:D,H:K").Interior.ColorIndex = xlNone
Cells(Target.Row, 1).Resize(, 4).Interior.Color = RGB(221, 235, 247)
Cells(Target.Row, 8).Resize(, 4).Interior.Color = RGB(221, 235, 247)
End Sub
 
Let op! Door dit te doen wordt de Undo historie bij iedere wijziging in de cel selectie gewist, je raakt dus de mogelijkheid kwijt om je wijzigingen ongedaan te maken.
Je echte probleem is dat herberekenen traag is, bijvoorbeeld vanwege de functies die in je bestand zijn gebruikt en als je erg veel voorwaardelijke opmaak regels hebt dan helpt dat ook niet. Ik zou een uitspraak kunnen doen over welk deel van je bestand traag is als ik er de beschikking over zou hebben.
 
Dat hebben we op dit moment (gelukkig) ook al, dankzij het calculate gedeelte.

Het echte probleem zit inderdaad in die herberekening. Vreemd is dat in Excel 2010 daar niets mee aan de hand was, maar in de 2019 versie dus wel. Ik zou je met alle plezier de lijst laten zien, maar er staat best veel gevoelige informatie in die ik niet online kan zetten helaas :(
 
En als je het zo doet:

Maak 2 named ranges aan:
CurrentRow =1
CurrentRowEnd =1

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

    With ThisWorkbook
       .Names("CurrentRow").RefersToR1C1 = "=" & Selection.Row
       .Names("CurrentRowEnd").RefersToR1C1 = "=" & Selection.Row + Selection.Rows.Count - 1
    End With

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

Dan in VO:
Code:
=EN(RIJ(A1)>=CurrentRow;RIJ(A1)<=CurrentRowEnd)
in range: =$A:$D;$H:$K
 
Laatst bewerkt:
Ik heb dit even laten liggen, vanuit Huis testen werkt niet goed. Ik denk dat ik er echter wel uit ga komen zo, dus ik zet de vraag op opgelost. Bedankt voor het meedenken allen!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan