我正在为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
答案 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中添加该列并重新查询。