Symptomen
- Uw document, presentatie of werkmap bevat programmatuur die de gewijzigde inhoud opslaat. Onder Windows 7 leidt dit soms tot problemen. Het programma loopt stuk. Zou u het bestand met de hand proberen op te slaan, dan verschijnt de volgende melding:
Remedie
- Open uw werkmap en activeer de VBA-omgeving door op [Alt]+[F11] te drukken.
- Zoek het statement op waarmee de werkmap wordt opgeslagen.
- U gaat dit statement nu vervangen door een paar statements die de werkmap eerst onder een andere naam opslaan, en dan onder de oorspronkelijke naam. Hiermee omzeilt u de Windows 7-problemen (zie de Verdieping voor meer uitleg).
- Voordat u de werkmap onder een andere naam gaat opslaan, zorgt u ervoor dat u later nog de oorspronkelijke naam weet:
strWorkbookName = Left(ThisWorkbook.Name, _ Len(ThisWorkbook.Name) - 4) strWorkbookExt = Right(ThisWorkbook.Name, 4)
Er wordt hierbij vanuitgegaan dat de werkmap in het Office 2007/2010-formaat is opgeslagen, dus met een extensie van 4 posities, zoals xlsx, xlsm of xlsb.
- Sla de werkmap eerst op onder een tijdelijke naam. In het volgende voorbeeld wordt de naam MijnTemp gebruikt.
Thisworkbook.SaveAs _ ThisWorkbook.path _ MijnTemp" & "." & strWorkbookExt, _ AccessMode:=xlNoChange, _ ConflictResolution:=xlLocalSessionChanges
Let op: in sommige versies levert ThisWorkbook.Path een pad zonder de afsluitende backslash (\). In die versies moet u achter .Path de code & “\” opnemen. Hetzelfde geldt voor de opdracht in stap 5.
- Sla de werkmap nu op onder dezelfde naam:
Thisworkbook.SaveAs _ ThisWorkbook.path & _ strWorkbookName & "." & strWorkbookExt, _ AccessMode:=xlNoChange, _ ConflictResolution:=xlLocalSessionChanges
Verdieping
De parameter XlSaveAsAccessMode kunt u gebruiken om aan te geven op welke manier het bestand beschikbaar moet zijn nadat de wijzigingen zijn opgeslagen. Dit kan belangrijk zijn als u de werkmap als ‘alleen-lezen’-bestand hebt geopend. Slaat u de werkmap eerst onder een tijdelijke, en daarna onder z’n eigen naam op, dan is de toegang gewijzigd in lezen-en-schrijven.
Er zijn drie mogelijkheden:
- xlExclusive
U krijgt na het opslaan exclusieve rechten op het bestand (anderen kunnen hun wijzigingen niet opslaan). - xlNoChange
De rechten veranderen tijdens het opslaan niet. - xlShared
De werkmap is te gebruiken als gedeelde werkmap.
De parameter ConflictResolution bepaalt hoe er moet worden gereageerd als tijdens het opslaan blijkt dat het bestand met andere gebruikers wordt gedeeld. Er zijn drie mogelijkheden:
- xlLocalSessionChanges
De wijzigingen van de lokale gebruiker (u w wijzigingen dus), worden altijd geaccepteerd. Andere gebruikers kunnen hun eerder opgeslagen wijzigingen dus verliezen. - xlOtherSessionChanges
Uw wijzigingen gaan verloren als de werkmap ook door ander gebruikers is geopend. - xlUserResolution
Zijn er ook andere gebruikers die de werkmap hebben geopend, dan verschijnt een dialoogvenster waarin u kunt aangeven wat er in deze specifieke situatie moet gebeuren met de wijzigingen die u wilt opslaan.
Tip
- Als u de werkmap dan toch eerst onder een andere naam opslaat, en dan weer onder z’n eigen naam, is het verstandig de map bij het openen te openen als ‘Alleen lezen’ Dit doet u in uw programma door aan het Open-statement de optie ReadOnly:=True toe te voegen.