Извлечение / отображение макроса (VBA) из файлов .xls с использованием VB6 (без открытия Excel) - PullRequest
3 голосов
/ 21 января 2009

Я понимаю, что это можно сделать с помощью макроса Excel, см .: Программно извлекать код макроса (VBA) из документов Word 2007 , но я хочу использовать VB6 для создания приложения который делает то же самое.

У меня проблема с указанием на книгу Excel (thisworkbook.VBproject используется в приведенном выше примере).

Можно ли выбрать какой-либо файл .xls с жесткого диска, скажем, c:\try.xls, и извлечь / показать его макросы? Пожалуйста, сообщите!

Ответы [ 3 ]

2 голосов
/ 21 января 2009

Установите ссылку на библиотеку объектов Microsoft Excel 12.0 (или любую другую требуемую версию) и используйте коллекцию VBProject.VBComponents рабочей книги, например.

Sub ExportCode()
  Dim app As Excel.Application
  Set app = New Excel.Application

  Dim wb As Excel.Workbook
  Set wb = Excel.Application.Workbooks.Open("C:\Book2.xls")

  Dim strExt As String

  Dim VBComp As Object
  For Each VBComp In wb.VBProject.VBComponents
    Select Case VBComp.Type
      Case 2  ' Class module
        strExt = ".cls"
      Case 3  ' Form
        strExt = ".frm"
      Case 1  ' Standard module
        strExt = ".bas"
      Case 100  ' Document?
        strExt = ".cls"
      Case Else
        Stop  ' What else is there?
        strExt = ".cls"
    End Select

    VBComp.Export "C:\" & VBComp.Name & strExt
  Next
  wb.Close False
  app.Quit

End Sub
1 голос
/ 05 мая 2011

VbaDiff может читать макросы Excel непосредственно из файла Excel, точно так, как вы описываете. Если вам нужен программный доступ, есть версия Enterprise с API. С этим можно сделать несколько забавных вещей, как в этих примерах .

Полное раскрытие - я построил этот продукт. Я продолжал сталкиваться с проблемами, с которыми сталкивался Дин, и решил, что пришло время решить их раз и навсегда!

1 голос
/ 04 февраля 2009

Следующая строка:

Set wb = Excel.Application.Workbooks.Open("C:\Book2.xls")

должно быть

Set wb = app.Workbooks.Open("C:\Book2.xls")

...