Xls.Trojan.Laroux-32 — Office (OLE) malware analysis

Static analysis result for SHA-256 f019fe96a0f4a6f7…

MALICIOUS

Office (OLE)

1.95 MB Created: 2010-03-30 01:10:38 Authoring application: Microsoft Excel First seen: 2015-10-02
MD5: c41bc0d4b0a6faf9d9330239fdeb00d3 SHA-1: 2845ad07e2abf3c7adb5768abeb0c744afd031be SHA-256: f019fe96a0f4a6f7fc3747b51ecbad8a27f9a5fc7c11cc1fc305cb51b421a4bd
156 Risk Score

Malware Insights

Xls.Trojan.Laroux-32 · confidence 95%

MITRE ATT&CK
T1059.005 Visual Basic T1566.001 Spearphishing Attachment

The file is identified as malicious by ClamAV with the signature Xls.Trojan.Laroux-32. It contains VBA macros, specifically a Workbook_Open event, which is designed to create a custom menu titled '债务审计' (Debt Audit). This menu contains options like '插入新行' (Insert New Row) and '检查数据' (Check Data), which are likely pretexts to execute further malicious actions or to trick the user into interacting with the malicious functionality. The presence of these macros and the specific detection name strongly suggest a macro-based trojan.

Heuristics 4

  • ClamAV: Xls.Trojan.Laroux-32 critical CLAMAV_DETECTION
    ClamAV detected this file as malware: Xls.Trojan.Laroux-32
  • VBA macros detected medium 2 related findings OLE_VBA_MACROS
    Document contains VBA macro code
  • Workbook_Open macro low OLE_VBA_WBOPEN
    Workbook_Open macro
    Matched line in script
    Private Sub Workbook_Open()
  • Auto_Open macro low OLE_VBA_AUTO
    Auto_Open macro
    Matched line in script
    Sub auto_open()

Extracted artifacts 1

Files carved from inside the sample during analysis.

FilenameKindSourceSize
macros.bas vba-macro oletools.olevba.extract_macros (decoded VBA source) 67784 bytes
SHA-256: c7bbd3351cce0edae50726904c409363f242d7077403402948876dd5a4276876
Detection
ClamAV: Xls.Trojan.Laroux-32
Obfuscation or payload: unlikely
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
Option Explicit
Private Sub Workbook_Open()
        Call clearMenu
        Dim HelpMenu As CommandBarControl
        Dim NewMenu As CommandBarPopup
        Dim MenuItem As CommandBarControl
        Dim Submenuitem As CommandBarButton
        
        Set HelpMenu = Application.CommandBars(1).FindControl(ID:=30010)
        
        If HelpMenu Is Nothing Then
            Set NewMenu = Application.CommandBars(1).Controls.Add(Type:=msoControlPopup, temporary:=True)
        Else
            Set NewMenu = Application.CommandBars(1).Controls.Add(Type:=msoControlPopup, before:=HelpMenu.index, temporary:=True)
        End If
        
        NewMenu.Caption = "债务审计"
        
        Set MenuItem = NewMenu.Controls.Add(Type:=msoControlButton)
        With MenuItem
              .Caption = "插入新行"
              .FaceId = 162
              .OnAction = "InsertRow.ShowInsertRowForm"
        End With
        
        Set MenuItem = NewMenu.Controls.Add(Type:=msoControlButton)
        With MenuItem
              .Caption = "检查数据"
              .FaceId = 162
              .OnAction = "CheckData.checkData"
        End With
        Call disableMenu
        Call loadProvince
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
   Call clearMenu
End Sub

Private Sub clearMenu()
    On Error Resume Next
        Application.CommandBars(1).Controls("债务审计").Delete
        'Application.CommandBars(1).Controls("插入(&i)").Visible = True
        'Application.CommandBars(1).Controls("插入(&i)").Enabled = True
       '屏蔽插入行列单元格项
        
        'Application.CommandBars("Row").Controls("插入(&i)").Enabled = True
        
        'Application.CommandBars("Column").Controls("插入(&i)").Enabled = True
        'Application.CommandBars("Column").Controls("删除(&D)...").Enabled = True
        
        'Application.CommandBars("Cell").Controls("插入(&i)...").Enabled = True
        'Application.CommandBars("Cell").Controls("删除(&D)...").Enabled = True
End Sub

Private Sub disableMenu()
    On Error Resume Next
    
        'Application.CommandBars(1).Controls("插入(&i)").Visible = False
        'Application.CommandBars(1).Controls("插入(&i)").Enabled = False
       '屏蔽插入行列单元格项
        
        'Application.CommandBars("Row").Controls("插入(&i)").Enabled = False
        
        'Application.CommandBars("Column").Controls("插入(&i)").Enabled = False
        'Application.CommandBars("Column").Controls("删除(&D)...").Enabled = False
        
        'Application.CommandBars("Cell").Controls("插入(&i)...").Enabled = False
        'Application.CommandBars("Cell").Controls("删除(&D)...").Enabled = False
End Sub

Private Sub loadProvince()
    On Error Resume Next
    
    Dim startRow As Integer
    startRow = Util.getDataStartRowNo
    'startRow = 10
    
    Dim endrow As Integer
    endrow = Util.getCommentRowNo
    
            
     Call loadData.loadData
     Dim i
     'ActiveSheet.Unprotect Password:="zwsjtymm"
     For i = startRow To endrow
    
            Dim rangeValue As String
            rangeValue = "A" & i
            
            Dim provices As String
            provices = loadData.getProvince
            With Range(rangeValue).Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:=provices
                .IgnoreBlank = True
                .InCellDropdown = True
                .InputTitle = ""
                .ErrorTitle = ""
                .InputMessage = ""
                .ErrorMessage = ""
                .IMEMode = xlIMEModeNoControl
                .ShowInput = True
                .ShowError = True
             End With
    Next i
    'ActiveSheet.Protect Password:="zwsjtymm", DrawingObjects:=False, Contents:=True, Scenarios:= _
    '    False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
    '    AllowFormattingRows:=True, AllowInsertingRows:=True, AllowDeletingRows:= _
    '    True
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
 Call loadProvince
End Sub


Attribute VB_Name = "InsertRowForm"
Attribute VB_Base = "0{A9BF5EA3-7437-401C-B838-2C0A656DE41B}{14DC9674-1547-4316-A084-DDBF96A276BC}"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Attribute VB_TemplateDerived = False
Attribute VB_Customizable = False

Private Sub Cancel_Click()
  Me.Hide
End Sub

Private Sub confirm_Click()
    If Me.TextBox1.value <> "" Then
    
        '控制输入值
        If Not IsNumeric(Me.TextBox1.value) Then
            MsgBox "请输入数字"
            Exit Sub
        End If
        
        
        Dim Row As Integer
        Row = CInt(Me.TextBox1.value)
    
        'ActiveSheet.Unprotect Password:="zwsjtymm"
        insertRow.insertRow Row
        'ActiveSheet.Protect Password:="zwsjtymm", DrawingObjects:=False, Contents:=True, Scenarios:= _
        '    False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
        '    AllowFormattingRows:=True, AllowInsertingRows:=True, AllowDeletingRows:= _
        '    True
    Else
        MsgBox "请输入行数"
        Exit Sub
    End If
    Me.Hide
End Sub

Private Sub UserForm_Initialize()
   Me.TextBox1.value = "1"
End Sub



Attribute VB_Name = "Column"
Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Attribute VB_TemplateDerived = False
Attribute VB_Customizable = False
Option Explicit

Public m_index As String         'index
Public m_label As String       '列汉字名
Public m_checkfuc As String      '需要做的检查函数
Public m_dataType As String     '数据类型
Public m_validInputs As Collection        '可输入的值的范围
Public m_formula As String '公式

Public Property Get index() As String
    index = m_index
End Property
Public Property Let index(value As String)
    m_index = value
End Property
Public Property Get label() As String
    label = m_label
End Property
Public Property Let label(value As String)
    m_label = value
End Property
Public Property Get checkfuc() As String
    checkfuc = m_checkfuc
End Property
Public Property Let checkfuc(value As String)
    m_checkfuc = value
End Property
Public Property Get dataType() As String
    dataType = m_dataType
End Property
Public Property Let dataType(value As String)
    m_dataType = value
End Property
Public Property Get validInputs() As Collection
    Set validInputs = m_validInputs
End Property
Public Property Let validInputs(value As Collection)
    Set m_validInputs = value
End Property
Public Property Get formula() As String
    formula = m_formula
End Property
Public Property Let formula(value As String)
    m_formula = value
End Property

Attribute VB_Name = "Sheet2"
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 = "Sheet1"
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
Public Function GetTableRow() As Collection
    Dim colums As New Collection
    Dim temp As String
    '省
    Dim column_1 As New Column
    column_1.index = 1
    column_1.label = "省"
    column_1.checkfuc = "NotNull"
    column_1.dataType = "varchar"
    column_1.validInputs = Nothing
    column_1.formula = ""
    colums.Add column_1
     
    '市
    Dim column_2 As New Column
    column_2.index = 2
    column_2.label = "市"
    column_2.checkfuc = "NotNull"
    column_2.dataType = "varchar"
    column_2.validInputs = Nothing
    column_2.formula = ""
    colums.Add column_2
     
    '区/县
    Dim column_3 As New Column
    column_3.index = 3
    column_3.label = "县"
    column_3.checkfuc = "no"
    column_3.dataType = "varchar"
    column_3.validInputs = Nothing
    column_3.formula = ""
    colums.Add column_3
     
    '行政区划级次
    Dim column_4 As New Column
    column_4.index = 4
    column_4.label = "地区级次"
    column_4.checkfuc = "NotNull"
    column_4.dataType = "varchar"
    temp = "省本级,地市本级,县级"
    column_4.validInputs = GetSelConnection(temp)
    column_4.formula = ""
    colums.Add column_4
     
    '学校名称
    Dim column_5 As New Column
    column_5.index = 5
    column_5.label = "学校名称"
    column_5.checkfuc = "NotNull"
    column_5.dataType = "varchar"
    column_5.validInputs = Nothing
    column_5.formula = ""
    colums.Add column_5
     
    '学校类别
    Dim column_6 As New Column
    column_6.index = 6
    column_6.label = "学校类别"
    column_6.checkfuc = "NotNull"
    column_6.dataType = "varchar"
    temp = "高级中学,完全中学,十二年一贯制学校"
    column_6.validInputs = GetSelConnection(temp)
    column_6.formula = ""
    colums.Add column_6
     
    '是否为示范校
    Dim column_7 As New Column
    column_7.index = 7
    column_7.label = "是否为示范校"
    column_7.checkfuc = "NotNull"
    column_7.dataType = "varchar"
    temp = "省级示范校,地市级示范校,否"
    column_7.validInputs = GetSelConnection(temp)
    column_7.formula = ""
    colums.Add column_7
     
    '城乡类别
    Dim column_8 As New Column
    column_8.index = 8
    column_8.label = "城乡类别"
    column_8.checkfuc = "NotNull"
    column_8.dataType = "varchar"
    temp = "城市,县镇,农村"
    column_8.validInputs = GetSelConnection(temp)
    column_8.formula = ""
    colums.Add column_8
     
    '债务统计表年度
    Dim column_9 As New Column
    column_9.index = 9
    column_9.label = "债务统计表年度"
    column_9.checkfuc = "no"
    column_9.dataType = "varchar"
    temp = "2010年"
    column_9.validInputs = GetSelConnection(temp)
    column_9.formula = "=""2010年"""
    colums.Add column_9
     
    '2010年末高中债务余额(本金)_小计
    Dim column_10 As New Column
    column_10.index = 10
    column_10.label = "2010年末高中债务余额(本金)_小计"
    column_10.checkfuc = "no"
    column_10.dataType = "currency"
    column_10.validInputs = Nothing
    column_10.formula = "=RC[1]+RC[2]+RC[3]+RC[4]+RC[5]"
    colums.Add column_10
     
    '2010年末高中债务余额(本金)_政府负有偿还责任的债务余额
    Dim column_11 As New Column
    column_11.index = 11
    column_11.label = "2010年末高中债务余额(本金)_政府负有偿还责任的债务余额"
    column_11.checkfuc = "no"
    column_11.dataType = "currency"
    column_11.validInputs = Nothing
    column_11.formula = ""
    colums.Add column_11
     
    '2010年末高中债务余额(本金)_政府负有担保责任的债务余额
    Dim column_12 As New Column
    column_12.index = 12
    column_12.label = "2010年末高中债务余额(本金)_政府负有担保责任的债务余额"
    column_12.checkfuc = "no"
    column_12.dataType = "currency"
    column_12.validInputs = Nothing
    column_12.formula = ""
    colums.Add column_12
     
    '2010年末高中债务余额(本金)_其他相关债务余额
    Dim column_13 As New Column
    column_13.index = 13
    column_13.label = "2010年末高中债务余额(本金)_其他相关债务余额"
    column_13.checkfuc = "no"
    column_13.dataType = "currency"
    column_13.validInputs = Nothing
    column_13.formula = ""
    colums.Add column_13
     
    '2010年末高中债务余额(本金)_集资形成的债务余额
    Dim column_14 As New Column
    column_14.index = 14
    column_14.label = "2010年末高中债务余额(本金)_集资形成的债务余额"
    column_14.checkfuc = "no"
    column_14.dataType = "currency"
    column_14.validInputs = Nothing
    column_14.formula = ""
    colums.Add column_14
     
    '2010年末高中债务余额(本金)_三类政府性债务之外的拖欠工程款
    Dim column_15 As New Column
    column_15.index = 15
    column_15.label = "2010年末高中债务余额(本金)_三类政府性债务之外的拖欠工程款"
    column_15.checkfuc = "no"
    column_15.dataType = "currency"
    column_15.validInputs = Nothing
    column_15.formula = ""
    colums.Add column_15
     
    '2010年偿还高中债务本息_小计
    Dim column_16 As New Column
    column_16.index = 16
    column_16.label = "2010年偿还高中债务本息_小计"
    column_16.checkfuc = "no"
    column_16.dataType = "currency"
    column_16.validInputs = Nothing
    column_16.formula = "=RC[1]+RC[2]+RC[3]+RC[4]+RC[5]"
    colums.Add column_16
     
    '2010年偿还高中债务本息_偿还政府负有偿还责任的债务本息
    Dim column_17 As New Column
    column_17.index = 17
    column_17.label = "2010年偿还高中债务本息_偿还政府负有偿还责任的债务本息"
    column_17.checkfuc = "no"
    column_17.dataType = "currency"
    column_17.validInputs = Nothing
    column_17.formula = ""
    colums.Add column_17
     
    '2010年偿还高中债务本息_偿还政府负有担保责任的债务本息
    Dim column_18 As New Column
    column_18.index = 18
    column_18.label = "2010年偿还高中债务本息_偿还政府负有担保责任的债务本息"
    column_18.checkfuc = "no"
    column_18.dataType = "currency"
    column_18.validInputs = Nothing
    column_18.formula = ""
    colums.Add column_18
     
    '2010年偿还高中债务本息_偿还其他相关债务本息
    Dim column_19 As New Column
    column_19.index = 19
    column_19.label = "2010年偿还高中债务本息_偿还其他相关债务本息"
    column_19.checkfuc = "no"
    column_19.dataType = "currency"
    column_19.validInputs = Nothing
    column_19.formula = ""
    colums.Add column_19
     
    '2010年偿还高中债务本息_偿还集资本息
    Dim column_20 As New Column
    column_20.index = 20
    column_20.label = "2010年偿还高中债务本息_偿还集资本息"
    column_20.checkfuc = "no"
    column_20.dataType = "currency"
    column_20.validInputs = Nothing
    column_20.formula = ""
    colums.Add column_20
     
    '2010年偿还高中债务本息_偿还三类政府性债务之外的拖欠工程款本息
    Dim column_21 As New Column
    column_21.index = 21
    column_21.label = "2010年偿还高中债务本息_偿还三类政府性债务之外的拖欠工程款本息"
    column_21.checkfuc = "no"
    column_21.dataType = "currency"
    column_21.validInputs = Nothing
    column_21.formula = ""
    colums.Add column_21
     
    '2010年借新还旧情况_小计
    Dim column_22 As New Column
    column_22.index = 22
    column_22.label = "2010年借新还旧情况_小计"
    column_22.checkfuc = "no"
    column_22.dataType = "currency"
    column_22.validInputs = Nothing
    column_22.formula = "=RC[1]+RC[2]+RC[3]+RC[4]+RC[5]"
    colums.Add column_22
     
    '2010年借新还旧情况_用当年举借新债偿还政府负有偿还责任的债务本息
    Dim column_23 As New Column
    column_23.index = 23
    column_23.label = "2010年借新还旧情况_用当年举借新债偿还政府负有偿还责任的债务本息"
    column_23.checkfuc = "no"
    column_23.dataType = "currency"
    column_23.validInputs = Nothing
    column_23.formula = ""
    colums.Add column_23
     
    '2010年借新还旧情况_用当年举借新债偿还政府负有担保责任的债务本息
    Dim column_24 As New Column
    column_24.index = 24
    column_24.label = "2010年借新还旧情况_用当年举借新债偿还政府负有担保责任的债务本息"
    column_24.checkfuc = "no"
    column_24.dataType = "currency"
    column_24.validInputs = Nothing
    column_24.formula = ""
    colums.Add column_24
     
    '2010年借新还旧情况_用当年举借新债偿还其他相关债务本息
    Dim column_25 As New Column
    column_25.index = 25
    column_25.label = "2010年借新还旧情况_用当年举借新债偿还其他相关债务本息"
    column_25.checkfuc = "no"
    column_25.dataType = "currency"
    column_25.validInputs = Nothing
    column_25.formula = ""
    colums.Add column_25
     
    '2010年借新还旧情况_用当年举借新债偿还集资本息
    Dim column_26 As New Column
    column_26.index = 26
    column_26.label = "2010年借新还旧情况_用当年举借新债偿还集资本息"
    column_26.checkfuc = "no"
    column_26.dataType = "currency"
    column_26.validInputs = Nothing
    column_26.formula = ""
    colums.Add column_26
     
    '2010年借新还旧情况_用当年举借新债偿还三类政府性债务之外的拖欠工程款本息
    Dim column_27 As New Column
    column_27.index = 27
    column_27.label = "2010年借新还旧情况_用当年举借新债偿还三类政府性债务之外的拖欠工程款本息"
    column_27.checkfuc = "no"
    column_27.dataType = "currency"
    column_27.validInputs = Nothing
    column_27.formula = ""
    colums.Add column_27
     
    '借新还旧率
    Dim column_28 As New Column
    column_28.index = 28
    column_28.label = "借新还旧率"
    column_28.checkfuc = "no"
    column_28.dataType = "currency"
    column_28.validInputs = Nothing
    column_28.formula = "=IF(RC[-12]=0,,RC[-6]/RC[-12])"
    colums.Add column_28
     
    '2010年末逾期债务情况(本金)_小计
    Dim column_29 As New Column
    column_29.index = 29
    column_29.label = "2010年末逾期债务情况(本金)_小计"
    column_29.checkfuc = "no"
    column_29.dataType = "currency"
    column_29.validInputs = Nothing
    column_29.formula = "=RC[1]+RC[2]+RC[3]+RC[4]+RC[5]"
    colums.Add column_29
     
    '2010年末逾期债务情况(本金)_政府负有偿还责任的债务逾期金额
    Dim column_30 As New Column
    column_30.index = 30
    column_30.label = "2010年末逾期债务情况(本金)_政府负有偿还责任的债务逾期金额"
    column_30.checkfuc = "no"
    column_30.dataType = "currency"
    column_30.validInputs = Nothing
    column_30.formula = ""
    colums.Add column_30
     
    '2010年末逾期债务情况(本金)_政府负有担保责任的债务逾期金额
    Dim column_31 As New Column
    column_31.index = 31
    column_31.label = "2010年末逾期债务情况(本金)_政府负有担保责任的债务逾期金额"
    column_31.checkfuc = "no"
    column_31.dataType = "currency"
    column_31.validInputs = Nothing
    column_31.formula = ""
    colums.Add column_31
     
    '2010年末逾期债务情况(本金)_其他相关债务逾期金额
    Dim column_32 As New Column
    column_32.index = 32
    column_32.label = "2010年末逾期债务情况(本金)_其他相关债务逾期金额"
    column_32.checkfuc = "no"
    column_32.dataType = "currency"
    column_32.validInputs = Nothing
    column_32.formula = ""
    colums.Add column_32
     
    '2010年末逾期债务情况(本金)_集资形成的逾期债务金额
    Dim column_33 As New Column
    column_33.index = 33
    column_33.label = "2010年末逾期债务情况(本金)_集资形成的逾期债务金额"
    column_33.checkfuc = "no"
    column_33.dataType = "currency"
    column_33.validInputs = Nothing
    column_33.formula = ""
    colums.Add column_33
     
    '2010年末逾期债务情况(本金)_拖欠工程款金额
    Dim column_34 As New Column
    column_34.index = 34
    column_34.label = "2010年末逾期债务情况(本金)_拖欠工程款金额"
    column_34.checkfuc = "no"
    column_34.dataType = "currency"
    column_34.validInputs = Nothing
    column_34.formula = ""
    colums.Add column_34
     
    '逾期债务率
    Dim column_35 As New Column
    column_35.index = 35
    column_35.label = "逾期债务率"
    column_35.checkfuc = "no"
    column_35.dataType = "currency"
    column_35.validInputs = Nothing
    column_35.formula = "=IF(RC[-25]=0,,RC[-6]/RC[-25])"
    colums.Add column_35
     
    '2010年末资产合计
    Dim column_36 As New Column
    column_36.index = 36
    column_36.label = "2010年末资产合计"
    column_36.checkfuc = "no"
    column_36.dataType = "currency"
    column_36.validInputs = Nothing
    column_36.formula = ""
    colums.Add column_36
     
    '2010年末负债合计
    Dim column_37 As New Column
    column_37.index = 37
    column_37.label = "2010年末负债合计"
    column_37.checkfuc = "no"
    column_37.dataType = "currency"
    column_37.validInputs = Nothing
    column_37.formula = ""
    colums.Add column_37
     
    '2010年末资产负债率
    Dim column_38 As New Column
    column_38.index = 38
    column_38.label = "2010年末资产负债率"
    column_38.checkfuc = "no"
    column_38.dataType = "currency"
    column_38.validInputs = Nothing
    column_38.formula = "=IF(RC[-2]=0,,RC[-1]/RC[-2])"
    colums.Add column_38
     
    '2010年普通高中(高中部)收支情况_收入_合计
    Dim column_39 As New Column
    column_39.index = 39
    column_39.label = "2010年普通高中(高中部)收支情况_收入_合计"
    column_39.checkfuc = "no"
    column_39.dataType = "currency"
    column_39.validInputs = Nothing
    column_39.formula = ""
    colums.Add column_39
     
    '2010年普通高中(高中部)收支情况_收入_预算内教育经费_小计
    Dim column_40 As New Column
    column_40.index = 40
    column_40.label = "2010年普通高中(高中部)收支情况_收入_预算内教育经费_小计"
    column_40.checkfuc = "no"
    column_40.dataType = "currency"
    column_40.validInputs = Nothing
    column_40.formula = ""
    colums.Add column_40
     
    '2010年普通高中(高中部)收支情况_收入_预算内教育经费_教育事业费拨款
    Dim column_41 As New Column
    column_41.index = 41
    column_41.label = "2010年普通高中(高中部)收支情况_收入_预算内教育经费_教育事业费拨款"
    column_41.checkfuc = "no"
    column_41.dataType = "currency"
    column_41.validInputs = Nothing
    column_41.formula = ""
    colums.Add column_41
     
    '2010年普通高中(高中部)收支情况_收入_预算内教育经费_基本建设拨款
    Dim column_42 As New Column
    column_42.index = 42
    column_42.label = "2010年普通高中(高中部)收支情况_收入_预算内教育经费_基本建设拨款"
    column_42.checkfuc = "no"
    column_42.dataType = "currency"
    column_42.validInputs = Nothing
    column_42.formula = ""
    colums.Add column_42
     
    '2010年普通高中(高中部)收支情况_收入_预算内教育经费_其他拨款
    Dim column_43 As New Column
    column_43.index = 43
    column_43.label = "2010年普通高中(高中部)收支情况_收入_预算内教育经费_其他拨款"
    column_43.checkfuc = "no"
    column_43.dataType = "currency"
    column_43.validInputs = Nothing
    column_43.formula = ""
    colums.Add column_43
     
    '2010年普通高中(高中部)收支情况_收入_各级政府征收用于教育的税费
    Dim column_44 As New Column
    column_44.index = 44
    column_44.label = "2010年普通高中(高中部)收支情况_收入_各级政府征收用于教育的税费"
    column_44.checkfuc = "no"
    column_44.dataType = "currency"
    column_44.validInputs = Nothing
    column_44.formula = ""
    colums.Add column_44
     
    '2010年普通高中(高中部)收支情况_收入_事业收入_小计
    Dim column_45 As New Column
    column_45.index = 45
    column_45.label = "2010年普通高中(高中部)收支情况_收入_事业收入_小计"
    column_45.checkfuc = "no"
    column_45.dataType = "currency"
    column_45.validInputs = Nothing
    column_45.formula = ""
    colums.Add column_45
     
    '2010年普通高中(高中部)收支情况_收入_事业收入_其中:学杂费
    Dim column_46 As New Column
    column_46.index = 46
    column_46.label = "2010年普通高中(高中部)收支情况_收入_事业收入_其中:学杂费"
    column_46.checkfuc = "no"
    column_46.dataType = "currency"
    column_46.validInputs = Nothing
    column_46.formula = ""
    colums.Add column_46
     
    '2010年普通高中(高中部)收支情况_收入_其他收入
    Dim column_47 As New Column
    column_47.index = 47
    column_47.label = "2010年普通高中(高中部)收支情况_收入_其他收入"
    column_47.checkfuc = "no"
    column_47.dataType = "currency"
    column_47.validInputs = Nothing
    column_47.formula = ""
    colums.Add column_47
     
    '2010年普通高中(高中部)收支情况_支出_合计
    Dim column_48 As New Column
    column_48.index = 48
    column_48.label = "2010年普通高中(高中部)收支情况_支出_合计"
    column_48.checkfuc = "no"
    column_48.dataType = "currency"
    column_48.validInputs = Nothing
    column_48.formula = ""
    colums.Add column_48
     
    '2010年普通高中(高中部)收支情况_支出_事业性经费支出_小计
    Dim column_49 As New Column
    column_49.index = 49
    column_49.label = "2010年普通高中(高中部)收支情况_支出_事业性经费支出_小计"
    column_49.checkfuc = "no"
    column_49.dataType = "currency"
    column_49.validInputs = Nothing
    column_49.formula = ""
    colums.Add column_49
     
    '2010年普通高中(高中部)收支情况_支出_事业性经费支出_个人部分
    Dim column_50 As New Column
    column_50.index = 50
    column_50.label = "2010年普通高中(高中部)收支情况_支出_事业性经费支出_个人部分"
    column_50.checkfuc = "no"
    column_50.dataType = "currency"
    column_50.validInputs = Nothing
    column_50.formula = ""
    colums.Add column_50
     
    '2010年普通高中(高中部)收支情况_支出_事业性经费支出_公用部分
    Dim column_51 As New Column
    column_51.index = 51
    column_51.label = "2010年普通高中(高中部)收支情况_支出_事业性经费支出_公用部分"
    column_51.checkfuc = "no"
    column_51.dataType = "currency"
    column_51.validInputs = Nothing
    column_51.formula = ""
    colums.Add column_51
     
    '2010年普通高中(高中部)收支情况_支出_基本建设支出
    Dim column_52 As New Column
    column_52.index = 52
    column_52.label = "2010年普通高中(高中部)收支情况_支出_基本建设支出"
    column_52.checkfuc = "no"
    column_52.dataType = "currency"
    column_52.validInputs = Nothing
    column_52.formula = ""
    colums.Add column_52
        
    Set GetTableRow = colums
End Function
   
Private Function GetSelConnection(inputs As String) As Collection

      Dim arr, temp
      Dim coll As New Collection
      
      arr = Strings.Split(inputs, ",")
      
      For Each temp In arr
          coll.Add temp
      Next temp
      
      Set GetSelConnection = coll
End Function

Public Function GetHasFormulaRow() As Collection

      Dim coll
      Dim temp
      Set coll = GetTableRow()
      Dim returnColl As New Collection
      
      
      For Each temp In coll
          If temp.formula <> "" Then
             returnColl.Add temp
          End If
      Next temp
      
      Set GetHasFormulaRow = returnColl
End Function

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    '符合情况的单元框选择
    If Target.Row <= 9 And Target.Column > 3 Then
         Exit Sub
    End If
    
    '当是数组的时候,是插入行的情况
    If IsArray(Target.Value2) Then
        Exit Sub
    End If
       
    ' 表示变化的省
    If Target.Column = 1 Then
            Dim rangeValue As String
            rangeValue = "B" & Target.Row
            
            Call loadData.loadData
            Dim citys As String
         
            
            citys = loadData.getCity(Target.value)
            
            If citys = "" Then
              citys = ","
            End If
    
            'ActiveSheet.Unprotect Password:="zwsjtymm"
            
            With Range(rangeValue).Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:=citys
                .IgnoreBlank = True
                .InCellDropdown = True
                .InputTitle = ""
                .ErrorTitle = ""
                .InputMessage = ""
                .ErrorMessage = ""
                .IMEMode = xlIMEModeNoControl
                .ShowInput = True
                .ShowError = True
            End With
            
            '清除市,县,级次填入值
            rangeValue = "B" & Target.Row
            Range(rangeValue).ClearContents
            rangeValue = "C" & Target.Row
            Range(rangeValue).ClearContents
            rangeValue = "D" & Target.Row
            Range(rangeValue).ClearContents
       End If
       
        ' 表示变化的市
        If Target.Column = 2 Then
            rangeValue = "C" & Target.Row
            
            Call loadData.loadData
            Dim countys As String
            Dim province As String
            
            If Target.value = "本级" Then
               countys = ""
               rangeValue = "D" & Target.Row
               Range(rangeValue).value = "省本级"
            Else
               rangeValue = "A" & Target.Row
               province = Range(rangeValue).value
               countys = loadData.getCounty(province, Target.value)
            End If
            
            If countys = "" Then
             countys = ","
            End If
    
            rangeValue = "C" & Target.Row
            
            'ActiveSheet.Unprotect Password:="zwsjtymm"
            
            With Range(rangeValue).Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:=countys
                .IgnoreBlank = True
                .InCellDropdown = True
                .InputTitle = ""
                .ErrorTitle = ""
                .InputMessage = ""
                .ErrorMessage = ""
                .IMEMode = xlIMEModeNoControl
                .ShowInput = True
                .ShowError = True
            End With
            
             '清除县,级次填入值
            rangeValue = "C" & Target.Row
            Range(rangeValue).ClearContents
            If Target.value <> "本级" Then
                rangeValue = "D" & Target.Row
                Range(rangeValue).ClearContents
            End If
             
        End If
        
         ' 表示变化的县
        If Target.Column = 3 Then
            Dim City As String
            Dim county As String
            Dim classes As String
           
            If Target.value = "本级" Then
               classes = "地市本级"
            Else
               Call loadData.loadData
               rangeValue = "A" & Target.Row
               province = Range(rangeValue).value
                
               rangeValue = "B" & Target.Row
               City = Range(rangeValue).value
                
               rangeValue = "C" & Target.Row
               county = Range(rangeValue).value
                
               rangeValue = "D" & Target.Row
            
               classes = loadData.getClass(province, City, county)
            End If
            
            rangeValue = "D" & Target.Row
            Range(rangeValue).value = classes
                        
        End If
    'ActiveSheet.Protect Password:="zwsjtymm", DrawingObjects:=False, Contents:=True, Scenarios:= _
    '    False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
    '    AllowFormattingRows:=True, AllowInsertingRows:=True, AllowDeletingRows:= _
    '    True
End Sub



Attribute VB_Name = "CheckerForTable_1"
Option Explicit

Sub checkData(sneedOperRow As String, totalMsg As String)
    '取得需要做处理的行
    Dim needOperRow As New Collection
    Set needOperRow = Util.split2Arr(sneedOperRow)
    
    '------------------------------------特殊处理----------------------------------------------
    '需要特殊处理的行, 列
    Dim tempMsg As String
    Dim temp
    For Each temp In needOperRow
        '校验涉及到的数值列
        Dim tmp39 As Currency  '2010年普通高中(高中部)收支情况_收入_合计
        Dim tmp40 As Currency  '2010年普通高中(高中部)收支情况_收入_预算内教育经费_小计
        Dim tmp41 As Currency  '2010年普通高中(高中部)收支情况_收入_预算内教育经费_教育事业费拨款
        Dim tmp42 As Currency  '2010年普通高中(高中部)收支情况_收入_预算内教育经费_基本建设拨款
        Dim tmp43 As Currency  '2010年普通高中(高中部)收支情况_收入_预算内教育经费_其他拨款
        Dim tmp44 As Currency  '2010年普通高中(高中部)收支情况_收入_各级政府征收用于教育的税费
        Dim tmp45 As Currency  '2010年普通高中(高中部)收支情况_收入_事业收入_小计
        Dim tmp46 As Currency  '2010年普通高中(高中部)收支情况_收入_事业收入_其中:学杂费
        Dim tmp47 As Currency  '2010年普通高中(高中部)收支情况_收入_其他收入
        Dim tmp48 As Currency  '2010年普通高中(高中部)收支情况_支出_合计
        Dim tmp49 As Currency  '2010年普通高中(高中部)收支情况_支出_事业性经费支出_小计
        Dim tmp50 As Currency  '2010年普通高中(高中部)收支情况_支出_事业性经费支出_个人部分
        Dim tmp51 As Currency  '2010年普通高中(高中部)收支情况_支出_事业性经费支出_公用部分
        Dim tmp52 As Currency  '2010年普通高中(高中部)收支情况_支出_基本建设支出
        tmp39 = 0
        tmp40 = 0
        tmp41 = 0
        tmp42 = 0
        tmp43 = 0
        tmp44 = 0
        tmp45 = 0
        tmp46 = 0
        tmp47 = 0
        tmp48 = 0
        tmp49 = 0
        tmp50 = 0
        tmp51 = 0
        tmp52 = 0
        If IsNumeric(Cells(temp, 39).value) Then
            tmp39 = CCur(Cells(temp, 39).value)
        End If
        If IsNumeric(Cells(temp, 40).value) Then
            tmp40 = CCur(Cells(temp, 40).value)
        End If
        If IsNumeric(Cells(temp, 41).value) Then
            tmp41 = CCur(Cells(temp, 41).value)
        End If
        If IsNumeric(Cells(temp, 42).value) Then
            tmp42 = CCur(Cells(temp, 42).value)
        End If
        If IsNumeric(Cells(temp, 43).value) Then
            tmp43 = CCur(Cells(temp, 43).value)
…