如何在一个项目中设置 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")
感谢大家的宝贵意见!
背景
称为 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")
感谢大家的宝贵意见!