我正在用C#重写旧版访问/ VBA应用程序。虽然我作为VBA程序员有限,但我认为代码是最低限度编译并且几乎像脚本一样运行?显然没有安全/ VBA你可以点击 alt + f11 来获取源代码是否有一种很好的方法来反编译/得到这段代码?
所以我尝试了这个:http://forums.databasejournal.com/showthread.php?t=34222
似乎是关于如何反编译.mdb
文件。
然而,该程序很快就重新编译了 - 或者至少说它在左下角状态栏中重新编译。有什么想法吗?
答案 0 :(得分:4)
以下是一些建议(我在上面的评论中重复了一些建议):
Alt-F11不是我打开VBE的常用方法,因为我通常想要立即进入Windows。请尝试使用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
然后,您应该能够在按住SHIFT键时打开数据库(绕过任何已定义的启动例程,这些例程可能已关闭对VBE的访问)。
如果文件是MDE,则没有源代码。您可以通过选中此属性来确定它是否为MDE:
?CurrentDB.Properties( “MDE”)
如果它是MDE(文件可以有任何扩展名),则返回“T”。如果它不是MDE,则会抛出错误(因为该属性不存在)。
//
?CurrentProject.AllModules.Count
您也可以通过打开VBE中的对象浏览器(F2)并在顶部的下拉列表中选择项目名称来查看数据库中的内容(默认情况下会显示“”) p>
最后,您可能会认为它可以受到Jet ULS的保护,但是从Access 2000开始,这不是很大可能,因为除了VBA项目上的密码之外什么都没有(即,它不是在Jet ULS下更长时间覆盖)。我希望如果它受密码保护,你会被提示输入密码,所以你已经知道了。
答案 1 :(得分:3)
如果是.mde
你运气不好。您需要获取包含已编译的源VBA代码的.mdb
以创建.mde
答案 2 :(得分:0)
导航到计算机上的程序文件夹。
打开MS Office文件夹
导航到MSAccess.exe并创建它的快捷方式。
将快捷方式移动到数据库所在的位置(使生活更轻松,您需要为每个数据库执行此操作以进行反编译)。
(可选)将快捷方式重命名为“我的数据库名称为......的反编译程序”,以便您知道打开它会破坏已编译的代码
右键单击快捷方式以查看其属性。在快捷方式的属性对话框的目标字段中,您将看到类似“C:\ Program Files \ Microsoft Office \ Office \ MSACCESS.EXE”
在目标字段中,右箭头指向路径名的末尾,键入一个空格,然后在引号中键入(或粘贴)要进行反编译的MS Access文件位置的完整路径名(最简单的方法是从文件所在窗口的地址栏复制,如果你有地址栏显示的话。
仍在目标字段中,键入空格,然后不加引号,键入/ decompile
单击“确定”接受更改并关闭对话框。
按住Shift键并保持按下状态。
摆动你的耳朵
双击快捷方式。
转到数据库中的任何模块。
答案 3 :(得分:-1)