替换工作表内容而不打开它

时间:2017-05-02 09:06:35

标签: excel vba ado

我正在使用ADO模型从各种关闭工作簿中收集数据。这很好用。

我现在想把这些数据放在另一个已关闭的工作簿中,但我希望能够删除之前的工作表内容。

如何在不使用VBA打开工作簿的情况下删除工作表内容?

如何将记录集转移到已关闭的wb? /使用ADO将一个表复制到另一个表?

编辑:

我能够在新工作表中将一些数据从一个工作簿插入另一个工作簿,但我无法在现有工作表中输出数据。

当我尝试INSERT INTO语句时,会引发错误。只读更新不可能,数据库或对象。

以下是代码:

Sub tranfert()

    Dim ExcelCn As ADODB.Connection
    Dim ExcelRst As ADODB.Recordset
    Dim Cn As New ADODB.Connection
    Dim Rst As New ADODB.Recordset
    Dim maBase As String, maFeuille As String
    Dim maTable As String, NomClasseur As String
    Dim nbEnr As Long

    maBase = "C:\Users\Lichar\Documents\Base.xlsx"
    maTable = "[table$]"
    NomClasseur = "C:\Users\Lichar\Documents\Target.xlsx"
    maFeuille = "Sheet2"


    'Connection to base file
    Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                   "Data Source=" & maBase & ";" & _
                   "Extended Properties=""Excel 12.0;HDR=NO;"""
    'Requète dans la table Access
    Rst.Open "SELECT * FROM " & maTable, Cn

    'Connection to target file
    Set ExcelCn = New ADODB.Connection
    ExcelCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                   "Data Source=" & NomClasseur & ";" & _
                   "Extended Properties=""Excel 12.0;HDR=NO;"""

    '-----------------------------------------
    'Create a new sheet and output data
    Cn.Execute "SELECT * INTO [Excel 12.0;" & _
        "Database=" & NomClasseur & "].[" & maFeuille & "] FROM " & maTable, nbEnr

    '-----------------------------------------
    'Trying to ouput data in existing sheet
    'Cn.Execute "INSERT INTO [sheet$] IN '' [Excel 12.0;" & _
    '    "Database='" & NomClasseur & "'] SELECT * FROM " & maTable, nbEnr


    Rst.Close
    Cn.Close
    Set ExcelRst = Nothing
    Set ExcelCn = Nothing

**编辑2 **

我使用INSERT INTO找到了部分解决方案。这是一个工作代码,它从表格中的source.xlsx获取数据并将其输出(或附加)在工作表中的target.xlsx中:

Sub SQLQUERY()
    Dim Cn As ADODB.Connection
    Dim QUERY_SQL As String
    Dim Rst As ADODB.Recordset
    Dim ExcelCn As ADODB.Connection
    Dim ExcelRst As ADODB.Recordset

    SourcePath = "C:\Users\BVR\Documents\Source.xlsx"
    TargetPath = "C:\Users\BVR\Documents\Target.xlsx"

    CHAINE_HDR = "[Excel 12.0 MACRO;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;'] "


    Set Cn = New ADODB.Connection

    STRCONNECTION = _
    "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source='" & SourcePath & "';" & _
    "Mode=Read;" & _
    "Extended Properties=""Excel 12.0 Macro;"";"


    QUERY_SQL = _
    "SELECT * FROM [table$] "


    Cn.Open STRCONNECTION

    Set ExcelCn = New ADODB.Connection
    ExcelCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                   "Data Source=" & TargetPath & ";" & _
                   "Extended Properties=""Excel 12.0;HDR=NO;"""

    Cn.Execute "INSERT INTO [sheet$] IN '" & TargetPath & "' 'Excel 12.0;' " & QUERY_SQL


    '--- Fermeture connexion ---
    Cn.Close

End Sub

我注意到了2个问题。首先如果我的一个字段名称包含"。"在其中,代码将生成一个错误,指出INSERT INTO包含一个未知的字段名称。这是有问题的。 其次我不能只选择我想要的列。如果我"选择[F1],[F2] ..."错误将引发说明存在循环引用。 (但我可以使用字段名称选择我想要的列)

0 个答案:

没有答案