我正在尝试创建一个宏,该宏将每周从访问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
如果您已经知道工作表的名称,则只需在下面的代码中指定名称即可,而不是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