获取 VBA/Access 源代码

bum*_*una 2 ms-access vba decompiler

我正在用 C# 重写一个旧的访问/VBA 应用程序。虽然我作为 VBA 程序员受到限制,但我的印象是代码经过最少编译并且几乎作为脚本运行?显然没有安全性/ VBA 你可以点击alt+f11来获取源代码 有没有一种反编译/获取这段代码的好方法?

所以我试过这个:http : //forums.databasejournal.com/showthread.php?t=34222

这似乎是关于如何反编译.mdb文件。

然而,程序很快就重新编译了自己——或者至少在左下方的状态栏中说它正在重新编译自己。有任何想法吗?

Dav*_*ton 5

以下是一些建议(其中一些我从我上面所做的评论中重复了一遍):

  • Alt-F11 不是我通常打开 VBE 的方法,因为我通常想转到即时窗口。改为尝试 Ctrl-G。

  • 如果 Alt-F11 和 Ctrl-G 都无法打开 VBE,则可能是数据库的 AllowBypassKey 属性已更改为 False。要获取更改此设置的代码,请在 Access 帮助文件中搜索 AllowBypassKey(在 VBE 中,从帮助菜单中搜索“AllowBypassKey”)。但是,如果 AllowBypassKey 关闭,您将无法在您尝试调查的数据库中运行代码,因此您可以运行以下代码:

//

  On Error GoTo Change_Err
    Dim db As DAO.Database
    Dim prp As Variant
    Const conPropNotFoundError = 3270

    Set db = DBEngine.OpenDatabase("C:\Databases\MyDatabase.mdb")
    db.Properties("AllowBypassProperty") = True

  exitRoutine:
    If Not (db Is Nothing) Then
       db.Close
       Set db = Nothing
    End If
    Exit Sub

  errHandler:
    If Err = conPropNotFoundError Then    ' Property not found.
       ' do nothing and exit
       Resume exitRoutine
    End If
Run Code Online (Sandbox Code Playgroud)

然后您应该能够在按住 SHIFT 键时打开数据库(这会绕过任何定义的启动例程,这些例程可能会关闭对 VBE 的访问)。

  • 如果文件是 MDE,则没有源代码。您可以通过检查此属性来确定它是否是 MDE:

    ?CurrentDB.Properties("MDE")

如果它是 MDE(文件可以有任何扩展名),这将返回“T”。如果它不是 MDE,则会抛出错误(因为该属性不存在)。

  • 其他需要检查的事情可能是有多少模块。如果您打开了数据库并且可以进入即时窗口 (Ctrl-G),那么这将告诉您是否有任何模块:

//

  ?CurrentProject.AllModules.Count
Run Code Online (Sandbox Code Playgroud)
  • 您还可以通过在 VBE (F2) 中打开对象浏览器并在顶部的下拉列表中选择项目名称(默认情况下会显示“”)来查看数据库中的内容

  • 最后,您可能认为它可以受到 Jet ULS 的保护,但是从 Access 2000 开始,这不是一个大的可能性,因为 VBA 项目上只有密码可用(即,Jet ULS 不再涵盖它) . 我希望如果它受密码保护,系统会提示您输入密码,所以您已经知道了。