Saved by the backup – Do you have a backup plan in place?

As per usual, I was working in my database and had modified a form and module, as well as removed a module I no longer needed. I accidentally hid MZ tools “add Line numbers” function, which proceeded to add line numbers to all my code modules, and then requested a save. Well as I didn’t really want the line numbers now, I didn’t wish to save, so I clicked cancel, and then proceeded to close the database so I could resume work.

The database opened fine, but when I went to VBE I got the message “File could not be found”. Now I have seen this message before, and I am fairly sure it has something to do with the module I removed, combined with other “triggers”. Anyway, I hadn’t manually taken a copy of this file for a day or so. I usually take manual copies once a day, or when I feel it is appropriate. Sometimes it might be more of a “Lets try this idea” copy, then actual versioning.

Regardless, the current file, while perhaps not a total loss, was not something I felt comfortable continuing working in. So I opened up my CrashPlan application (automatic Cloud backup), navigated to the folder, selected the folder and could see the versions stored by Crashplan.

I could simply go ahead and select the version from just 15 minutes ago, and hit restore. 15 seconds later I had my file and I was ready to work again.

I’ve been using CrashPlan as my backup tool for 3 years now, and have used the restore functionality a couple of times. 2 times for actual backup of a file, and I think maybe another 2 or 3 times as a way of getting to a file I didn’t have on my current PC, by using their website. I have their Family plan which allows me to use online backup for up to 10 computers. That covers my 2 home PCs, as well as my work laptop, and 2 laptops given to my by clients, for when I work on their systems.
From my personal PC, its about 125gb (and counting) worth of images that is my primary backup concern, and of course from my work PCs its several years of samples, work documents, and database files I want to retain.

So ask yourself:
Do you have a backup plan in place?
Is it a “set-n-forget” solution? Or something that you have to manual spend time both doing (and remembering!!)

And should you decide its time to update your backup or backup provider, well my recommendations go to CrashPlan

4 comments on “Saved by the backup – Do you have a backup plan in place?
  1. grovelli says:

    Hi Anders, doesn’t Windows in-built Backup & Restore functionality give you the same functionality?

    By the way, I’ve been proficiently using it your ChartToExcel function for turning many Access pivot charts to Access reports; yet I have encountered one type of pivot chart where I can’t see how to replicate it using your function:

    As you know, up to Access 2010 pivot charts in Access are just one of the views a form can have, so I have a pivot chart with as many buttons in the form header section as there are series in the chart that allows for the chart data series associated with a button to be displayed or not whenever you click the associated button by using the following simple code:

    Private Sub HandleClick(intSeries As Integer)
    ‘The commented code was used to display data labels for the max and min values of each plotted series
    Dim chtline ‘, dlSeries1Labels
    Dim i As Integer
    ‘ Dim dblVal As Double
    ‘Dim dblMin As Double
    ‘ Dim dblMax As Double
    Dim serSeries1

    On Error GoTo ErrHandler

    Set chtline = Me.frmPortate.Form.ChartSpace.Charts(0)
    Set serSeries1 = chtline.SeriesCollection(intSeries)
    ‘ Set dlSeries1Labels = serSeries1.DataLabelsCollection(0)

    If Me.Controls(“Comando” & (intSeries + 1)).Tag = “n” Then
    serSeries1.Line.Color = -2

    ‘ For i = 0 To serSeries1.Points.Count – 1
    ‘ dlSeries1Labels.Item(i).Visible = False
    ‘ Next i

    Me.Controls(“Comando” & (intSeries + 1)).Tag = “y”
    ElseIf Me.Controls(“Comando” & (intSeries + 1)).Tag = “y” Then
    serSeries1.Line.Color = -1
    ‘ dblMin = 1E+100
    ‘ dblMax = -1E+100

    ‘ For i = 0 To serSeries1.Points.Count – 1
    ‘ dblVal = serSeries1.Points(i).GetValue(2)
    ‘ If dblVal > dblMax Then
    ‘ dblMax = dblVal
    ‘ End If
    ‘ If dblVal < dblMin Then
    ' dblMin = dblVal
    ' End If
    ' Next i

    ' For i = 0 To dlSeries1Labels.Count – 1
    ' dblVal = serSeries1.Points(i).GetValue(2)
    ' If dblVal dblMin And dblVal dblMax Then
    ‘ dlSeries1Labels.Item(i).Visible = False
    ‘ Else
    ‘ dlSeries1Labels.Item(i).Font.Bold = True
    ‘ dlSeries1Labels.Item(i).Font.Color = “Red”
    ‘ dlSeries1Labels.Item(i).Visible = True
    ‘ End If
    ‘ Next i
    Me.Controls(“Comando” & (intSeries + 1)).Tag = “n”
    End If

    Exit Sub

    MsgBox Err.Description, vbExclamation
    End Sub

    I was wondering if there’s a way to achieve that through modifying the following ChartToExcel function:

    sSQL = CurrentDb.QueryDefs(“QueryPortate”).SQL
    sSQL = Replace(sSQL, “[forms]![Grafici]![text0]”, Format(Forms!Grafici!text0, “\#mm\/dd\/yyyy\#”))
    sSQL = Replace(sSQL, “[forms]![Grafici]![text2]”, Format(Forms!Grafici!Text2, “\#mm\/dd\/yyyy\#”))
    Set rs = CurrentDb.OpenRecordset(sSQL, dbOpenSnapshot)
    Set AppExcel = gfh_CreateExcelApp(1)
    Set wb = AppExcel.workbooks(1)
    Set ws = wb.Worksheets(1)
    Debug.Print ws.Name
    For i = 0 To rs.Fields.Count – 1
    ws.Range(ColumnLetter(i + 1) & 1) = rs.Fields(i).Name
    ws.Range(“A2”).CopyFromRecordset rs
    Set ChartRange = ws.Range(“a1”, ColumnLetter(rs.Fields.Count) & rs.RecordCount + 1)
    ChartRange.Offset(1, 1).Resize(ChartRange.Rows.Count – 1, ChartRange.Columns.Count – 1).NumberFormat = “#,##0”
    ChartRange.Name = “Test”
    lHeight = 600
    lWidth = 1000
    Set oChart = ws.Shapes.AddChart(xlLine, ws.Range(ColumnLetter(rs.Fields.Count + 1) & 1).Left, ws.Range(ColumnLetter(rs.Fields.Count + 1) & 1).Top, lWidth, lHeight).Chart
    oChart.SetSourceData ChartRange
    oChart.SetElement msoElementLegendNone
    oChart.SetElement msoElementChartTitleAboveChart
    oChart.SetElement msoElementPrimaryValueAxisTitleRotated ‘you can use ‘oChart.Axes(xlValue, xlPrimary).AxisTitle.Orientation = xlUpward instead(see commented line below)
    oChart.ChartTitle.Text = “CENTRALI IDRICHE VAL PADANA – Portate principali dal ” & Format(Forms!Grafici!text0, “dd/mm/yyyy”) & ” al ” & Format(Forms!Grafici!Text2, “dd/mm/yyyy”)
    oChart.ChartTitle.Format.TextFrame2.TextRange.Font.Size = 20
    oChart.Axes(xlValue, xlPrimary).AxisTitle.Text = “m³/s (galleria e utile)”
    oChart.Axes(xlCategory).TickLabelSpacing = 1
    oChart.Axes(xlCategory).TickMarkSpacing = 1
    If Forms!Grafici!m Then
    oChart.Axes(xlCategory).TickLabelSpacing = 30
    oChart.Axes(xlCategory).TickMarkSpacing = 30
    End If
    oChart.SeriesCollection(3).AxisGroup = xlSecondary
    With oChart.Axes(xlValue, xlSecondary)
    .HasTitle = True
    With .AxisTitle
    .Text = “m³/s (Martesana)”
    .Orientation = xlUpward ‘or xlDownward if you prefer
    End With
    End With
    oChart.SetElement msoElementLegendBottom
    sPath = Environ(“Temp”) & “\TempChart.png”
    oChart.Export sPath
    ChartToExcel = sPath
    Exit Function

    • TheSmileyCoder says:

      The built in doesn’t have as many restore points (e.g. with crashplan I had a 15 minute old version, with Windows I had a backup from the previous day). Also that will not assist me in cases where the harddrive is lost, or computer is stolen.

      I must admit, I don’t have the time currently to look into the ChartToExcel function. Sorry

  2. Mark says:

    Definitely do

    I just use a rolling vbs script – I generally set the granuality at 1 day but could set it to minute / hour if I wanted to. Esstentially does exactly the same thing as crash plan.

    Very useful and if I have big projects I will use it everyday just to provide peace of mind.


    ==========vbs script below================

    Option Explicit
    Dim FSO
    Dim vardatefile
    Dim varmonthfile
    Dim BDayFilePath
    Dim BMonthFilePath
    Dim Varnow

    Set FSO = CreateObject(“Scripting.FileSystemObject”)
    Varnow = now
    vardatefile = “YourDatabaseBackEndCopy-Weekday-” & day(varnow) & “.accdb”
    varmonthfile = “YourDatabaseEndCopy-Month-” & Month(varnow) & “.accdb”
    BDayFilePath = “C:\” & vardatefile
    BMonthFilePath = “C:\” & varmonthfile

    FSO.CopyFile “C:\DatabaseTarget.accdb”, BDayFilePath, “True”
    FSO.CopyFile “C:\DatabaseTarget.accdb”, BMonthFilePath, “True”
    Set FSO = nothing

    msgbox “Backup Complete” ,0, “Backup Script”

    • TheSmileyCoder says:

      Hi Mark
      Thank you for your interest and your post. Your example though (maybe you simplified it) is only saving to the C drive. Do you also have an off-site backup of your work?

Ask a question, leave some feedback, post a reply!

This site uses Akismet to reduce spam. Learn how your comment data is processed.