Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Outlook中选择要导入Excel的文件夹_Excel_Vba_Outlook - Fatal编程技术网

如何在Outlook中选择要导入Excel的文件夹

如何在Outlook中选择要导入Excel的文件夹,excel,vba,outlook,Excel,Vba,Outlook,下面的代码用于从Outlook中的文件夹中获取联系人,并将其保存到Excel中 用户选择的联系人文件夹不是默认的联系人文件夹 当我使用默认的contacts文件夹运行代码时,它会工作 当我尝试使用PickFolder时,它会选择作为变量的文件夹,但不会选择任何联系人 我把**放在了不起作用的地方 Private Sub OutlookImport_Click() Dim objOutlook 'Outlook object containing contact information Dim

下面的代码用于从Outlook中的文件夹中获取联系人,并将其保存到Excel中

用户选择的联系人文件夹不是默认的联系人文件夹

当我使用默认的contacts文件夹运行代码时,它会工作

当我尝试使用PickFolder时,它会选择作为变量的文件夹,但不会选择任何联系人

我把**放在了不起作用的地方

Private Sub OutlookImport_Click()

Dim objOutlook 'Outlook object containing contact information
Dim objNamespace 'Interface definition between Excel and Outlook
Dim colContacts 'Collection of contacts in Outlook for harvesting

Dim objExcel As Worksheet 'Worksheet containing extract of Outlook contacts
Dim i As Integer 'Row counter
Dim objContact 'VCard object within Outlook Contacts

'Prompt user to select folder containing contacts for harvesting

Dim OlApp As New Outlook.Application 'Instance of Microsoft Outlook application
Dim NS As Outlook.Namespace
Dim FolderChosen As Outlook.MAPIFolder 'Folder selected by user

Set NS = OlApp.GetNamespace("MAPI")
Set FolderChosen = NS.PickFolder

On Error Resume Next
 Set objOutlook = CreateObject("Outlook.Application")
 Set objNamespace = objOutlook.GetNamespace("MAPI")
 Set objExcel = ActiveWorkbook.Sheets("Outlook Contacts")

 **
 'Set colContacts = objNamespace.GetDefaultFolder(olFolderContacts).Items 'using this line works
 Set colContacts = objNamespace.GetFolder(FolderChosen).Items 'using this line doesn't
 **

 'Set objExcel = CreateObject("Excel.Application")
 'objExcel.Visible = True
 'Set objWorkbook = objExcel.Workbooks.Add()
 'Set objWorksheet = objWorkbook.Worksheets(3)

 'Populate the titles
  objExcel.Cells(1, 1) = "Client Book ID"
  objExcel.Cells(1, 2) = "Contact ID"
  objExcel.Cells(1, 3) = "Title"
  objExcel.Cells(1, 4) = "First Name"
  objExcel.Cells(1, 5) = "Middle Name"
  objExcel.Cells(1, 6) = "Last Name"
  objExcel.Cells(1, 7) = "Suffix"

  objExcel.Cells(1, 8) = "Job Title"
  objExcel.Cells(1, 9) = "Department"
  objExcel.Cells(1, 10) = "CompanyName"

  i = 2

  For Each objContact In colContacts

 ' objExcel.Cells(1, 1) = "Client Book ID"
 'objExcel.Cells(1, 2) = "Contact ID"

  objExcel.Cells(i, 3).Value = objContact.Title
  objExcel.Cells(i, 4).Value = objContact.FirstName
  objExcel.Cells(i, 5).Value = objContact.MiddleName
  objExcel.Cells(i, 6).Value = objContact.LastName
  objExcel.Cells(i, 7).Value = objContact.Suffix

  objExcel.Cells(i, 8).Value = objContact.JobTitle
  objExcel.Cells(i, 9).Value = objContact.Department
  objExcel.Cells(i, 10).Value = objContact.CompanyName

  i = i + 1
  If i > 50 Then Stop - 'just in to make it run quicker

  Next

  End Sub

“错误时继续下一步”应尽可能紧跟“错误时转到0”。在两者之间争取零线

Set colContacts=folderselected.Items(原始文件可能使用了GetFolder函数?)

验证FolderSelected是否为contacts文件夹。
如果FolderSelected.DefaultItemType=olContactItem,则命名空间对象没有GetFolder方法

有GetFolderFromID,但它接受文件夹条目id(字符串)和(可选)存储条目id

为什么不直接使用FolderSelected.Items呢


作为一般性评论,请避免使用“出错后继续下一步”。当出现错误时,有一个很好的理由。至少,您可以看到这是什么错误。在您的情况下,哪一个是非常有用的“对象不支持此属性或方法:'Namespace.GetFolder'”

为什么您认为在随机文件夹中可以找到联系人?我从未在“联系人”文件夹外找到联系人。@Tony Dallimore我将让用户创建联系人,然后将他们的联系人放入一个特殊的“备份文件夹”(文件、新文件夹、联系人),并将备份与公司提供的版本进行比较-我们正在尝试将公司的CRM系统与他们的Outlook联系人连接起来。我不想依赖用户正确地获取文件夹名称-无论我告诉他们什么,一个或多个用户都会将其称为稍有不同的名称…在运行PickFolder方法后,是否检查DefaultItemType以确保所选文件夹是Contacts文件夹?