Esses códigos são em VBS, ou seja, coloque num arquivo por exemplo disassemble.vbs e assemble.vbs *(ou quaisquer nomes que vc quiser)
Leia, entenda, edite o que achar necessário. Use con cuidado. Faça cópias de segurança de tudo antes de se aventurar aqui 
Para usar, bastará dar duplo clique no vbs, ou na linha de comando do DOS, digitar o nome do VBS.
Segue os códigos para:
a) Desmontar o xlsm:
Dim shell, fso
Dim objExcel, objWorkbook, objVBComp
Dim fileName, file, codeDir, sfx, blackstone, programFile
Set objExcel = CreateObject("Excel.Application") 
objExcel.EnableEvents = False
Set fso = CreateObject("Scripting.FileSystemObject")
Set shell = WScript.CreateObject("WScript.Shell")
blackstone = fso.GetFolder("C:Program FilesiLevelExcel")
If WScript.Arguments.Count = 0 Then
    fileName = "MDET.xls"
Else
    fileName = WScript.Arguments.Item(0)
    blackstone = shell.currentDirectory
End If
programFile = fso.BuildPath(blackstone, fileName)
If Not fso.FileExists(programFile) Then
    WScript.Echo "File '" & programFile & "' doesn`t exist."
    WScript.Quit
End If
codeDir = fso.BuildPath(shell.CurrentDirectory, "NewCode")
If Not fso.FolderExists(codeDir) Then
    fso.CreateFolder codeDir
End If
ClearFolder codeDir
Set objWorkbook = objExcel.Workbooks.Open(programFile)
For Each objVBComp in objWorkbook.VBProject.VBComponents
'    WScript.Echo "   Name: " & objVBComp.Name & "    Type: " & objVBComp.Type
    Select Case objVBComp.Type
        Case 1 ' vbext_ct_StdModule
            sfx = ".bas"
        Case 2 ' vbext_ct_ClassModule
            sfx = ".cls"
        Case 3 ' vbext_ct_MSForm
            sfx = ".frm"
        Case 100 ' vbext_ct_Document
'            sfx = ".sheet"
        Case Else
'            sfx = ""
'            WScript.Echo "UNKNOWN Script Type: " & objVBComp.Type & "   Name: " & objVBComp.Name
    End Select
    
    If sfx <> "" Then
'        WScript.Echo "Export Script Type: " & objVBComp.Type & "   Name: " & objVBComp.Name & " to " & sfx & " file"
        objVBComp.Export fso.BuildPath(codeDir, objVBComp.Name & sfx)
    End If
Next
objWorkbook.Close
objExcel.Quit
CompareAndDelete
WScript.Echo "File " & programFile & " has been successfully disassembled."
WScript.Quit
Sub ClearFolder(path)
    Dim folder, file
    If fso.FolderExists(path) Then
        Set folder = fso.GetFolder(path)
        For Each file in folder.Files
            file.Delete true
        Next
    Else
'        WScript.Echo "No such folder. Create."
        fso.CreateFolder path
    End If
End Sub
Sub CompareAndDelete
    Dim shell, fso, oldFolder, oldFile, oldStream, oldContents, newFolder, newFile, newStream, newContents
    Set shell = WScript.CreateObject("WScript.Shell")
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set oldFolder = fso.GetFolder("Code")
    Set newFolder = fso.GetFolder("NewCode")
    For Each newFile in newFolder.Files
        oldFile = fso.BuildPath(oldFolder, newFile.Name)
        If fso.FileExists (oldFile) Then
            sfx = LCase(fso.GetExtensionName(newFile.Name))
            If (sfx <> "frx") Then
                Set oldStream = fso.OpenTextFile(oldFile, 1)
                Set newStream = fso.OpenTextFile(newFile, 1)
                oldContents = oldStream.ReadAll
                newContents = newStream.ReadAll
                oldStream.Close
                newStream.Close
                If (oldContents = newContents) Then
                     fso.DeleteFile newFile
                End If
            End If
        End If
    Next
End Sub
b) Montar o xlsm:
Dim shell, fso
Dim objExcel, objWorkbook, objVBComp
Dim file, name, sfx, codeFolder, codeFile, blackstone, programFile, imgFolder, imgFile, targetImgFile
Set objExcel = CreateObject("Excel.Application") 
objExcel.EnableEvents = False
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.GetFile("EmptyDET.xls")
file.Copy "DET.xls", true
Set file = fso.GetFile("DET.xls")
file.Attributes = file.Attributes AND 0
Set objWorkbook = objExcel.Workbooks.Open(file.Path)
Set codeFolder = fso.GetFolder("Code")
For Each codeFile in codeFolder.Files
    sfx = LCase(fso.GetExtensionName(codeFile.Name))
    name = fso.GetBaseName(codeFile.Name)
    
    If (sfx = "cls" or sfx = "frm" or sfx = "bas") Then
        RemoveComponent objWorkbook, name
'        WScript.Echo "Import  " & codeFile.Path
        objWorkbook.VBProject.VBComponents.Import codeFile.Path
    Else
'        WScript.Echo "NOT PROCESSED  " & codeFile.Name
    End If
Next    
objWorkbook.Save
objWorkbook.Close
objExcel.Quit
If Not fso.FolderExists("C:Program FilesiLevel") Then
    fso.CreateFolder "C:Program FilesiLevel"
End If
If Not fso.FolderExists("C:Program FilesiLevelExcel") Then
    fso.CreateFolder "C:Program FilesiLevelExcel"
End If
blackstone = fso.GetFolder("C:Program FilesiLevelExcel")
programFile = fso.BuildPath(blackstone, file.Name)
If fso.FileExists (programFile) Then
    fso.DeleteFile (programFile)
End If
fso.MoveFile file, programFile
WScript.Echo "File " & programFile & " has been successfully created."
WScript.Quit
Sub RemoveComponent(objWorkbook, name)
            On Error Resume Next
    Set objVBComp = objWorkbook.VBProject.VBComponents(name)
    If objVBComp.Type = 1 or objVBComp.Type = 2 or objVBComp.Type = 3  or objVBComp.Type = 100 Then
'        WScript.Echo "Remove   " & name
        objWorkbook.VBProject.VBComponents.Remove objVBComp
    End If
end sub
                                                                                                	Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
 
                    
                    	
                            Postado : 24/04/2015 5:52 am