In dit artikel worden een aantal adviezen gegeven op het gebied van het voorkomen van compatibiliteitsproblemen. Ook wordt een overzicht gegeven van een aantal belangrijke verschillen tussen de diverse Excel-versies. Het gaat hierbij niet om verschillen in gebruiksgemak of bediening, maar met name om verschillen die kunnen leiden tot comptabiliteitsproblemen.
Omgaan met compatibiliteitsproblemen
Van Excel zijn ondertussen al heel veel verschillende versies uitgebracht. Bij het uitbrengen van een nieuwe versie wordt geprobeerd dat deze zoveel mogelijk ‘backward compatible’ is, hetgeen inhoudt dat het mogelijk is om oudere versies in te lezen en te bewerken in de nieuwere versie. Dit gaat over het algemeen vrij goed, alleen met macro’s/VBA kan dit soms problemen opleveren. Als applicaties worden ontwikkeld die ook geschikt moeten zijn voor een oudere versies, dan volgen hier een paar aandachtspunten:
- Nieuwe functionaliteit zal uiteraard niet werken in oudere versies. Dat geldt ook voor VBA-code die gebaseerd is op deze nieuwe functionaliteit. In een volgende paragraaf wordt een overzicht gegeven van nieuwe functionaliteit per versie.
- Als in Excel 2007 of hoger het bestand door middel van Opslaan Als wordt opgeslagen in een Excel 97-2003 indeling dan volgt een automatische check op comptabiliteitsproblemen. Macro’s/VBA worden hierbij niet gecontroleerd. Deze comptabiliteitscheck kan ook opgestart worden via Bestand→Info→Controleren op problemen→Comptabiliteit controleren.
- Met Application.Version kan met VBA de gebruikte Excel-versie worden uitgelezen. Indien gewenst kan hiermee specifieke VBA-code per versie gemaakt worden.
- Maak in VBA gebruik van late binding. Hiermee worden gebruikte bibliotheken onafhankelijk van het versienummer van deze bibliotheek en kan daarmee voorkomen worden dat deze in oudere versies niet geladen kunnen worden.
- Probeer VBA-code zoveel mogelijk versie-onafhankelijk te maken. Gebruik bijvoorbeeld Rows.Count in plaats van de laatste rij van een worksheet ‘hard’ te coderen (65536 voor Excel 2003 en 1048576 voor Excel 2007 en hoger).
32-bits versus 64-bits versie
Vanaf Excel-versie 2010 is er een 32-bits en een 64-bits versie van Excel beschikbaar. De 64-bits versie biedt verder geen extra functionaliteit ten opzichte van de 32-bits versie, maar de 64-bits versie is in staat om grotere geheugenbereiken te adresseren en kan sneller werken. In verreweg de meeste gevallen voldoet de 32-bits versie prima. Het grootste nadeel van het gebruik van de 64-bits versie is dat er comptabiliteitsproblemen kunnen ontstaan met eerdere versies. Dit speelt alleen als er gebruik wordt gemaakt van VBA/macro’s. Bijvoorbeeld niet alle (ActiveX-)controls van de 32-bits versie worden ondersteund in de 64-bits versie (bijvoorbeeld de TreeView, ListView, ImageList, Slider enz.). Daarnaast zullen er aanpassingen in de VBA-code moeten worden gemaakt in het geval er gebruik wordt gemaakt van zogenaamde API-calls.
Overzicht verschillen in functionaliteiten tussen Excel versies
In deze en de volgende paragraaf worden een aantal belangrijke verschillen in functionaliteiten tussen de diverse Excel-versies vermeld. Als basis voor het vergelijk is Excel versie 2003 genomen. Aangegeven wordt wat er in de 2007, 2010, 2013, 2016, 2019 en 365 versie veranderd is ten opzichte van de 2003-versie. Het gaat hierbij niet om de 64-bits versies en ook de versies voor de Mac, tablets en telefoons worden buiten beschouwing gelaten. Ook de verschillen tussen de verschillende servicepacks van de versies komen niet aan bod. Het overzicht is niet compleet en het is ook niet de intentie om een compleet overzicht te presenteren. Dat is vrijwel onmogelijk. De lijst zou dan zeer lang en erg gedetailleerd worden. Het gaat hier alleen om een aantal belangrijke verschillen.
Onderwerp | 2007 | 2010 | 2013 | 2016 | 2019 | 2021 | 365¹) |
---|---|---|---|---|---|---|---|
Algemeen | |||||||
1.048.576 rijen i.p.v. 65.536 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
16.384 kolommen i.p.v. 256 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
menubediening d.m.v. lint | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
bestandsextensie xlsx/xlsm/xlsb i.p.v xls | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
single document interface (SDI i.p.v MDI) | ✕ | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ |
gegevens op meer dan 3 niveaus sorteren | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
tabel in plaats van lijst | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
tabel-slicers | ✕ | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ |
sparklines | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
flashfill | ✕ | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ |
dynamische matrixformules | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ | ✓ |
Opmaak | |||||||
16 miljoen kleuren i.p.v. 256 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
thema’s en stijlen | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Voorwaardelijke opmaak | |||||||
meer dan 3 voorwaarden | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
rechtstreeks kunnen verwijzen naar andere tabbladen | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Draaitabellen | |||||||
slicers | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
timeline-slicer | ✕ | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ |
unieke waarden tellen (distinct count) | ✕ | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ |
item-labels of veld-labels herhalen | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Grafieken | |||||||
box- & whisker | ✕ | ✕ | ✕ | ✓ | ✓ | ✓ | ✓ |
histogram | ✕ | ✕ | ✕ | ✓ | ✓ | ✓ | ✓ |
kaartgrafiek | ✕ | ✕ | ✕ | ✕ | ✓ | ✓ | ✓ |
pareto | ✕ | ✕ | ✕ | ✓ | ✓ | ✓ | ✓ |
trechtergrafiek | ✕ | ✕ | ✕ | ✕ | ✓ | ✓ | ✓ |
waterval | ✕ | ✕ | ✕ | ✓ | ✓ | ✓ | ✓ |
VBA²) | |||||||
datatype LongPtr | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
eigenschap CountLarge | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
eigenschap DisplayFormat | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
gebeurtenis Workbook_AfterSave | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
commando Application.FileSearch | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ |
¹) Of iets wel of niet beschikbaar is in Excel voor Office 365 is afhankelijk van het type abonnement.
²) Alle in een versie nieuw ingevoerde functionaliteiten hebben uiteraard ook gevolgen voor VBA, maar dat wordt hier buiten beschouwing gelaten.
Overzicht welke functie in welke versie beschikbaar is
Functie | 2007 | 2010 | 2013 | 2016 | 2019 | 2021 | 365¹) |
---|---|---|---|---|---|---|---|
AANDELENGESCHIEDENIS | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ |
AANTALLEN.ALS | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
AGGREGAAT | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
ALS.FOUT | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
ALS.NB | ✕ | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ |
ALS.VOORWAARDEN | ✕ | ✕ | ✕ | ✕ | ✓ | ✓ | ✓ |
ARRAYTOTEXT | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ |
ASELECT.MATRIX | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ | ✓ |
BASIS | ✕ | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ |
BIT.EN | ✕ | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ |
BIT.EX.OF | ✕ | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ |
BIT.OF | ✕ | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ |
BLAD | ✕ | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ |
BLADEN | ✕ | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ |
BYCOL | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ |
BYROW | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ |
DAGEN | ✕ | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ |
DECIMAAL | ✕ | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ |
EX.OF | ✕ | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ |
FILTER | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ | ✓ |
FORMULETEKST | ✕ | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ |
GEMIDDELDE.ALS | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
GEMIDDELDEN.ALS | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
ISFORMULE | ✕ | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ |
ISOMITTED | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ |
ISO.WEEKNUMMER | ✕ | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ |
LAMBDA | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ |
LET | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ | ✓ |
MAKEARAY | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ |
MAP | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ |
MAX.ALS.VOORWAARDEN | ✕ | ✕ | ✕ | ✕ | ✓ | ✓ | ✓ |
MIN.ALS.VOORWAARDEN | ✕ | ✕ | ✕ | ✕ | ✓ | ✓ | ✓ |
MODUS.ENKELV | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
MODUS.MEERV | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
NETWERKDAGEN.INTL | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
RANG.GELIJK | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
RANG.GEMIDDELDE | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
REDUCE | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ |
REEKS | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ | ✓ |
SCAN | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ |
SCHAKELEN | ✕ | ✕ | ✕ | ✕ | ✓ | ✓ | ✓ |
SOMMEN.ALS | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
SORTEREN | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ | ✓ |
SORTEREN.OP | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ | ✓ |
TEKST.COMBINEREN | ✕ | ✕ | ✕ | ✕ | ✓ | ✓ | ✓ |
UNIEK | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ | ✓ |
VALUETOTEXT | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ |
VELDWAARDE | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ |
WEBSERVICE | ✕ | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ |
WERKDAG.INTL | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
X.VERGELIJKEN | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ | ✓ |
X.ZOEKEN | ✕ | ✕ | ✕ | ✕ | ✕ | ✓ | ✓ |
XML.FILTEREN | ✕ | ✕ | ✓ | ✓ | ✓ | ✓ | ✓ |
¹) Of iets wel of niet beschikbaar is in Excel voor Office 365 is afhankelijk van het type abonnement.
Vragen / suggesties
Hopelijk heeft dit artikel geholpen om beter inzicht te krijgen in de compatibiliteit tussen Excel versies. Als er verdere vragen over dit onderwerp zijn of suggesties voor verbetering, plaats dan een reactie hieronder.
Zie onderstaande macro:
Private Sub Workbook_Open()
Application.ScreenUpdating = False
Dim X As Worksheet
For Each X In Worksheets
If X.Name = "Sheet 2" Then
Else
X.Select
If X.Name = "Sheet 1" Then
Else
ActiveSheet.Unprotect ("456+")
If Range("A1").Value < Range("A2").Value Then
Range("E34").Locked = True
ElseIf Range("A1").Value >= Range("A2").Value Then
Range("E34").Locked = False
End If
End If
End If
ActiveSheet.Protect ("456+"), DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingRows:=True
Next X
Worksheets(1).Select
Application.ScreenUpdating = True
End Sub
Problemen bij het Workbook_Open event worden nog al eens veroorzaakt door timing issues. Vooral als bij het openen van het werkboek Excel eerst veel berekeningen moet uitvoeren (voorwaardelijke opmaak, UDF). Wat wel eens kan helpen is om de code, die overigens wel voor verbetering vatbaar is, van het Workbook_Open event in een aparte sub in een module te plaatsen. Bijv, sub Test.
Deze code moet je dan in het Workbook_Open event aanroepen met: Application.OnTime Now + TimeValue("00:00:01"), "Test"
Wellicht dat dit helpt.
Dat heeft dus niks te maken met performance verbetering.
Daarnaast gaf ik aan dat de code voor verbetering vatbaar is. Het belangrijkste advies hierbij is dat je Select van de sheets niet (of zo weinig mogelijk) moet gebruiken. Ook dat kan helpen de problemen op te lossen, maar dan zul je je code moeten aanpassen.
Het beveiligen werkt per versie anders. Ik heb gegroepeerde rijen die ik wil openstellen voor de klant (dat zij gebruik kunnen maken van de + links). Als ik in de versie van de klant werk kan ik het blad niet zo beveiligen dat dit nog wel werkt. Weet jij of dit inderdaad in versies zoals 2016 en 2019 niet mogelijk is?
En bij .Protect moet vervolgens de parameter UserInterfaceOnly worden toegevoegd en op True worden gezet. In jouw geval wordt het dus:
ActiveSheet.EnableOutlining = True
ActiveSheet.Protect ("456+"), DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingRows:=True, UserInterfaceOnly:=True
Ik ga ervan uit dat het hiermee beter gaat.
Bijzonder maar deze manier werkt goed.
dankje voor je reactie.
1. Als er in de macro's gebruik wordt gemaakt van de windows API calls, dan moeten deze calls aangepast worden voor 64 bit.
En 2, als er in de VBA gebruik wordt gemaakt van extra bibliotheken of ActiveX-controls dan kan het zijn dat deze niet geschikt zijn voor 64 bit. Per geval zal dan moeten worden bekeken in hoeverre dit met alternatieven werkbaar gemaakt kan worden in 64 bit.