在VBA

2017-02-11 30 views
0

在VBA下面的代碼設置數據源目錄用於連接到Access數據文件:在VBA

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

我想設置爲從MS Access數據源中的目錄,通過使用功能像ActiveWorkbook.PathCurDir()

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?有什麼辦法可以正確地做到這一點嗎?萬分感謝。

回答

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. 
+0

它完美。非常感謝! :) –

+0

@Luu Quant-Trung請將上面的解決方案標記爲已接受的解決方案,因爲您可以使用Cominten提供的解決方案解決問題。記住將來也要將其標記爲可接受的解決方案。 –