You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

关键修改说明

  1. 连接字符串拼接:把原代码中"Data Source=Filename;"改成"Data Source=" & Filename & ";",这样VBA会把变量Filename存储的实际文件路径插入到连接字符串中,而不是把"Filename"当成路径的一部分。
  2. 增加容错处理:在用户未选中文件时(.Show = False),执行Exit Sub直接退出子程序,避免后续因Filename为空导致的连接错误。

内容的提问来源于stack exchange,提问作者JeffCh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 11:55:22