ok well I've solved this problem and here is my solution for anyone that encounters the same issue. As mentioned this is not possible without code, so here it is:
Code:
'Called when running downtime report to provide sum of downtime
Public Function dtsum()
Dim dbs As Database
Set dbs = CurrentDb
Dim rst As DAO.Recordset
'Start date/time of first downtime event being inspected
Dim start1 As Date
'Start date/time of second downtime event being inspected
Dim start2 As Date
'Finish date/time of first downtime event being inspected
Dim fin1 As Date
'Finish date/time of first downtime event being inspected
Dim fin2 As Date
'Calculated downtime in days
Dim dtdays As Double
'Calculated downtime in minutes
Dim dt As Integer
'Dates must be in American format to work
Dim correctformatstart As Date
Dim correctformatfinish As Date
'Set the start and finish dates of assessed period to American format
correctformatstart = Format(DateValue(Forms![report selection].[Start Date]), "mm/dd/yyyy")
correctformatfinish = Format(DateValue(Forms![report selection].[Finish Date]), "mm/dd/yyyy")
'Ensure no existing data
strsqltasks = Empty
'Create temp DB with start and finish dates from Issues table for each issue where machine down = true, machine = that selected on form, where the start date of the issue falls within the start and finish dates defined on the form
strsqltasks = "SELECT [Start date], [finish date] FROM issues where [machine down] = true and issues.[machine] = """ & Forms![report selection].machine & """ and issues.[start date] between #" & correctformatstart & "# and (#" & correctformatfinish & "#)+0.9999 ORDER BY [start date];"
'take first row of temp DB
Set rst = dbs.OpenRecordset(strsqltasks, dbOpenDynaset)
'Ensure no old data stored in variables
dtdays = 0
dt = 0
'If not in last row of temp DB
If Not rst.EOF Then
'Define start and finish of issue on row
start1 = rst![Start Date]
fin1 = rst![Finish Date]
'add duration of first issue to downtime total
dtdays = dtdays + fin1 - start1
'move to the next row of temp DB
rst.MoveNext
'If not at end of temp DB
Do While Not rst.EOF
'set start and finish of 2nd issue
start2 = rst![Start Date]
fin2 = rst![Finish Date]
'if 2nd issue overlaps first
If start2 < fin1 Then
'if 2nd issue falls entirely within 1st issue don't add any downtime to total
If fin2 < fin1 Then
dtdays = dtdays
Else
'if 2nd issue overlaps 1st but extends beyond then add bit that extends to downtime total
dtdays = dtdays + (fin2 - fin1)
End If
Else
'if no overlap then add entire issue duration to downtime total
dtdays = dtdays + (fin2 - start2)
End If
'Set the start and finish of first issue to current row of temp DB
start1 = rst![Start Date]
fin1 = rst![Finish Date]
'Go to the next row of the temp DB
rst.MoveNext
Loop
End If
'define dt in minutes
dt = dtdays * 24 * 60
'clear variables
strsqltasks = Empty
start1 = 0
start2 = 0
fin1 = 0
fin2 = 0
End Function