Malicious Office (OOXML) / .XLSX — malware analysis report

Static analysis result for SHA-256 b705945a30b40bde…

MALICIOUS

Office (OOXML) / .XLSX

2.28 MB Created: 2005-10-18 01:09:15 UTC Authoring application: Microsoft Excel 16.0300 First seen: 2026-06-14
MD5: 783e90291be7be1f9eac3da2c330c45b SHA-1: d92ca26afdb5440d156ded602184264c3ff779f3 SHA-256: b705945a30b40bde762f19806501e650c34c0b7ec19f10c9dc69f98ae973d548
224 Risk Score

Malware Insights

MITRE ATT&CK
T1059.005 Visual Basic T1547.001 Registry Run Keys / Startup Folder T1137.005 DLL Search Order Hijacking

The sample is an Excel file containing VBA macros. High-severity heuristics indicate that the VBA code attempts to achieve persistence by copying the workbook to the Excel XLSTART folder and infects other workbooks using an Application.OnSheetActivate hook. The document body contains conversion factors and building dimensions, which appear to be a lure to disguise the malicious macro functionality.

Heuristics 9

  • VBA project inside OOXML medium 5 related findings OOXML_VBA
    Document contains a VBA project — VBA macros present
  • GetObject call high OLE_VBA_GETOBJ
    GetObject call
    Matched line in script
        Set ObjetoWMI = GetObject("WINMGMTS:")
  • VBA copies the workbook into the Excel XLSTART startup folder high OLE_VBA_XLSTART_PERSISTENCE
    The macro saves a copy of the workbook into Application.StartupPath (the Excel XLSTART folder) so the code auto-loads every time Excel starts. This is the persistence stage of a resident Excel macro virus, not normal document behaviour.
    Matched line in script
        ChDir Application.StartupPath
  • VBA infects other workbooks via an OnSheetActivate copy hook high OLE_VBA_WORKBOOK_INFECTION_SPREADER
    The macro installs an Application.OnSheetActivate handler that copies a sheet (carrying the macro) into the active workbook whenever a sheet is activated. This is the replication stage of a resident Excel macro virus: it infects every workbook the user opens.
    Matched line in script
        Application.OnSheetActivate = "check_files"
  • VBA p-code auto-exec with execution tokens high OLE_VBA_PCODE_AUTOEXEC_EXEC
    Triggers on the COMBINATION of two tokens co-occurring in the same compiled VBA/cache stream: an auto-execution entry point (Auto_Open / AutoOpen / Document_Open / Workbook_Open / Auto_Close / AutoClose) AND a shell/download/object-execution token (Shell, CreateObject, GetObject, PowerShell, cmd.exe, URLDownloadToFile, WinHttp, XMLHTTP, ADODB.Stream, ShellExecute, ExecuteExcel4Macro). Neither token alone fires it — it is the pairing that flags p-code-only or source-extraction-failure macro documents where the visible VBA source is unavailable. The matched tokens are named in the detail line below.
  • Auto_Open macro low OLE_VBA_AUTO
    Auto_Open macro
    Matched line in script
    Sub auto_open()
  • Embedded OLE object medium OOXML_OLE_OBJECT
    Document contains an embedded OLE object
  • External workbook data link low OOXML_EXTERNAL_REL_DATALINK
    External workbook reference in xl/externalLinks/_rels/externalLink1.xml.rels: /SPREADSHEET/PEBSteel/Wind load of ASCE Rev03.xls
  • Hidden worksheet (veryHidden) low OOXML_HIDDEN_SHEET
    Excel workbook contains 1 hidden sheet(s) — hidden sheets are commonly used to conceal macro code, staging data, or intermediate payload construction

Extracted artifacts 32

Files carved from inside the sample during analysis.

FilenameKindSourceSize
macros.bas vba-macro oletools.olevba.extract_macros (decoded VBA source from OOXML) 158253 bytes
SHA-256: 7ffb6c92d5fb61cf27ee08f98313ca1f301741a529b9198a4e47954046c800c0
Preview script
First 1,000 lines of the extracted script
Attribute VB_Name = "ThisWorkbook"
Attribute VB_Base = "0{00020819-0000-0000-C000-000000000046}"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True
Attribute VB_TemplateDerived = False
Attribute VB_Customizable = True
'Private Sub Workbook_Open()
   ' Application.Visible = False
    'frmPass.Show
'End Sub
'Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'If SaveAsUI Then Cancel = True
'End Sub




Attribute VB_Name = "Sheet12"
Attribute VB_Base = "0{00020820-0000-0000-C000-000000000046}"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True
Attribute VB_TemplateDerived = False
Attribute VB_Customizable = True
Attribute VB_Control = "CommandButton2, 8, 0, MSForms, CommandButton"
Attribute VB_Control = "CommandButton1, 6, 1, MSForms, CommandButton"
Private Sub CommandButton1_Click()
    ActiveWorkbook.Worksheets("Input").Activate
    ActiveWorkbook.Worksheets("Output").Visible = False
End Sub
Private Sub CommandButton2_Click()
    Range("A1:H51").Select
    With ActiveSheet.PageSetup
        .CenterHorizontally = True
        .CenterVertically = True
        .Orientation = xlPortrait
        .PaperSize = xlPaperA4
        .BlackAndWhite = True
    End With
    Selection.PrintOut Copies:=1, Collate:=True
    Range("K43").Select
End Sub

Attribute VB_Name = "Sheet2"
Attribute VB_Base = "0{00020819-0000-0000-C000-000000000046}"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True
Attribute VB_TemplateDerived = False
Attribute VB_Customizable = False
Private Sub CommandButton1_Click()
    ActiveWorkbook.Worksheets("Velocity Pressure").Visible = True
    ActiveWorkbook.Worksheets("Velocity Pressure").Activate
End Sub
Private Sub CommandButton2_Click()
    ActiveWorkbook.Worksheets("Kzt").Visible = True
    ActiveWorkbook.Worksheets("Kzt").Activate
End Sub
Private Sub CommandButton3_Click()
    ActiveWorkbook.Worksheets("Output").Visible = True
    ActiveWorkbook.Worksheets("Output").Activate
End Sub
Private Sub CommandButton4_Click()
    ActiveWorkbook.Worksheets("Bracing").Visible = True
    ActiveWorkbook.Worksheets("Bracing").Activate
End Sub

Attribute VB_Name = "Sheet3"
Attribute VB_Base = "0{00020820-0000-0000-C000-000000000046}"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True
Attribute VB_TemplateDerived = False
Attribute VB_Customizable = True

Attribute VB_Name = "Module2"
Option Explicit
'Specify the Wind Effective Area
Function Area(Span, Bay) As Double
    Area = WorksheetFunction.max(Span * Span / 3, Bay * Span)
End Function
'Specify the Toward Internal Coefficient GCpi
Function InternalCoefficient(ExposureCondition) As Double

If ExposureCondition = "Enclosed" Then
    InternalCoefficient = 0.18
ElseIf ExposureCondition = "Partially Enclosed" Then
    InternalCoefficient = 0.55
Else
    InternalCoefficient = 0#
End If

End Function

'Specify the Coefficient (GCp-GCpi) for girt of SW and EW of Building eave height is less than 60ft

Function GirtCoefficient(EffectiveWindArea, ExposureCondition, RoofAngle, Zone, Direction) As Double

Dim gcp, GCpi As Double

On Error Resume Next

Select Case Direction

    Case "Toward"

        Select Case Zone
            Case 4, 5
        
                If EffectiveWindArea <= 10 Then
                    gcp = 1
                ElseIf EffectiveWindArea < 500 Then
                    gcp = 1.1766 - 0.1766 * WorksheetFunction.Log10(EffectiveWindArea)
                Else
                    gcp = 0.7
                End If

        End Select

        If RoofAngle <= 10 Then
                    
            'Reduce GCp 10% when Roof angle less than 10 degrees
            GCpi = -InternalCoefficient(ExposureCondition)
            GirtCoefficient = 0.9 * gcp - GCpi
    
        Else
                    
            GCpi = -InternalCoefficient(ExposureCondition)
            GirtCoefficient = gcp - GCpi
                
        End If
    
    Case "Away"
        
        Select Case Zone
                
            Case 4
                
                If EffectiveWindArea <= 10 Then
                    gcp = -1.1
                ElseIf EffectiveWindArea < 500 Then
                    gcp = -1.2766 + 0.1766 * WorksheetFunction.Log10(EffectiveWindArea)
                Else
                    gcp = -0.8
                End If
                    
            Case 5
                
                If EffectiveWindArea <= 10 Then
                    gcp = -1.4
                ElseIf EffectiveWindArea < 500 Then
                    gcp = -1.7532 + 0.3532 * WorksheetFunction.Log10(EffectiveWindArea)
                Else
                    gcp = -0.8
                End If
        
        End Select
        
    If RoofAngle <= 10 Then
                
        'Reduce GCp 10% when Roof angle less than 10 degrees
        GCpi = InternalCoefficient(ExposureCondition)
        GirtCoefficient = 0.9 * gcp - GCpi
            
    Else
                
        GCpi = InternalCoefficient(ExposureCondition)
        GirtCoefficient = gcp - GCpi
        
    End If
        
End Select 'Of select Direction

End Function

'Specify the Coefficient (GCp-GCpi) for purlin of Building eave height is less than 60ft

Function PurlinCoefficient(EffectiveWindArea, ExposureCondition, RoofStyle, RoofAngle, Zone, Direction) As Double

Dim Coefficient As Double
Dim gcp, GCpi As Double

On Error Resume Next

Select Case RoofStyle

'\\*********************************************************************************************//'
    
    'For Gable Roofs
    
    Case "Gable Roofs"
        
        Select Case Direction
               
            Case "Toward"
        
                Select Case Zone
                    
                    Case 1, 2, 3
                    
                        If RoofAngle <= 7 Then
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = 0.3
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = 0.4 - 0.1 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = 0.2
                            End If
                       
                        ElseIf RoofAngle <= 27 Then
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = 0.5
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = 0.7 - 0.2 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = 0.3
                            End If
                        
                        Else
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = 0.9
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = 1 - 0.1 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = 0.8
                            End If
                        
                        End If
                        
                End Select 'Of Zone select
                
            GCpi = -InternalCoefficient(ExposureCondition)
            PurlinCoefficient = gcp - GCpi
            
            'End Select case of Toward
            
            Case "Away"
                
                Select Case Zone
                
                    Case 1
                        
                        If RoofAngle <= 7 Then
                        
                            If EffectiveWindArea <= 10 Then
                                gcp = -1#
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -1.1 + 0.1 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -0.9
                            End If
                        
                        ElseIf RoofAngle <= 27 Then
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = -0.9
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -1 + 0.1 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -0.8
                            End If
                        
                        Else
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = -1#
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -1.2 + 0.2 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -0.8
                            End If
                        
                        End If
                    
                    Case 2
                        
                        If RoofAngle <= 7 Then
                        
                            If EffectiveWindArea <= 10 Then
                                gcp = -1.8
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -2.5 + 0.7 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -1.1
                            End If
                        
                        ElseIf RoofAngle <= 27 Then
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = -1.7
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -2.2 + 0.5 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -1.2
                            End If
                        
                        Else
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = -1.2
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -1.4 + 0.2 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -1#
                            End If
                        
                        End If
                        

                    Case 3
                        
                        If RoofAngle <= 7 Then
                        
                            If EffectiveWindArea <= 10 Then
                                gcp = -2.8
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -4.5 + 1.7 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -1.1
                            End If
                        
                        ElseIf RoofAngle <= 27 Then
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = -2.6
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -3.2 + 0.6 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -2#
                            End If
                        
                        Else
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = -1.2
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -1.4 + 0.2 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -1#
                            End If
                        
                        End If
                
                End Select 'Of Zone select
                
            GCpi = InternalCoefficient(ExposureCondition)
            PurlinCoefficient = gcp - GCpi
        
        End Select 'Of Direction select
        
'\\*********************************************************************************************//'
    
    'For Hip Roofs
    
    Case "Hip Roofs"
                
        Select Case Direction
        
            Case "Toward"
        
                Select Case Zone
                    
                    Case 1, 2, 3
                
                        If (RoofAngle > 7) And (RoofAngle <= 27) Then
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = 0.5
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = 0.7 - 0.2 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = 0.3
                            End If
                        
                        End If
            
                End Select 'Of Zone select
                             
            GCpi = -InternalCoefficient(ExposureCondition)
            PurlinCoefficient = gcp - GCpi
            
            'End Select case of Toward
            
            Case "Away"
                
                Select Case Zone
                
                    Case 1
                        
                        If (RoofAngle > 7) And (RoofAngle <= 27) Then
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = -0.9
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -1 + 0.1 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -0.8
                            End If
                        
                        End If
                            
                    Case 2
                        
                        If (RoofAngle > 7) And (RoofAngle <= 27) Then
                                
                            If EffectiveWindArea <= 10 Then
                                gcp = -1.7
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -2.2 + 0.5 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -1.2
                            End If
                            
                        End If
                         
                    Case 3
                            
                        If (RoofAngle > 7) And (RoofAngle <= 27) Then
                                
                            If EffectiveWindArea <= 10 Then
                                gcp = -2.6
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -3.2 + 0.6 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -2#
                            End If
                            
                        End If
                
                End Select 'Of Zone select
                
            GCpi = InternalCoefficient(ExposureCondition)
            PurlinCoefficient = gcp - GCpi
        
        End Select 'Of Direction select
                
'\\*********************************************************************************************//'
                
    'For Multispan Gable Roofs
    
    Case "Multispan Gable Roofs"
    
        Select Case Direction
               
            Case "Toward"
        
                Select Case Zone
                    
                    Case 1, 2, 3
                    
                        If RoofAngle <= 7 Then
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = 0.3
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = 0.4 - 0.1 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = 0.2
                            End If
                       
                        ElseIf RoofAngle <= 10 Then
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = 0.5
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = 0.7 - 0.2 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = 0.3
                            End If
                        
                        Else
                            
                            If RoofAngle <= 30 Then
                                
                                If EffectiveWindArea <= 10 Then
                                    gcp = 0.6
                                ElseIf EffectiveWindArea <= 100 Then
                                    gcp = 0.8 - 0.2 * WorksheetFunction.Log10(EffectiveWindArea)
                                Else
                                    gcp = 0.4
                                End If
                            
                            Else
                                
                                If EffectiveWindArea <= 10 Then
                                    gcp = 1#
                                ElseIf EffectiveWindArea <= 100 Then
                                    gcp = 1.2 - 0.2 * WorksheetFunction.Log10(EffectiveWindArea)
                                Else
                                    gcp = 0.8
                                End If
                                
                            End If
                        
                        End If
                        
                End Select 'Of Zone select
                
            GCpi = -InternalCoefficient(ExposureCondition)
            PurlinCoefficient = gcp - GCpi
            
            'End Select case of Toward
            
            Case "Away"
                
                Select Case Zone
                
                    Case 1
                        
                        If RoofAngle <= 7 Then
                        
                            If EffectiveWindArea <= 10 Then
                                gcp = -1#
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -1.1 + 0.1 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -0.9
                            End If
                        
                        ElseIf RoofAngle <= 10 Then
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = -0.9
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -1 + 0.1 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -0.8
                            End If
                        
                        Else
                            
                            If RoofAngle <= 30 Then
                                
                                If EffectiveWindArea <= 10 Then
                                    gcp = -1.6
                                ElseIf EffectiveWindArea <= 100 Then
                                    gcp = -1.8 + 0.2 * WorksheetFunction.Log10(EffectiveWindArea)
                                Else
                                    gcp = -1.4
                                End If
                            
                            Else
                                
                                If EffectiveWindArea <= 10 Then
                                    gcp = -2
                                ElseIf EffectiveWindArea <= 100 Then
                                    gcp = -2.9 + 0.9 * WorksheetFunction.Log10(EffectiveWindArea)
                                Else
                                    gcp = -1.1
                                End If
                                
                            End If
                        
                        End If
                    
                    Case 2
                        
                        If RoofAngle <= 7 Then
                        
                            If EffectiveWindArea <= 10 Then
                                gcp = -1.8
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -2.5 + 0.7 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -1.1
                            End If
                        
                        ElseIf RoofAngle <= 10 Then
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = -1.7
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -2.2 + 0.5 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -1.2
                            End If
                        
                        Else
                            
                            If RoofAngle <= 30 Then
                                
                                If EffectiveWindArea <= 10 Then
                                    gcp = -2.2
                                ElseIf EffectiveWindArea <= 100 Then
                                    gcp = -2.7 + 0.5 * WorksheetFunction.Log10(EffectiveWindArea)
                                Else
                                    gcp = -1.7
                                End If
                            
                            Else
                                
                                If EffectiveWindArea <= 10 Then
                                    gcp = -2.5
                                ElseIf EffectiveWindArea <= 100 Then
                                    gcp = -3.3 + 0.8 * WorksheetFunction.Log10(EffectiveWindArea)
                                Else
                                    gcp = -1.7
                                End If
                                
                            End If
                        
                        End If
                        

                    Case 3
                        
                        If RoofAngle <= 7 Then
                        
                            If EffectiveWindArea <= 10 Then
                                gcp = -2.8
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -4.5 + 1.7 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -1.1
                            End If
                        
                        ElseIf RoofAngle <= 27 Then
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = -2.6
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -3.2 + 0.6 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -2#
                            End If
                        
                        Else
                            
                            If RoofAngle <= 30 Then
                                
                                If EffectiveWindArea <= 10 Then
                                    gcp = -2.7
                                ElseIf EffectiveWindArea <= 100 Then
                                    gcp = -3.7 + 1 * WorksheetFunction.Log10(EffectiveWindArea)
                                Else
                                    gcp = -1.7
                                End If
                            
                            Else
                                
                                If EffectiveWindArea <= 10 Then
                                    gcp = -2.6
                                ElseIf EffectiveWindArea <= 100 Then
                                    gcp = -3.5 + 0.9 * WorksheetFunction.Log10(EffectiveWindArea)
                                Else
                                    gcp = -1.7
                                End If
                                
                            End If
                        
                        End If
                
                End Select 'Of Zone select
                
            GCpi = InternalCoefficient(ExposureCondition)
            PurlinCoefficient = gcp - GCpi
        
        End Select 'Of Direction select
    
'\\*********************************************************************************************//'
    
    'For Monoslope Roofs
    
    Case "Monoslope Roofs"

        Select Case Direction
               
            Case "Toward"
        
                Select Case Zone
                    
                    Case 1, 2, 3
                    
                        If RoofAngle <= 3 Then
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = 0.3
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = 0.4 - 0.1 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = 0.2
                            End If
                       
                        ElseIf RoofAngle <= 10 Then
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = 0.3
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = 0.4 - 0.1 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = 0.2
                            End If
                        
                        Else
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = 0.4
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = 0.5 - 0.1 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = 0.3
                            End If
                        
                        End If
                        
                End Select 'Of Zone select
                
            GCpi = -InternalCoefficient(ExposureCondition)
            PurlinCoefficient = gcp - GCpi
            
            'End Select case of Toward
            
            Case "Away"
                
                Select Case Zone
                
                    Case 1
                        
                        If RoofAngle <= 3 Then
                        
                            If EffectiveWindArea <= 10 Then
                                gcp = -1#
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -1.1 + 0.1 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -0.9
                            End If
                        
                        ElseIf RoofAngle <= 10 Then
                            gcp = -1.1
                            
                        Else
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = -1.3
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -1.5 + 0.2 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -1.1
                            End If
                        
                        End If
                    
                    Case 2
                        
                        If RoofAngle <= 3 Then
                        
                            If EffectiveWindArea <= 10 Then
                                gcp = -1.8
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -2.5 + 0.7 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -1.1
                            End If
                        
                        ElseIf RoofAngle <= 10 Then
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = -1.3
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -1.4 + 0.1 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -1.2
                            End If
                        
                        Else
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = -1.6
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -2# + 0.4 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -1.2
                            End If
                        
                        End If
                        

                    Case 3
                        
                        If RoofAngle <= 3 Then
                        
                            If EffectiveWindArea <= 10 Then
                                gcp = -2.8
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -4.5 + 1.7 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -1.1
                            End If
                        
                        ElseIf RoofAngle <= 10 Then
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = -1.8
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -2.4 + 0.6 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -1.2
                            End If
                        
                        Else
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = -2.9
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -3.8 + 0.9 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -2#
                            End If
                        
                        End If
                
                End Select 'Of Zone select
                
            GCpi = InternalCoefficient(ExposureCondition)
            PurlinCoefficient = gcp - GCpi
        
        End Select 'Of Direction select

'\\*********************************************************************************************//'
    
    'For Sawtooth Roofs
    
    Case "Sawtooth Roofs"
    
        Select Case Direction
               
            Case "Toward"
        
                Select Case Zone
                    
                    Case 1
                        
                        If RoofAngle <= 7 Then
                    
                            If EffectiveWindArea <= 10 Then
                                gcp = 0.3
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = 0.4 - 0.1 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = 0.2
                            End If
                        
                        ElseIf RoofAngle <= 10 Then
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = 0.5
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = 0.7 - 0.2 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = 0.3
                            End If
                        
                        Else
                        
                            If EffectiveWindArea <= 10 Then
                                gcp = 0.7
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = 0.8766 - 0.1766 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = 0.4
                            End If
                            
                        End If
                        
                    Case 2
                    
                        If RoofAngle <= 7 Then
                    
                            If EffectiveWindArea <= 10 Then
                                gcp = 0.3
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = 0.4 - 0.1 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = 0.2
                            End If
                        
                        ElseIf RoofAngle <= 10 Then
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = 0.5
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = 0.7 - 0.2 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = 0.3
                            End If
                        
                        Else
                        
                            If EffectiveWindArea <= 10 Then
                                gcp = 1.1
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = 1.4 - 0.3 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = 0.8
                            End If
                            
                        End If
                        
                    Case 3
                        
                        If RoofAngle <= 7 Then
                    
                            If EffectiveWindArea <= 10 Then
                                gcp = 0.3
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = 0.4 - 0.1 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = 0.2
                            End If
                        
                        ElseIf RoofAngle <= 10 Then
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = 0.5
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = 0.7 - 0.2 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = 0.3
                            End If
                        
                        Else
                        
                            If EffectiveWindArea <= 10 Then
                                gcp = 0.8
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = 0.9 - 0.1 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = 0.7
                            End If
                        
                        End If
                
                End Select 'Of Zone select
                
            GCpi = InternalCoefficient(ExposureCondition)
            PurlinCoefficient = gcp - GCpi
            
            'End Select case of Toward
            
            Case "Away"
                
                Select Case Zone
                
                    Case 1
                        
                        If RoofAngle <= 7 Then
                        
                            If EffectiveWindArea <= 10 Then
                                gcp = -1#
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -1.1 + 0.1 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -0.9
                            End If
                        
                        ElseIf RoofAngle <= 10 Then
                        
                            If EffectiveWindArea <= 10 Then
                                gcp = -0.9
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -1# + 0.1 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -0.8
                            End If
                        
                        Else
                            
                            If EffectiveWindArea <= 10 Then
                                gcp = -2.2
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -2.8474 - 0.6474 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -1.1
                            End If
                        
                        End If
                        
                    Case 2
                        
                        If RoofAngle <= 7 Then
                        
                            If EffectiveWindArea <= 10 Then
                                gcp = -1.8
                            ElseIf EffectiveWindArea <= 100 Then
                                gcp = -2.5 + 0.7 * WorksheetFunction.Log10(EffectiveWindArea)
                            Else
                                gcp = -1.1
                            End If
                        
                        ElseIf RoofAngle <= 10 Then
                        
…
ooxml_oleobject_00.bin ooxml-ole-object OOXML embedded OLE part: xl/embeddings/oleObject2.bin 24064 bytes
SHA-256: 62aea69eb790cc359a1dcf1f8741c6295dbed9cc59a2c0875fc3e9e8f0535de7
ooxml_oleobject_01.bin ooxml-ole-object OOXML embedded OLE part: xl/embeddings/oleObject1.bin 30720 bytes
SHA-256: cbcf85ef579eef2cbc5ab1c9923c95cefd692dde8b802c939b29d9f71027e865
vbaProject_00.bin vba-project OOXML VBA project: xl/vbaProject.bin 388096 bytes
SHA-256: 3edc255d0ecb5c643c76f4af679c7b824140efe744653fe544ab281b88139bfb
emf_00.emf ooxml-emf OOXML EMF part: xl/media/image297.emf 1332 bytes
SHA-256: 2582cb4a73d1348236fd7c8a6ba8a7d6aa224b98a84cd3431232708407d9cab1
emf_01.emf ooxml-emf OOXML EMF part: xl/media/image298.emf 1316 bytes
SHA-256: c2e53fd41a946665ffbc5aaf63a524f46285368a900f8b3408453f6a3b30bdda
emf_02.emf ooxml-emf OOXML EMF part: xl/media/image299.emf 1352 bytes
SHA-256: 1706d3b0f0245f2f41dad86661e00ae97e98412f8ed4cee926a4fdf6c0725118
emf_03.emf ooxml-emf OOXML EMF part: xl/media/image300.emf 1352 bytes
SHA-256: eb00fe1689f0a3311a9ac49b620f41817eee58b9efb3ebbb96c9da497485f30b
emf_04.emf ooxml-emf OOXML EMF part: xl/media/image301.emf 1316 bytes
SHA-256: 885b26b89a959e1c33787064973a10de18bb7ec1b7e59541f969f197685f83f5
emf_05.emf ooxml-emf OOXML EMF part: xl/media/image296.emf 1352 bytes
SHA-256: cd77afab8b9fa3c3b65c3acdef9a20d45d952b6fcea8c16f7123f47bec286a01
emf_06.emf ooxml-emf OOXML EMF part: xl/media/image295.emf 1352 bytes
SHA-256: 19d3e8185ce79e873bb71bc20376ba9e1e7419821d6fcc22163f5260db538624
emf_07.emf ooxml-emf OOXML EMF part: xl/media/image294.emf 1332 bytes
SHA-256: 1f3ede3a911df9465e08636555587e2e10400485f01454b23fdc97188638b2b9
emf_08.emf ooxml-emf OOXML EMF part: xl/media/image290.emf 1352 bytes
SHA-256: 895fbcc06f5cc20ebc4f51caeafcdd9e8ebda592134e0e6a760d0b7511045c78
emf_09.emf ooxml-emf OOXML EMF part: xl/media/image291.emf 1344 bytes
SHA-256: f8a10faad23ba6bf52e0654ce547ad7a045f86d49f39c3452fb976c23c5528f2
emf_10.emf ooxml-emf OOXML EMF part: xl/media/image292.emf 1352 bytes
SHA-256: 79398c60da314d2a9bb5d12990a1db1130b1e348068a69d202dbb49f6710e5f5
emf_11.emf ooxml-emf OOXML EMF part: xl/media/image293.emf 1352 bytes
SHA-256: 6da9f936b5cd5c3bf8862cd8ea6f5e7bc6c12002306618b86bf9a33912b25b9e
emf_12.emf ooxml-emf OOXML EMF part: xl/media/image302.emf 1352 bytes
SHA-256: 48687022b20005cce20e00a51df1a60cc10af7f0b4495b48637ec76a297bbde0
emf_13.emf ooxml-emf OOXML EMF part: xl/media/image303.emf 1352 bytes
SHA-256: 1baa08b171cd745ab73db642440be14163c3c186e542c22f7744402be4a7720c
emf_14.emf ooxml-emf OOXML EMF part: xl/media/image304.emf 1344 bytes
SHA-256: 542c61cbd6ac23d0e4930d08dbc082ed89fcb78628f30e81e424da9382b03a68
emf_15.emf ooxml-emf OOXML EMF part: xl/media/image312.emf 1328 bytes
SHA-256: f61e0a347a7758eae32b5599b54f2bec1201a4d606508622bcad0c7d5ea38452
emf_16.emf ooxml-emf OOXML EMF part: xl/media/image313.emf 1344 bytes
SHA-256: 452cc93d6b60ab91725fa7280557c625f78a700bdad2becfac59a4d7567172a6
emf_17.emf ooxml-emf OOXML EMF part: xl/media/image314.emf 1328 bytes
SHA-256: b55c85a6732dd6503c78dc0aabd0cd2f3691f8913ee1b391094f4fbf2fab2704
emf_18.emf ooxml-emf OOXML EMF part: xl/media/image315.emf 1344 bytes
SHA-256: 1d30125dfd22f92dcf28080501b6d2f6cb74998aa577dfa7028fafb2d2514f32
emf_19.emf ooxml-emf OOXML EMF part: xl/media/image311.emf 1328 bytes
SHA-256: d3eb761a1e36e08a7fc2e6e2ed0c97a9ee482f9188c5c17c9173f1f80e3d8c26
emf_20.emf ooxml-emf OOXML EMF part: xl/media/image310.emf 1352 bytes
SHA-256: a8159f6c0821a3ca3e36ad802f45b7a03aab871ff86becbff9b5dc0fcad27a0f
emf_21.emf ooxml-emf OOXML EMF part: xl/media/image309.emf 1328 bytes
SHA-256: c2a93d63385643c32a3385ca93a990c1b6e9b7871cb950c68a81a06a5a20efa2
emf_22.emf ooxml-emf OOXML EMF part: xl/media/image305.emf 1352 bytes
SHA-256: 70cc941642858a2ee26b0bf32347307bdbfb31177ba2da9293245d93be9e3cef
emf_23.emf ooxml-emf OOXML EMF part: xl/media/image306.emf 1352 bytes
SHA-256: c469e296fe612e1bbd73a13bdcc46213ef40f8ddaaf1b1a897ff8667295e96aa
emf_24.emf ooxml-emf OOXML EMF part: xl/media/image307.emf 1344 bytes
SHA-256: 64893e4813d85408f1a1a5273dfd28bdfb4cf10329534d8868fa3e0bb2737250
emf_25.emf ooxml-emf OOXML EMF part: xl/media/image308.emf 1352 bytes
SHA-256: 147e6b193080ec5642cfc9a800aadafc65f4c5890d02d5849c1fe788695a8327
emf_26.emf ooxml-emf OOXML EMF part: xl/media/image289.emf 1352 bytes
SHA-256: f5f3fc17509023081272f8cdb1bdce88cbfccc016a069a0235546320f27732f5
emf_27.emf ooxml-emf OOXML EMF part: xl/media/image288.emf 1344 bytes
SHA-256: 5f4035ffcf6d89bd3c7125cc3fb1ff49c88ebf0d38f823a5b602c486f5e0d103