【问题标题】:Close modal form in Access and access module codeAccess 和访问模块代码中的关闭模态表单
【发布时间】:2010-01-06 16:18:47
【问题描述】:

我继承了一个 Access 数据库,用于在 SQL 中导入一些数据。 MDB 以模式模式打开一个表单:没有 Access 菜单栏或按钮可见。我可以使用 Visual Studio 的“数据连接”工具查看包含内容的表格,但看不到模块的代码。

我在这里查看了question,但那里的答案并不是我真正需要的。有没有办法强制关闭表单(并访问模块)或提取 VBA 代码?

[编辑] 我使用的是 Access 2007,不确定原始开发人员使用的是什么。

【问题讨论】:

  • 顺便问一下,Access 是什么版本的?

标签: vba ms-access extract


【解决方案1】:

打开数据库时按住 shift 键。这将阻止它加载正在运行的自动脚本,并允许您访问表、查询和 VBA 脚本。

【讨论】:

  • 您的回答假定启动旁路键尚未被禁用。不过,这很容易逆转。
  • 我对此不熟悉。如果启动旁路键被禁用,如何启用它?
  • 谢谢。我试过这个没有成功。在“启动”时,访问会在 RunCode 上引发错误“操作失败”。我所能做的就是“停止所有宏”单击后没有任何反应,只有 Access 的默认“安全警告”栏出现在顶部。如果我选择“启用此内容”,则会显示表单,隐藏所有菜单栏等。这一切都会在按住 shift 键的情况下发生。
  • 听起来您需要更改 Access 宏安全设置。您没有指定您的 Access 版本,因此很难解释如何做到这一点。
  • 有关启动绕过键的信息,请参阅 AllowBypassKey 的访问帮助文件主题(在 VBE 中,而不是从主访问窗口)。那里提供了代码来启用/禁用启动旁路键。有关帮助文件中给出的代码的一个小弱点的讨论以及更强大的解决方案(不适用于 ACCDB 格式),请参阅mvps.org/access/general/gen0040.htm
【解决方案2】:

这是对 Michael Todd 回复 edosoft 评论的相当长的附录或评论。

与其选择启用内容,不如检查启动选项((文件->选项->当前数据库->显示表单)或(工具->启动->显示表单))并删除名称表格,记下,并确保勾选允许完整菜单(同一页)。您可能还想按 Alt+F11 显示代码,并检查启动代码,最后查看是否有 AutoRun 宏并重命名。

编辑重新评论

您不必打开 mdb 来更改启动形式,例如,可以使用您希望更改的 mdb 的全名和路径从另一个 mdb 运行此类代码。

Sub SetStartForm(DBFile As String)
Dim prp As Object
Dim db As Database

Const PROPERTY_NOT_FOUND As Integer = 3270

    Set db = OpenDatabase(DBFile)

    db.Properties("StartupForm") = "(none)" 

    If Err.Number > 0 Then
        If Err.Number = PROPERTY_NOT_FOUND Then
            '' Create the new property, but this is not relevant in this case
         End If
    End If

    db.Close
    Set db = Nothing
    Set prp = Nothing
End Sub

【讨论】:

  • 问题是表单(或代码)隐藏了所有菜单栏,所以文件->选项不可用。我试过 ALT+F11 没有成功:(
  • 您是说即使您按住 shift 键直到数据库完全打开并且您没有选择启用内容,表单也会出现?
  • 您是否根据 @Michael Todd 的回答中的 cmets 考虑过 AllowBypassKey? Alt+F11 会为你打开代码窗口吗?
  • 我添加了关于删除启动表单的注释。
【解决方案3】:

按钮关闭功能:

Private sub cmdClose_Click()
     CloseForm(YourFormName)
End sub

Public Sub CloseForm(ByVal strFormName As String)
    Dim iCounter As Integer
    For Each frm In Forms
        With frm
            If (.Name = strFormName) Then
                iCounter = iCounter + 1
            End If
        End With
    Next
    If (iCounter > 0) Then
        For i = 1 To iCounter
            DoCmd.Close acForm, strFormName, acSaveNo
        Next
    End If
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    相关资源
    最近更新 更多