【问题标题】:Extract/Display Macro (VBA) from .xls files using VB6 (without opening Excel)使用 VB6 从 .xls 文件中提取/显示宏 (VBA)(无需打开 Excel)
【发布时间】:2010-10-02 14:44:30
【问题描述】:

我知道使用 Excel 宏可以做到这一点,请参阅:Programmatically extract macro (VBA) code from Word 2007 docs,但我想在这里做的是使用 VB6 制作一个执行相同操作的应用程序。

我在如何指向 Excel 工作簿时遇到问题(上面的示例中使用了thisworkbook.VBproject)。

是否可以从高清文件中选择任何 .xls 文件,例如 c:\try.xls,然后提取/显示其宏?请指教!

【问题讨论】:

  • Excel 宏被标记化,这使得在不使用 Excel 的情况下难以提取宏。

标签: vba vb6 extract


【解决方案1】:

设置对 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

【讨论】:

    【解决方案2】:

    VbaDiff 可以直接从 Excel 文件中读取 Excel 宏,完全按照您描述的方式。 如果您需要编程访问,可以使用带有 API 的企业版。你可以用它做一些非常有趣的事情,比如these examples

    完全披露 - 我制作了这个产品。我不断遇到与 Dean 遇到的类似问题,并决定是时候一劳永逸地解决它!

    【讨论】:

    • 我也讨厌它们 Andre,但功能齐全的演示模型对于这种恢复功能来说效果不佳。所有其他伟大的功能都在那里。感谢您查看 VbaDiff。
    • 我已经取消了主要差异功能的 30 行限制。
    • 太棒了!该工具绝对有用。我推荐它!
    【解决方案3】:

    下面一行:

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

    应该是

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

    【讨论】:

    • “应该”?这是一个值得重构,但改进微不足道。
    猜你喜欢
    • 2013-03-31
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多