If Application.Sheets("sheet1").Range("C4,C5,C6,C7").Value = "" Then
only tests C4. You need to repeat for each cell
Cells(12, 4) tests on the ActiveSheet - suggest that you add a WS name to it
I'd try something like this
Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
With Worksheets("sheet1")
Select Case .Cells(12, 4).Value ' Note the'dot'
Case "VOL (DAYS)"
If Len(.Range("C4").Value) = 0 Or Len(.Range("C5").Value) = 0 Or Len(.Range("C6").Value) = 0 Or Len(.Range("C7").Value) = 0 Then
Cancel = True
MsgBox "Save cancelled"
End If
Case "VOL (WEEKS)"
If Len(.Range("C4").Value) = 0 Then
Cancel = True
MsgBox "Save cancelled"
End If
Case "VOL (MONTHS)"
If Len(.Range("C6").Value) = 0 Then
Cancel = True
MsgBox "Save cancelled"
End If
End Select
End With
End Sub