El código es un caos total, guardar el margen y demás es fundamental para una lectura rápida, cuando veo que no se guarda el margen me vienen dos cosas a la cabeza, que el que programa es un "guarro" o que ha copy&pasteado de otro lugar
Existe un fallo en la temperaturadeldisco, cuando se recorre un array/colección de elementos se le debe indicar en donde metes el siguiente elemento, agregándolo se supone que "funciona" y digo "funciona" porque a mi me marca 0 de temperatura
Private Function TemperaturaDelDisco() As Integer
Dim objWMI, objInstances, objInstance
Dim sData() As String
Dim strServer As String: strServer = "."
Set objWMI = GetObject("winmgmts://" & strServer & "/root\WMI")
Set objInstances = objWMI.InstancesOf("MSStorageDriver_ATAPISmartData", 48)
On Error Resume Next
For Each objInstance In objInstances
With objInstance
sData = Split(Join(.VendorSpecific, ","), ",")
TemperaturaDelDisco = sData(115)
End With
Next objInstance <--
End Function