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:

  1. 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.
  2. Klik met de rechtermuisknop op een willekeurig tabblad en kies uit het submenu Programmcode weergeven

  3. Microsoft Visual basic for Applications opent zich nu. Dubbelklik links op "ThisWorkbook"

  4. Plak nu de onderstaande code in het edit venster.
  5. Bewaar de werkmap en sluit Excel af. Open het bestand opnieuw. 
  6. 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.
  7. Wanneer men nu het Excel bestand bewaart, vraagt de automatische versienummering om een omschrijving.
  8. Een nieuw tabblad "Versie" wordt nu automatisch toegevoegd met alle versieinfo. De inhoud hiervan ziet er dan als volgt uit:
    Versie tabblad

 

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

Diensten

Wij weten als geen ander, dat het voor u als ondernemer ondenkbaar is geworden de nimmer aflatende v…

Systeembeheer

Goed systeembeheer impliceert, dat het ICT netwerk van uw bedrijf continu beschikbaar moet zijn. Def…

Software ontwikkeling

Wij opereren regelmatig voor bedrijven zonder een eigen IT afdeling. Deze klanten krijgen van ons pr…

Informatiebeveiliging - IT security

Informatiebeveiliging bestaat uit alle technische, procedurele, juridische en menselijke maatregelen…