【发布时间】:2020-06-24 03:58:02
【问题描述】:
我希望有人可以使用 ADODB 方法给我一些指导以实现我的目标。
简要说明:
目前我在 Outlook VBA 中有搜索电子邮件的代码。如果电子邮件通过条件 Outlook 宏打开 Excel 工作簿,循环通过列 A 以查看是否存在 ID 号。如果是,它会更新其他列(1 或更多列),如果不是,它会创建一个新行并将数据写入该行的 A-C 列。然后保存并关闭工作簿。
我想加快进程,限制因素是打开 excel 工作簿(位于共享驱动器上)。我使用了一个简单的 ADODB 宏来读取另一个工作簿中的数据,并且已经看到了可能的速度提高。我想在这里实现。
我已经能够从 Outlook 建立到工作簿的连接并将数据放入记录集中。但我不知道如何“循环”第一列以查看 ID 是否存在,以及如何将数据写入工作簿中的列(UPDATE SQL 命令?)。
Excel连接代码:
Public Sub ExcelConnect(msg As Outlook.MailItem, LType As String)
Dim lngrow As Long
Dim SourceFile As Variant 'used
Dim SourceSheet As String 'used
Dim SourceRange As String 'used
SourceFile = "T:\Capstone Proj\TimeStampsOnlyTest.xlsx"
SourceSheet = "Timestamps"
SourceRange = "A2:F500"
Dim rsCon As Object 'used
Dim rsData As Object 'used
Dim szConnect As String ' used
Dim szSQL As String ' used
Dim lCount As Long
If Val(Application.Version) < 12 Then
szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & SourceFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=Yes"";"
Else
szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & SourceFile & ";" & _
"Extended Properties=""Excel 12.0;HDR=Yes"";"
End If
szSQL = "SELECT * FROM [" & SourceSheet$ & "$" & SourceRange$ & "];"
Set rsCon = CreateObject("ADODB.Connection")
Set rsData = CreateObject("ADODB.Recordset")
rsCon.Open szConnect
rsData.Open szSQL, rsCon, 0, 1, 1
'***Need Help implementing a way to find exisiting ID numbers, or if Exisiting = 0 then INSERT new row into worksheet***'
Select Case LType '// Choose which columns based on Type
Case "MDIQE"
' If columnvalue = 0 Then
' Update column value
Case "MDIQ"
' If columnvalue = 0 Then
' Update column value
'
'........
'
Case "MDIF"
' If columnvalue = 0 Then
' Update column value
'
End Select
'Error handing & success messagebox
End sub
感谢您的帮助, 瓦格纳
【问题讨论】: