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

使用ADODB从关闭工作簿取数时,如何合并两个单元格内容至主表?

使用ADODB合并导入Excel单元格内容

我有一个主工作簿,想用ADODB从另一个目标工作簿导入数据,需要把目标工作簿里两个单元格的内容合并后,存入主工作簿的单个单元格中。我参考WiseOwl的YouTube视频写了基础代码并做了调整,现在需要技术帮助。

当前代码

Option Explicit

Sub ImportDataFromFinishedTravelRequest() 
    Dim cn As ADODB.Connection 
    Dim file As FileDialog 
    Dim sItem As String 
    Dim GetFile As String 
    Dim rs As ADODB.Recordset 
    Dim unusedRow As Long
   
    '确定下一个空行
    With Sheets("NEW TR Matrix")
        unusedRow = .Range("A" & .Rows.Count).End(xlUp).Row + 1
    End With

    '选择要导入数据的文件
    Set file = Application.FileDialog(msoFileDialogFilePicker)
    With file
        .Title = "选择文件"
        .AllowMultiSelect = False
        '.InitialFileName = strPath
        If .Show <> -1 Then GoTo NextCode
        sItem = .SelectedItems(1)
    End With
NextCode: 
    GetFile = sItem 
    Set file = Nothing

    Sheet1.Range("A1").CurrentRegion.Offset(1, 0).Clear

    Set cn = New ADODB.Connection

    cn.ConnectionString = _
    "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=" & GetFile & ";" & _
    "Extended Properties='Excel 12.0 Xml;HDR=No';"

    cn.Open

        Set rs = New ADODB.Recordset
        rs.ActiveConnection = cn
        rs.Source = "SELECT * FROM [$J14:J14]" & "SELECT * FROM [$J15:J15]"
        rs.Open

        '选择主工作表中要写入数据的单元格
        Sheet1.Range("G" & unusedRow).CopyFromRecordset rs

        rs.Close

    cn.Close

End Sub

问题分析与修复方案

当前代码用两个独立SELECT语句会返回两行记录,CopyFromRecordset会将它们写入两个单元格,无法实现合并需求。需要在SQL查询中直接拼接两个单元格的内容,返回单个值。

修改后的核心逻辑

将原rs.Source语句替换为:

rs.Source = "SELECT F1 & ' ' & F2 FROM (SELECT * FROM [$J14:J15])"
  • 因HDR=No,OLEDB用F1、F2指代查询范围的第一、第二列(J14对应F1,J15对应F2)
  • 子查询将两个单元格转为一行的两列,主查询拼接这两个字段,返回单个合并值
  • 可根据需求调整分隔符,比如用', '替换' '实现逗号分隔

完整修改代码

Option Explicit

Sub ImportDataFromFinishedTravelRequest() 
    Dim cn As ADODB.Connection 
    Dim file As FileDialog 
    Dim sItem As String 
    Dim GetFile As String 
    Dim rs As ADODB.Recordset 
    Dim unusedRow As Long
   
    '确定下一个空行
    With Sheets("NEW TR Matrix")
        unusedRow = .Range("A" & .Rows.Count).End(xlUp).Row + 1
    End With

    '选择要导入数据的文件
    Set file = Application.FileDialog(msoFileDialogFilePicker)
    With file
        .Title = "选择文件"
        .AllowMultiSelect = False
        '.InitialFileName = strPath
        If .Show <> -1 Then GoTo NextCode
        sItem = .SelectedItems(1)
    End With
NextCode: 
    GetFile = sItem 
    Set file = Nothing

    '按需保留:若无需清空历史数据可注释此行
    'Sheet1.Range("A1").CurrentRegion.Offset(1, 0).Clear

    Set cn = New ADODB.Connection

    cn.ConnectionString = _
    "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=" & GetFile & ";" & _
    "Extended Properties='Excel 12.0 Xml;HDR=No';"

    cn.Open

        Set rs = New ADODB.Recordset
        rs.ActiveConnection = cn
        '拼接J14和J15的内容为单个字段
        rs.Source = "SELECT F1 & ' ' & F2 FROM (SELECT * FROM [$J14:J15])"
        rs.Open

        '将合并后的值写入单个单元格
        Sheet1.Range("G" & unusedRow).CopyFromRecordset rs

        rs.Close

    cn.Close

End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 05:32:47