VBA代码从Excel循环和更新MS Access数据库列

v

背景:我有一个Excel电子表格,可以从MS Access数据库中检索数据。该代码工作正常。它检索具有“注释”字段为空白的记录。用户更新Excel中的注释字段,然后单击一个按钮。

询问:单击按钮后,VBA代码必须遍历我的excel工作表中的所有检索到的记录,并且那些在excel中标记为“已完成”的记录必须更新数据库中“评论字段”中的相同注释。

我看了这篇文章,戈德·汤普森Gord Thompson)发布了一些可能适合我的情况的代码。除了我不知道如何定制适合我的代码:(链接-VBA代码可以从Excel更新/创建新记录到Access

**我的数据库结构快照,并在此**链接中表现出色

擅长: 在此处输入图片说明

数据库: 在此处输入图片说明

这段代码会工作吗

Sub Update()
Dim cn As ADODB.Connection, rs As ADODB.Recordset
Dim xComments As String
Dim xType As String
Dim xIBES_Ticker As String
Dim xEditor As String
Dim xPRD_Year As String
Dim xPRD_Month As String
Dim xEvent_Date As String
Dim xReporting As String
Dim xNotes As String

' connect to the Access database
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; " & _
"Data Source=C:\Database1.mdb;"

' open a recordset
Set rs = New ADODB.Recordset
rs.Open "tablename", cn, adOpenKeyset, adLockOptimistic, adCmdTable

Range("A2").Activate  ' row 1 contains column headings
Do While Not IsEmpty(ActiveCell)

'filter all columns and update all records back instead of looking for those marked with "complete"
'guessing this will be easier to do
rs.Filter = "Type='" & xType & "' AND IBES_Ticker='" & xIBES_Ticker & "' AND Editor='" & xEditor & "' AND PRD_Year='" & xPRD_Year & "' AND PRD_Month='" & xPRD_Month & "' AND Event_Date='" & xEvent_Date & "' AND Reporting='" & xReporting & "' AND Notes='" & xNotes & "' AND Comments='" & xComments & "' "
If rs.EOF Then
Debug.Print "No existing records found..."
rs.Filter = ""
Else
Debug.Print "Existing records found..."
End If

rs("Type").Value = xType
rs("IBES_Ticker").Value = xIBES_Ticker
rs("Editor").Value = xEditor
rs("PRD_Year").Value = xPRD_Year
rs("PRD_Month").Value = xPRD_Month
rs("Event_Date").Value = xEvent_Date
rs("Reporting").Value = xReporting
rs("Notes").Value = xNotes
rs("Comments").Value = xComments

rs.Update
Debug.Print "...record update complete."

ActiveCell.Offset(1, 0).Activate  ' next cell down
Loop
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
弗洛里斯

我不确定您正在努力适应哪些方面。以下内容可能会有所帮助:

Sub update()
Dim r as Range
Set r = [J2]   ' shorthand for Range("J2")
While r.offset(0, -3).Value > 0
  If r.Value = "Complete" Then
    ' take this record and put it in the DB
  End If
Set r = r.offset(1,0) ' go to the next row
Wend

End Sub

那是您遇到困难的地方吗?如果还有其他问题,请发表评论。

更新我没有Access,因此提供更多指导有点困难。但是,我发现以下代码片段可用于更新Access中的记录(请参阅http://msdn.microsoft.com/zh-cn/library/office/ff845201(v=office.15).aspx

UPDATE tblCustomers 
    SET Email = 'None' 
    WHERE [Last Name] = 'Smith' 

我认为我们可以将其用于上述操作,并执行以下操作:

Sub update()
Dim cn As ADODB.Connection, rs As ADODB.Recordset

' connect to the Access database
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; " & _
  "Data Source=C:\Database1.mdb;"

' open a recordset
Set rs = New ADODB.Recordset
rs.Open "tablename", cn, adOpenKeyset, adLockOptimistic, adCmdTable

Dim r as Range
Set r = [J2]   ' shorthand for Range("J2")

While r.offset(0, -3).Value > 0
  If r.Value = "Complete" Then
    ticker = r.offset(0, -7)
    notes = r.offset(0, -1)

    ' create the query string - something like this?
    qString = "UPDATE table name SET Notes='" & notes & "' WHERE IBES_Ticker='" & ticker
    ' now put it in the database:
    cn.Execute qString, dbFailOnError

  End If
  set r = r.offset(1,0) ' go to the next row
Wend

' now close your connections properly…

rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

重置MS Access数据库中的身份列

来自分类Dev

如何从 Excel VBA 移动到我的 Access 数据库中的下一列

来自分类Dev

MS Access数据库错误

来自分类Dev

MS Access防止数据库锁定

来自分类Dev

MS Access数据库SQL查询

来自分类Dev

插入到ms Access数据库

来自分类Dev

MS Access 数据库监控查询

来自分类Dev

如何使用VBA创建空白的MS Access数据库?

来自分类Dev

如何使用VBA创建空白的MS Access数据库?

来自分类Dev

在VBA中获取MS Access数据库的版本

来自分类Dev

在VBA中获取MS Access数据库的版本

来自分类Dev

从VBA SQL语法错误将MS EXCEL转换为MS ACCESS .accdb数据库

来自分类Dev

在MS Access中访问数据库时更新查询

来自分类Dev

从VB 2015更新MS Access数据库

来自分类Dev

MS Access数据库是/否更新不正确

来自分类Dev

从ms-access数据库中选择具有链接表的列

来自分类Dev

从具有链接表的ms-access数据库中选择一列

来自分类Dev

MS Access数据库和MySql之间同步

来自分类Dev

仅更新Access数据库中的一列值-VB

来自分类Dev

此代码更新 MS Access 中的数据库值有什么问题吗?

来自分类Dev

如果表不在Excel VBA的Access数据库中

来自分类Dev

使用vba从Access数据库中提取到excel

来自分类Dev

使用Excel更新Access数据库-最佳方法

来自分类Dev

VBA全局变量和Access数据库

来自分类Dev

无法更新数据库中的列

来自分类Dev

从MS ACCESS 2007数据库提取SSIS 2012数据

来自分类Dev

使用Python将数据插入MS Access数据库

来自分类Dev

MS Access数据库使用VBA和SQL查询在列上插入值

来自分类Dev

优化将数据插入Access数据库代码中