Sub print_all_sub_and_function_names_of_current_project() ' пишет названия функций программы в файл c:\output.txt On Error Resume Next sub_list = "": Set iVBComponents = ThisWorkbook.VBProject.VBComponents For Each iVBComponent In iVBComponents Select Case iVBComponent.Type Case 1 To 100: With iVBComponent.CodeModule sub_list = sub_list & "==============" & vbNewLine & .Name & vbNewLine & "==============" & vbNewLine For i = 1 To .CountOfLines If InStr(1, .Lines(i, 1), "Sub ") And InStr(1, .Lines(i, 1), "Exit ") = 0 And _ (InStr(1, .Lines(i, 1), "End Sub") > 15 Or InStr(1, .Lines(i, 1), "End Sub") = 0) Then sub_list = sub_list & .Lines(i, 1) & vbNewLine End If If InStr(1, .Lines(i, 1), "Function ") And InStr(1, .Lines(i, 1), "Exit ") = 0 And _ (InStr(1, .Lines(i, 1), "End Function") > 15 Or InStr(1, .Lines(i, 1), "End Function") = 0) Then sub_list = sub_list & .Lines(i, 1) & vbNewLine End If Next End With End Select Next Dim FSO As FileSystemObject, ts As TextStream, fil As File Set FSO = CreateObject("scripting.filesystemobject") If FSO.FileExists("c:\output.txt") Then Kill "c:\output.txt" Set ts = FSO.OpenTextFile("c:\output.txt", 8, True) ts.Write sub_list: ts.Close: Set ts = Nothing: Set FSO = Nothing End Sub Пример того, что записывается в файл "c:\output.txt"
Sub print_all_code_of_current_project() ' пишет весь код данной программы в файл c:\code.vb On Error Resume Next sub_list = "": Set iVBComponents = ThisWorkbook.VBProject.VBComponents For Each iVBComponent In iVBComponents Select Case iVBComponent.Type Case 1 To 100: With iVBComponent.CodeModule sub_list = sub_list & "============== " & .Name & " ==============" & vbNewLine For i = 1 To .CountOfLines codeline = Trim$(.Lines(i, 1)) If Len(codeline) > 0 Then sub_list = sub_list & codeline & vbNewLine Next End With End Select Next Dim FSO As FileSystemObject, ts As TextStream, fil As File Set FSO = CreateObject("scripting.filesystemobject") If FSO.FileExists("c:\code.vb") Then Kill "c:\code.vb" Set ts = FSO.OpenTextFile("c:\code.vb", 8, True) ts.Write sub_list: ts.Close: Set ts = Nothing: Set FSO = Nothing End Sub Пример того, что записывается в файл "c:\code.vb"
|
|||

Комментарии
Да, можно. Пример такого кода вроде был в книге Уокенбаха
Если проект VBA запаролен - то сделать тоже можно, но намного сложнее
(требуется снимать пароль через SendKeys)
Вообще, я ни разу не сталкивался с необходимостью такого импорта
(точнее, сейчас вот, при написании очень сложной программы, столкнулся впервые за много лет, - и то придумаю, как это обойти, поскольку код запаролен, и гарантировать стабильную работу импорта макросов не представляется возможным. Как бы я придумал уже, как обойтись без импорта, - но код будет достаточно сложным, так что я не буду вдаваться в подробности)
Короче, я бы посоветовал вам отказаться от этой затеи.
Поверьте, есть способы обойтись без этого.
А можно ли, наоборот, импортировать из текстового файла в проект книги код VBA?
Попробуйте удалить строку кода (она не нужна)
(для этой строки требуется подключение дополнительной библиотеки)
ругается на sub_list = "":
Говорит что не может найти библиотеку.
что надо сделать для работы?
После прочтения даже мне тема стала интересна.
Очень полезная штука
Ну так снимите пароль - для этого есть куча утилит, типа AOPR
Или откройте файл в OpenOffice - там сможете получить доступ к коду VBA без ввода пароля
(мой макрос в OpenOffice работать не будет)
подключите Micrsoft Runtime Script в tools->references...
А возможно выгрузить код модуля в файл если проект запаролен, а пароль не знаешь? :)
Пробую запустить примеры, редактор выделяет
FSO As FileSystemObject
и все, дальше не идет.
Что это может быть?
Отправить комментарий