bum*_*una 2 ms-access vba decompiler
我正在用 C# 重写一个旧的访问/VBA 应用程序。虽然我作为 VBA 程序员受到限制,但我的印象是代码经过最少编译并且几乎作为脚本运行?显然没有安全性/ VBA 你可以点击alt+f11来获取源代码 有没有一种反编译/获取这段代码的好方法?
所以我试过这个:http : //forums.databasejournal.com/showthread.php?t=34222
这似乎是关于如何反编译.mdb文件。
然而,程序很快就重新编译了自己——或者至少在左下方的状态栏中说它正在重新编译自己。有任何想法吗?
以下是一些建议(其中一些我从我上面所做的评论中重复了一遍):
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,则会抛出错误(因为该属性不存在)。
//
?CurrentProject.AllModules.Count
Run Code Online (Sandbox Code Playgroud)
您还可以通过在 VBE (F2) 中打开对象浏览器并在顶部的下拉列表中选择项目名称(默认情况下会显示“”)来查看数据库中的内容
最后,您可能认为它可以受到 Jet ULS 的保护,但是从 Access 2000 开始,这不是一个大的可能性,因为 VBA 项目上只有密码可用(即,Jet ULS 不再涵盖它) . 我希望如果它受密码保护,系统会提示您输入密码,所以您已经知道了。