在记录集中添加新列

时间:2018-08-14 12:54:18

标签: excel database vba recordset

我正在为Excel数据库创建vba宏。该数据库涉及许多人以及他们在每个项目上花费的时间。每当有新用户时,都会添加一个新列。 因此,我尝试使用rs.Fields.Append,但无法正常工作。 :(您能帮我吗?

Sub AjoutEnregistrement()

Dim cnn As ADODB.Connection
Dim rs As New ADODB.Recordset
Dim Project As String
Dim MyCheck As Boolean
Set cnn = New ADODB.Connection
Dim i As Variant
MyFile = "D:\Users\X\Documents\Checkin__2018.xlsm"
LoginID = "A01825112"
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
Fichier & ";Extended Properties='Excel 12.0;HDR=No'"

Set rs = New ADODB.Recordset
rs.Open "SELECT * from [AUGUST$] ", cnn, adOpenDynamic, adLockOptimistic
rs.Fields.Append "LoginID"
rs.AddNew

rs.Update
rs.Close
cnn.Close
End Sub

3 个答案:

答案 0 :(得分:0)

Excel不是数据库,您无意以此方式进行交互。 ADODB记录集使您可以在Excel中读取记录集/从Excel中写入记录集,但是它们并不意味着可以通过VBA进行更新。据我所知,您在这里尝试做的事是不可能的。听起来,Access确实比Excel更好地满足了您的需求。

如果必须使用Excel,则应直接执行您要执行的操作。也就是说,在电子表格中添加一列。

给定一个工作表和新列的标题,您可以使用以下子项来实现

Sub addHeader(ws As Worksheet, newColHeader As String)
    Dim lastCol As Long

    lastCol = ws.Cells(1, ws.columns.Count).End(xlToLeft).column
    ws.Cells(1, lastCol + 1).Value = newColHeader
End Sub

在您的示例中,您将使用

addHeader Workbooks("Checkin__2018.xlsm").Worksheets("AUGUST$"), LoginID

答案 1 :(得分:0)

实际上,您可以在VBA中将字段添加到数据库中-必须将其关闭-您需要在打开数据库之前追加新字段。参见下面的示例

函数popdatabase() 设置db_00 = CreateObject(“ ADODB.Recordset”) 使用db_00     .Fields.Appends“ Ian1”,12     .Fields.Appends“ Ian2”,12     。打开     。添新     !an1 = 6     !an2 = 8     。添新     !an1 = 5     !an2 = 7     .MoveFirst'。行(0) 结尾为

执行不执行db_00.EOF     MsgBox db_00(0)&“&db_00(1)     db_00.MoveNext 循环

结束功能

答案 2 :(得分:-1)

打开RecordSet后,不能将列添加到ADODB RecordSet中。 Josh的回答很好-在Excel中添加该列并重新查询。