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

时间:2017-11-22 21:28:27

标签: vba access-vba ms-access-2010

背景

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

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

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

Global Const APP_TABLES_TO_BACKUP = "tbl1, tbl2, tbl5"

问题

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

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

关于如何做到这一点的任何想法?

到目前为止......

我搜索并发现了Chip Pearson的Understanding Scope,但还没有完全了解如何设置和引用全局变量。

在应用程序的即时窗口中,我可以键入?APP_TABLES_TO_BACKUP并检索表,但我似乎无法看到如何从VCS数据库引用相同的变量,因此可以在子例程中使用它

任何想法?

2 个答案:

答案 0 :(得分:1)

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

如何?请参阅this answer

确保两个数据库之间的模块和功能名称不会发生冲突。然后,您可以使用MyModule.APP_TABLES_TO_BACKUP引用您的const,或者如果您有多个具有相同模块和常量名称的项目,MyProject.MyModule.APP_TABLES_TO_BACKUP

答案 1 :(得分:0)

由于我之前的帖子显然几天前没有发现......

在进一步搜索之后,我遇到了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即时窗口属性。

例如:

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

通过vba

可以轻松地检索该属性

CurrentDb.Properties("My Property Name")

感谢大家提供可行的投入!