gpt4 book ai didi

vba - 为什么我不能从集合中获取项目并将其存储在变量中?

转载 作者:行者123 更新时间:2023-12-04 14:44:00 25 4
gpt4 key购买 nike

我有一个收藏,我曾经有一个 String -> MailItem map 。我填充 map ,当我找到重复的键时,我想读取集合中的项目。
这看起来很简单,但我花了一个多小时试图弄清楚为什么我不能将 Collection 项分配给局部变量。 (请参阅下面代码中的 PROBLEM)

oMailOther = cMails.Item(cMailKey) "Object variable or With block variable not set"

Set oMailOther = cMails.Item(cMailKey) "Object required"


其他 cMails(cMailKey)形式给出了同样的错误。移动 Dim 没有任何区别。 cMails必须可用,因为它在方法中较早使用。请注意 Debug.Print这条语句之前的行, 有效 .我错过了什么?
Option Explicit
Option Compare Text

Public cMails As Collection

Public Sub GetOutlookAttachments()
Set cMails = New Collection

Dim oStore As Store
For Each oStore In Session.Stores
If oStore.DisplayName = "Outlook Data File" Then
ProcessFolder oStore.GetRootFolder()
End If
Next
End Sub

Private Sub ProcessFolder(oFolder As Folder)
Debug.Print oFolder.FolderPath
ProcessItems oFolder.Items

Dim oSubFolder As Folder
For Each oSubFolder In oFolder.Folders
ProcessFolder oSubFolder ' recurse
Next
End Sub

Private Sub ProcessItems(oItems As Items)
Dim oItem As Object
For Each oItem In oItems
DoEvents
If TypeOf oItem Is MailItem Then
Dim oMail As MailItem
Set oMail = oItem
Dim cMailKey As String
cMailKey = oMail.ConversationID & "-" & oMail.ConversationIndex
If Not Contains(cMails, cMailKey) Then
cMails.Add oMail.Subject, cMailKey
Else
Debug.Print cMails.Item(cMailKey)
Dim oMailOther As MailItem
PROBLEM oMailOther = cMails.Item(cMailKey)
Debug.Print cMailKey & ": " & oMailOther.Subject
End If
ElseIf TypeOf oItem Is MeetingItem Then
' ignore
Else
Debug.Print "oItem Is a " & TypeName(oItem)
End If
Next oItem
End Sub

Public Function Contains(col As Collection, key As Variant) As Boolean
Dim obj As Variant
On Error GoTo err
Contains = True
obj = col(key)
Exit Function
err:
Contains = False
End Function
我也尝试复制类似的 AddItem调用别处和 它有效 .
Public Sub Test()
Set cMails = New Collection

Dim cMailKey As String
cMailKey = "hello"
cMails.Add Session.Stores.Item(1), cMailKey

Debug.Print cMails(cMailKey)
Dim oStore As Store
Set oStore = cMails(cMailKey)
Debug.Print oStore.DisplayName
End Sub

最佳答案

我复制了你的代码并运行了它。收藏cMails您正在创建的是一个集合 Strings ,不是邮件对象;然而,oMailOther被声明为 Object类型 MailItem .

在您的作业中没有 Set关键字,VB 提示您想为对象(左侧)分配一些东西,应该使用 Set关键词。现在,有了 Set关键字,VB 提示右侧不是对象...

使cMails进入邮件项目集合,更改 Add声明如下:

cMails.Add oMail, cMailKey

(即您不添加 oMail.Subject 而是整个 oMail 对象。)

现在使用 Set Set oMailOther = cMails.Item(cMailKey) 中的关键字一切正常。

关于vba - 为什么我不能从集合中获取项目并将其存储在变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30954356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com