我希望有人可以使用ADODB方法给我一些指导,以实现我的目标。
简要说明:
当前我在Outlook VBA中有用于搜索电子邮件的代码。如果电子邮件通过标准,则Outlook宏打开 Excel工作簿,将遍历A列以查看ID号是否存在。如果这样做,它将更新其他列(1个或更多列),否则将创建一个新行,并将该行的数据写入A-C列。然后保存并关闭工作簿。
我希望加快该过程,而限制因素是打开excel工作簿(位于共享驱动器上)。我使用了一个简单的ADODB宏来读取另一本工作簿中的数据,并且看到速度有可能提高。我想在这里实现。
我已经能够从Outlook建立到工作簿的连接并将数据放入记录集中。但是我不知道如何在第一列中“循环”查看ID是否存在,以及如何将数据写入工作簿中的列(UPDATE SQL命令?)。
ExcelConnection代码:
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
感谢您的帮助, 瓦格纳
答案 0 :(得分:0)
在您的SELECT
语句中,包含一个WHERE
子句以在A列中搜索ID,如下所示:
SELECT COUNT(*) c
FROM [sourceSheet$sourceRange]
WHERE <ColumnAName> = <ID>
请注意,这是伪代码,就像将字符串分配给szSQL
然后检查结果集中的c
值,如下所示:
If rsData.Fields("c").value = 0 Then
'ID was NOT found, execute SQL INSERT here
Else
'ID was found, execute SQL UPDATE here
End If
即将Excel工作表视为数据库。
当然,如果可以将Access用作数据库(或SQL Server,Oracle或...),那会更好,因为那正是他们的目的。但我知道有时候您只需要了解自己所拥有的东西即可。