excel - 通过 Excel VBA 在 Excel 记录集中插入一行
问题描述
我试图在记录集的最后一行插入一些值,在这种情况下,它是一个用作我的数据库的 Excel 文件。我有下面的代码,用于将文本框的值插入到 excel 记录集的最后一行。但是,它没有创建插入值的新表行。
Sub CreaterRow()
Dim strFile As String
Dim strConnect As String
Dim strSQL As String
Dim lngCount As Long
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
strFile = "C:\Excel\Test.xlsx"
strConnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile & _
";Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
cnn.Open ConnectionString:=strConnect
strSQL = "SELECT [ID] FROM [Sheet1$]"
rst.Open Source:=strSQL, ActiveConnection:=cnn, CursorType:=adOpenForwardOnly, Options:=adCmdText
With rst
.AddNew
.Fields("ID").Value = tbx_ID.Value 'Inserting this in the recordset did not create a new row
.Update
End with
rst.Close
cnn.Close
End Sub
表如何自动创建一个新行,其中包含插入到 lastrow 中的值?谢谢你。
解决方案
这对我有用。您需要有正确的光标和锁定类型。
Sub CreaterRow()
Dim strFile As String
Dim strConnect As String
Dim strSQL As String
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
strFile = ThisWorkbook.Path & "\Data.xlsx"
strConnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=""" & strFile & _
""";Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
cnn.Open ConnectionString:=strConnect
strSQL = "SELECT [ID] FROM [Sheet1$]"
rst.Open strSQL, cnn, adOpenKeyset, adLockOptimistic
With rst
.AddNew
.Fields("ID").Value = "ID00020"
.Update
End With
rst.Close
cnn.Close
End Sub
编辑:如果您从 Table/Listobject 查询数据,则附加记录不会调整列表的大小以包含添加的记录。请参阅:ADO:Excel:是否可以在表名上打开记录集?
EDIT2:如果您使用命名范围而不是 ListObject,那么您可以按名称查询它(而不是使用工作表名称),并且当您插入新行时范围将调整。
推荐阅读
- intellij-idea - IntelliJ IDEA 无法打开“文件->打开 url”
- ruby-on-rails - 从 sqlite 迁移到 postgresql 数据库后的 Rails-Page 渲染问题
- javascript - 如何在 mousemove 事件后 1 分钟运行函数?
- java - 关于 ConcurrentHashMap 的 putVal 方法的源代码的混淆
- angular - Angular 6 + SASS 文件夹结构
- php - 从 dir 获取所有图像并使用 php 两两排序
- azure - 使用 Graph API 将 AD 组分配给 Azure AD 应用程序角色
- php - 为什么我得到数组 foreach 循环?
- vue.js - 我部署的 Vue 应用程序在本地工作,但不在远程服务器上
- php - PHP - 从保存的下拉列表中获取值