在 VBA 中设置数据源目录

Set directory for data source in VBA

下面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 "

但它不起作用,程序显示 "Invalid outside procedure"。似乎 ActiveWorkbook.Path 只能在 Sub 中工作?有什么办法可以正确地做到这一点?非常感谢。

常量必须是常量。这意味着您不能使用常量中具有 run-time 状态的任何内容。 public 可访问成员(在过程外部声明的变量)也是如此 - VBA 没有 "static constructor" 的概念,因此您无法设置模块级别的初始状态任何需要函数调用的变量(有少数例外)。

如果需要动态设置连接字符串,只需在运行时构建即可。将常量部分放在 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.