2011-09-06 65 views
0

我想在Excel VBA中使用ADODB處理.csv文件。我嘗試了一些在網上找到的字符串,但沒有一個似乎起作用。我得到使用文件路徑:.csv的ADODB連接字符串

strVFile = Application.GetOpenFilename("CSV (*.csv), *.csv") 

然後我通過strVFile作爲參數傳遞給子objReport.Load strVFile。該子標題爲:Public Sub Load(ByVal strFilename As String)

然後我嘗試使用字符串進行ADODB連接:

pconConnection.ConnectionString = _ 
      "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFilename & _ 
      ";Extended Properties=""text;HDR=Yes;FMT=Delimited(;)"";Persist Security Info=False" 
    pconConnection.Open 

當我運行宏,選擇CSV文件,有誤差存在的話說,「給定的路徑是不是一個有效的路徑。」我究竟做錯了什麼?

編輯(代碼)

模塊mdlReport

Public Sub Report() 
    Dim objReport As clsReport 


    MsgBox "Please select .csv file", vbInformation + vbOKOnly 
    strVFile = Application.GetOpenFilename("CSV (*.csv), *.csv") 

    If strVFile <> False Then 
     Set objReport = New clsReport 

     objReport.Load strVFile 

    End If 
End Sub 

類clsReport

Private pconConnection As ADODB.Connection 
Private prstRecordset As ADODB.Recordset 

Private Sub Class_Initialize() 
    Set pconConnection = New ADODB.Connection 
    pconConnection.ConnectionTimeout = 40 
End Sub 

Public Sub Load(ByVal strFilename As String) 

    pconConnection.ConnectionString = _ 
      "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFilename & _ 
      ";Extended Properties=""text;HDR=Yes;FMT=Delimited(;)"";Persist Security Info=False" 
    pconConnection.Open 

End Sub 
+0

你可以發佈你的完整代碼,以便我們可以測試它嗎? – JMax

+0

臨時使用'Debug.Print'或'MsgBox'在連接字符串中使用之前立即顯示'strFilename'的值。檢查它是否顯示了所需文件的完整路徑。此外,對於CSV,'Delimited(;)'應該是'Delimited(,)',我認爲 – barrowc

+0

我已經添加了一些代碼,它只是幾行代碼,但它應該顯示我的問題。我試圖看看這條路,看起來沒問題。 – Jandrejc

回答

1

我找到了我的問題的答案。對於文本文件(如Remou所述)Data Source只是文件夾路徑,沒有文件名。此外,而不是使用:

C:\dir\dir2\ 

我不得不使用

C:\\dir\\dir2\\ 

從全路徑獲取文件名:

strFilename = Dir(strFilepath) 

只獲取路徑,沒有文件名:

strFilepath = Left$(strFilepath, InStrRev(strFilepath, "\")) 

改變路徑形式從'\'到'\\'我剛剛使用:

strFilepath = Replace(strFilepath, "\", "\\") 

問題已解決,感謝您的關注。