This does it, but uses SendCommand.....
Sub freezeall()
Dim oLay As AcadLayer
Dim lSpace As Long
Dim iEcho As Integer
ThisDrawing.StartUndoMark
lSpace = ThisDrawing.ActiveSpace
iEcho = ThisDrawing.GetVariable("nomutt")
ThisDrawing.SetVariable "nomutt", 1
ThisDrawing.ActiveSpace = acPaperSpace
For Each oLay In ThisDrawing.Layers
If oLay.Freeze = True Or oLay.LayerOn = False Then
ThisDrawing.SendCommand "vplayer f " & oLay.Name & vbCr & "a" & vbCr & vbCr
End If
Next
ThisDrawing.ActiveSpace = lSpace
ThisDrawing.SetVariable "nomutt", iEcho
ThisDrawing.EndUndoMark
End Sub