如何在一个项目中设置 VBA 全局变量并在另一个项目中使用?

How to set a VBA global variable in one project & use in another project?

背景

称为 VCS(项目名称 = VCS)的版本控制数据库用于各种版本控制任务。

各种其他应用程序数据库都设置了 VCS 作为参考。

在这些应用程序数据库中,设置了一个全局变量来标识要备份其中的哪些表:

Global Const APP_TABLES_TO_BACKUP = "tbl1, tbl2, tbl5"

问题

问题是,如何从 VCS 项目中引用这个 APP_TABLES_TO_BACKUP常量?

因为每个应用程序都有自己的此值设置,所以在应用程序的模块中设置该值并从 VCS 数据库项目中调用该值是有意义的。

关于如何做到这一点有什么想法吗?

到目前为止...

我搜索并找到了 Chip Pearson 的 Understanding Scope,但不太了解如何设置和引用全局变量。

在应用程序的 window 中,我可以键入 ?APP_TABLES_TO_BACKUP 并检索表格,但我似乎看不到如何从 VCS 数据库中引用相同的变量,以便它可以在那里的子程序中使用。

有什么想法吗?

您可以在 VCS 数据库中添加对外部数据库的引用。

怎么样?参见

确保两个数据库之间的模块和函数名称不冲突。然后你可以通过使用 MyModule.APP_TABLES_TO_BACKUP 来引用你的常量,或者如果你有多个具有相同模块和常量名称的项目,MyProject.MyModule.APP_TABLES_TO_BACKUP

因为我之前的 post 几天前显然没有通过...

进一步搜索后,我发现 Paul Murray's custom database properties 效果很好。

通过一些调整,我创建了一个包含通用 属性 添加、删除方法的模块。

' ---------------------------------
' FUNCTION:     AddDbProperty
' Description:  add custom properties to a database application
' ---------------------------------
Public Function AddDbProperty(DbProperty As String, _
                    DbPropertyValue As String, _
                    Optional DbPropertyType As Long = DB_TEXT, _
                    Optional DbFilename As String = "Current")
On Error GoTo Err_Handler

    Dim db As DAO.Database
    Dim prop As Property

    If DbFilename = "Current" Then
        Set db = DBEngine(0)(0)
    Else
        Set db = OpenDatabase(DbFilename)
    End If

    'add the property
    Set prop = db.CreateProperty(DbProperty, DbPropertyType, DbPropertyValue)
    db.Properties.Append prop

Exit_Handler:
    db.Close
    Set db = Nothing
    Exit Function

Err_Handler:
    Select Case Err.Number
      Case Else
        MsgBox "Error #" & Err.Number & ": " & Err.description, vbCritical, _
            "Error encountered (#" & Err.Number & " - AddDbProperty[mod_Dev_Properties])"
    End Select
    Resume Exit_Handler
End Function

' ---------------------------------
' FUNCTION:     RemoveDbProperty
' Description:  remove custom properties from a database applciation
' ---------------------------------
Public Function RemoveDbProperty(DbProperty As String, _
                    Optional DbFilename As String = "Current")
On Error GoTo Err_Handler

    Dim db As DAO.Database

    If DbFilename = "Current" Then
        Set db = DBEngine(0)(0)
    Else
        Set db = OpenDatabase(DbFilename)
    End If

    'remove the property
    db.Properties.Delete DbProperty

Exit_Handler:
    db.Close
    Set db = Nothing
    Exit Function

Err_Handler:
    Select Case Err.Number
      Case Else
        MsgBox "Error #" & Err.Number & ": " & Err.description, vbCritical, _
            "Error encountered (#" & Err.Number & " - RemoveDbProperty[mod_Dev_Properties])"
    End Select
    Resume Exit_Handler
End Function

' ---------------------------------
' FUNCTION:     UpdateDbProperty
' Description:  add custom properties to a database application
' ---------------------------------
Public Function UpdateDbProperty(DbProperty As String, _
                    DbPropertyValue As String, _
                    Optional DbFilename As String = "Current")
On Error GoTo Err_Handler

    Dim db As DAO.Database

    If DbFilename = "Current" Then
        Set db = DBEngine(0)(0)
    Else
        Set db = OpenDatabase(DbFilename)
    End If

    'add the property
    db.Properties(DbProperty) = DbPropertyValue

Exit_Handler:
    db.Close
    Set db = Nothing
    Exit Function

Err_Handler:
    Select Case Err.Number
      Case Else
        MsgBox "Error #" & Err.Number & ": " & Err.description, vbCritical, _
            "Error encountered (#" & Err.Number & " - UpdateDbProperty[mod_Dev_Properties])"
    End Select
    Resume Exit_Handler
End Function

使用 IDE 直接 window 属性可以 added/updated/removed.

例如:

?AddDbProperty("My Property Name","My Property value")

检索 属性 很容易通过 vba

完成

CurrentDb.Properties("My Property Name")

感谢大家的宝贵意见!