Versiebeheer van een Microsoft Excel werkmap
Keywords
versiebeheer Excel macro
Probleem
Vaak wil men, indien men met meerdere personen aan een Excel werkmap werkt, bijhouden wie wat wanneer heeft aangepast. Een soort versiebeheer dus.
Via het toevoegen van een eenvoudige macro aan een werkmap wordt er voor gezorgd dat aan de werkmap een extra tabblad "Versie" wordt toegevoegd waarin de wijzigingen automatisch worden bijgehouden.
Oorzaak
Excel kent geen standaard versiebeheer.
Oplossing
Men dient de volgende procedures uit te voeren om versiebeheer aan een Excel werkmap toe te voegen:
- start met het opslaan van de werkmap als een "Excel werkmap met macro's (*.xlsm)". Gooi de oude .xlsx versie meteen weg om verwarring te voorkomen.
- Klik met de rechtermuisknop op een willekeurig tabblad en kies uit het submenu Programmcode weergeven
- Microsoft Visual basic for Applications opent zich nu. Dubbelklik links op "ThisWorkbook"
- Plak nu de onderstaande code in het edit venster.
- Bewaar de werkmap en sluit Excel af. Open het bestand opnieuw.
- Afhankelijk van de macro-instelling in Excel zal deze een macro-waarschuwing geven. U dient uiteraard macro's te activeren om het versiebeheer te laten werken.
- Wanneer men nu het Excel bestand bewaart, vraagt de automatische versienummering om een omschrijving.
- Een nieuw tabblad "Versie" wordt nu automatisch toegevoegd met alle versieinfo. De inhoud hiervan ziet er dan als volgt uit:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim version As Integer
Dim currentWorksheet As String
'Save the current sheetname
currentWorksheet = ActiveSheet.Name
'First insert a "Versie" worksheet if it not exists
If CheckSheet("Versie") = False Then
Sheets.Add After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = "Versie"
Cells(1, "A").Value = "Datum"
Columns("A").ColumnWidth = Columns("A").ColumnWidth * 1.5
Cells(1, "B").Value = "Versienr."
Columns("B").ColumnWidth = Columns("B").ColumnWidth * 1.5
Cells(1, "C").Value = "Gebruiker"
Columns("C").ColumnWidth = Columns("C").ColumnWidth * 1.5
Cells(1, "D").Value = "Beschrijving"
Columns("D").ColumnWidth = Columns("D").ColumnWidth * 5
End If
'Voeg nu de versieinfo toe
Description = Application.InputBox("Geef een korte beschrijving van de wijzigingen")
Worksheets("Versie").Activate
Rows(1).Activate
version = Cells.Item(2, "B")
Range("A2").EntireRow.Insert
Cells(2, "A").Value = Date
Cells(2, "B").Value = version + 1
Cells(2, "C").Value = Environ("Username")
Cells(2, "D").Value = Description
Worksheets(currentWorksheet).Activate
End Sub
Function CheckSheet(ByVal sSheetName As String) As Boolean
Dim oSheet As Excel.Worksheet
Dim bReturn As Boolean
bReturn = False
For Each oSheet In ActiveWorkbook.Sheets
If oSheet.Name = sSheetName Then
bReturn = True
Exit For
End If
Next oSheet
CheckSheet = bReturn
End Function