VBA-SQL动态数据源设置问题:选中文件路径未被识别如何解决?
解决VBA中动态文件路径无法在ADODB连接字符串中识别的问题
你的核心问题是连接字符串里把变量Filename当成了固定字符串,没有将用户选中的实际文件路径插入到连接字符串中。另外还需要补充未选中文件的容错处理,避免后续代码报错。
修正后的完整代码
Sub copydatafromMainWS() Dim Filename As String Dim wss As Worksheet With Application.FileDialog(msoFileDialogOpen) .AllowMultiSelect = False .InitialFileName = "C:\Users\PC\Documents\" If .Show = True Then Filename = .SelectedItems(1) Debug.Print Filename Else ' 用户未选中文件,直接退出 Exit Sub End If End With Dim conn As ADODB.Connection, rst As ADODB.Recordset Set wss = ThisWorkbook.Sheets("Dart") wss.Range("A1").CurrentRegion.Clear Set conn = New ADODB.Connection ' 关键修改:将变量Filename插入到连接字符串中,而非写死字符串"Filename" conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" _ & "Data Source=" & Filename & ";" _ & "Extended Properties='Excel 12.0 Xml;HDR=YES';" conn.Open Set rst = New ADODB.Recordset rst.ActiveConnection = conn rst.Source = "SELECT * FROM [Sheet1$]" rst.Open wss.Range("A1").CopyFromRecordset rst rst.Close conn.Close End Sub
关键修改说明
- 连接字符串拼接:把原代码中
"Data Source=Filename;"改成"Data Source=" & Filename & ";",这样VBA会把变量Filename存储的实际文件路径插入到连接字符串中,而不是把"Filename"当成路径的一部分。 - 增加容错处理:在用户未选中文件时(
.Show = False),执行Exit Sub直接退出子程序,避免后续因Filename为空导致的连接错误。
内容的提问来源于stack exchange,提问作者JeffCh
相关产品推荐
相关产品推荐

