如何使用ADO从WEEKLY的访问中拉记录

问题描述 投票:0回答:1

我正在尝试创建一个宏,该宏将每周从访问Excel文件中导出新记录。目前,我的代码已将其添加到Excel文件中,但如何才能仅更新文件中已存在的图纸?

Const ConStrAccess As String = "xxxx;"

Sub CopyDataFomDatabase()

    Dim BrokerConn As ADODB.Connection
    Dim BrokerData As ADODB.Recordset
    Dim BrokerField As ADODB.Field

    Set BrokerConn = New ADODB.Connection
    Set BrokerData = New ADODB.Recordset

    BrokerConn.ConnectionString = ConStrAccess
    BrokerConn.Open

    On Error GoTo CloseConnection

    With BrokerData
        .ActiveConnection = BrokerConn
        .Source = "SELECT * FROM xxxxx;"
        .LockType = adLockReadOnly
        .CursorType = adOpenForwardOnly
        .Open
    End With

    On Error GoTo CloseRecordset

    Worksheets.Add

    For Each BrokerField In BrokerData.Fields
        ActiveCell.Value = BrokerField.Name
        ActiveCell.Offset(0, 1).Select
    Next BrokerField

    Range("A1").Select
    Range("A2").CopyFromRecordset BrokerData
    Range("A1").CurrentRegion.EntireColumn.AutoFit

CloseRecordset:
    BrokerData.Close

CloseConnection:
    BrokerConn.Close
excel vba ms-access ado
1个回答
1
投票

如果您已经知道工作表的名称,则只需在下面的代码中指定名称即可,而不是Sheet1。如果不存在,它将创建它。如果将其保留为空,则将在运行此代码的工作簿中选择活动的工作表。

注意:我假设这将在保存结果的工作簿上运行。如果不是这种情况,则需要用ThisWorkbook替换ActiveWorkbook

Const ConStrAccess As String = "xxxx;"

Const sheetName As String = "Sheet1"

Sub CopyDataFomDatabase()

    Dim BrokerConn As ADODB.Connection
    Dim BrokerData As ADODB.Recordset
    Dim BrokerField As ADODB.Field

    Set BrokerConn = New ADODB.Connection
    Set BrokerData = New ADODB.Recordset

    BrokerConn.ConnectionString = ConStrAccess
    BrokerConn.Open

    On Error GoTo CloseConnection

    With BrokerData
        .ActiveConnection = BrokerConn
        .Source = "SELECT * FROM xxxxx;"
        .LockType = adLockReadOnly
        .CursorType = adOpenForwardOnly
        .Open
    End With

    On Error GoTo CloseRecordset

    Dim selectedWorksheet As Worksheet

    'If no name is given it will select the active one
    If sheetName = vbNullString Then
        Set selectedWorksheet = ThisWorkbook.ActiveSheet

    'If the sheet with this name does not exist, it will be created and activated
    'For checking if it exists: https://stackoverflow.com/a/44130825/
    ElseIf WorksheetFunction.IsErr(Evaluate("'" & sheetName & "'!A1"))    Then        
        Set selectedWorksheet = ThisWorkbook.Sheets.Add()
        selectedWorksheet.Name = sheetName
        selectedWorksheet.Activate

    'Simply actives the sheet   
    Else
        Set selectedWorksheet = ThisWorkbook.Worksheets(sheetName)
        selectedWorksheet.Activate

    End If

    For Each BrokerField In BrokerData.Fields
        ActiveCell.Value = BrokerField.Name
        ActiveCell.Offset(0, 1).Select
    Next BrokerField

    Range("A1").Select
    Range("A2").CopyFromRecordset BrokerData
    Range("A1").CurrentRegion.EntireColumn.AutoFit

CloseRecordset:
    BrokerData.Close

CloseConnection:
    BrokerConn.Close
© www.soinside.com 2019 - 2024. All rights reserved.