限制对VBA代码的访问

时间:2017-01-11 22:20:55

标签: excel excel-vba excel-2016 vba

我从谷歌搜索但我仍然找不到明确的答案。我在excel vba中编写了代码。 - 如何限制程序用户访问代码?在VBA项目属性中添加密码很容易破解,那么从程序用户那里隐藏vba代码的最佳和最简单的方法是什么?

另一篇文章提示VB6,但它已经过时,我找不到下载的位置。

尝试保存在ACCDE中时出现Access错误消息。 The Access error message when trying to save in ACCDE. Part 2

1 个答案:

答案 0 :(得分:0)

我已经验证可以在MS Access项目中编写VBA代码,编译为accde文件。因此在OP出现问题后,编辑此帖子可使我的步骤更加明确......

创建一个我们将回调的Excel工作簿文件,因为我们想要证明我们可以与Excel会话进行交互。我调用了我的工作簿N:\WorkbookControlledByAccess.xlsm,并在一个模块中编写了一些可以使用Application.Run调用的代码。这段代码很简单但是很有代表性

Option Explicit

Public Function SomeExportedFunction() As String
    SomeExportedFunction = "Hello 47"
End Function

然后我打开MS Access并转到File-> New->空白桌面数据库并按下Create接受给定的默认数据库文件名,对于我' Database5',这将创建Database5.accdb。默认窗口是一个新表,Table1,关闭它。在功能区上,转到Create-> Blank Form。

在Form上创建一个命令按钮,这会抛出一个恼人的向导,取消向导。右键单击新创建的按钮以获取上下文菜单,然后单击“构建事件”,从“选择构建器”对话框中选择“代码构建器”,这会出现错误"要将代码模块添加到窗体或报表,必须切换到“设计”视图并将窗体或报表的HasNModule属性设置为是。"单击“确定”以显示该错误,然后使用“设计”功能区上的“查看”按钮切换到设计视图。进入设计视图后,再次尝试上下文菜单步骤。您现在应该获得一个VBA IDE窗口,其中包含以下代码

Option Compare Database
Option Explicit

Private Sub Command0_Click()

End Sub

我们将通过将此按钮更改为

来测试该按钮
Option Compare Database
Option Explicit

Private Sub Command0_Click()
    MsgBox "Just access at the moment"
End Sub

通过按F5运行表单,表单运行,单击按钮,我们将出现新的消息框。好的,现在要做一些Excel Access互操作。添加工具 - >引用并添加Microsoft Excel 15.0并将代码更改为

Option Compare Database
Option Explicit

Public Sub Command0_Click()

    '* Use GetObject to verify the workbook is loaded and accessible via
    '* RunningObjectTable
    Dim wb As Excel.Workbook
    Set wb = GetObject("n:\WorkbookControlledByAccess.xlsm")

    '* If we got here without error then we should be able to call back into Excel session.
    MsgBox wb.Parent.Run("WorkbookControlledByAccess.xlsm!SomeExportedFunction")

    'MsgBox SomeExportedFunction
End Sub

现在,如果您运行表单并单击按钮,则会从我们之前创建的Excel工作簿中检索消息。因此,这证明Access可以访问Excel。

这是在正常的accdb文件中,需要密码保护代码。

然后,当您想要创建accde文件时,请转到File-> Save As-> Make ACCDE并按照文件对话框进行操作。然后,您可以打开accde文件,代码将被锁定。

我还没有详尽地搜索任何黑客进入accde文件,但我们知道标准的Excel VBA不安全。