在VBA

时间:2017-02-11 17:06:36

标签: vba ms-access access-vba connect

VBA中的以下代码用于连接Access数据文件:

Public Const sConnect As String = "Provider = Microsoft.ACE.OLEDB.12.0;" & _
                              "Data Source = D:\data.accdb"

我正在尝试使用ActiveWorkbook.PathCurDir()等函数从MS Access设置数据源的目录:

Public data_source As String
data_source = ThisWorkbook.Path & Application.PathSeparator & "data.accdb"

然后:

Public Const sConnect As String = "Provider = Microsoft.ACE.OLEDB.12.0;" & _
                                  "Data Source = data_source "

但它没有用,程序说“无效的外部程序”。看来ActiveWorkbook.Path只能在Sub中运行?有没有办法正确地做到这一点?非常感谢你。

1 个答案:

答案 0 :(得分:0)

常数必须是恒定的。这意味着你不能在常量中使用任何具有运行时状态的东西。公共可访问成员(在过程外声明的变量)也是如此 - VBA没有“静态构造函数”的概念,因此您无法将模块级变量的初始状态设置为需要函数调用的任何内容(有一些例外)。

如果需要动态设置连接字符串,只需在运行时构建它。将常量部分放在Const ...

Public Const provider As String = "Provider = Microsoft.ACE.OLEDB.12.0;" & _
                                  "Data Source = "

...并在建立连接之前附加数据源:

'Inside the procedure you create the connection from.
Dim source As String
source = ThisWorkbook.Path & Application.PathSeparator & "data.accdb"

Dim conString As String
conString = provider & source
'Use conString to create your connection.