将数据从Outlook导出到特定文件中的特定工作表

经过一天的游戏和David Zemens的大量帮助,我终于得到了这个代码在Outlook VBA中工作。 问题:它导出我想要导出的数据,但总是到一个新的工作簿。 它会打开正确的文件(C:\ Users \ George \ Desktop \ gs.xlsx),但数据会转到新文件。 我会问大卫,但他已经帮助过我(而且教过我),所以我不想这样做。 所以,这里是代码:

Sub Application_NewMailEx(ByVal EntryIDCollection As String) 'Excel objects Dim xlApp As Excel.Application Dim xlWB As Excel.Workbook Dim xlSheet As Excel.Worksheet MsgBox "Mail received!" Dim id As Variant 'used to iterate the EntryIDCollection Dim email As Outlook.MailItem 'represents each email item Dim msgText As Variant 'Array used to iterate the "lines" in the email: 'Create an instance of Excel that we can use: Set xlApp = CreateObject("Excel.Application") xlApp.Workbooks.Open FileName:="C:\Users\George\Desktop\gs.xlsx", AddTOMRU:=False, UpdateLinks:=False For Each id In Split(EntryIDCollection, ",") 'Assign a mailItem variable to this email: Set email = Application.Session.GetItemFromID(id) 'Add some logic to ensure you only process the right emails. ' you could use a defined subject and/or sender name, etc. ' MODIFY AS NEEDED If email.Subject = "Report of Property" Then Dim line As Variant 

从这里开始就是我认为我犯了一个错误的地方:

  Set xlWB = xlApp.Workbooks.Add Set xlSheet = xlWB.Worksheets(1) line = xlSheet.Range("A" & xlSheet.Rows.Count).End(-4162).Offset(1).Row '// For Each line In Split(email.Body, vbCrLf) If Left(line, 5) = "Name:" Then xlSheet.Range("B6").Value = Trim(Mid(line, 6)) ElseIf Left(line, 13) = "Time started:" Then xlSheet.Range("A6").Value = Trim(Mid(line, 22)) ElseIf Left(line, 4) = "Sage" Then xlSheet.Range("D6").Value = Trim(Mid(line, 9)) ElseIf Left(line, 8) = "Complete" Then xlSheet.Range("F6").Value = Trim(Mid(line, 20)) ElseIf Left(line, 4) = "Job1" Then xlSheet.Range("G6").Value = Trim(Mid(line, 6)) MsgBox "All Values have been added! Now get to work!" End If Next Else MsgBox "Not Written" End If xlApp.Visible = True Next End Sub 

此代码打开gs.xlsx文件,但将数据放入另一个新的Excel文件中,而不是gs.xlsx文件中的gs表格。 我不知道我要去哪里错。 我是VBA的新手,如果不是帮助,我还是会挠头。 提前致谢。

这行代码中:

 Set xlWB = xlApp.Workbooks.Add 

创build一个新的工作簿并将其添加到现有的工作簿集合。 然后你的代码使用它做它的东西,这就是为什么你总是操纵新添加的工作簿,而不是你以前打开的。

你需要做的是去掉这行,并将xlWB分配给打开的工作簿,就像这样( 注意围绕Open函数的参数添加括号 !):

 Set xlWB = xlApp.Workbooks.Open(Filename:="C:\Users\George\Desktop\gs.xlsx", AddTOMRU:=False, UpdateLinks:=False) 

然后,当您的代码使用xlWB ,它将使用您打开的工作簿。 之前,你的代码是打开你想要的工作簿,但是它没有做什么,因为你没有分配一个“句柄”来访问它。