2

我在 Windows 7 上的 Excel 2010 中制作并测试了这个宏,还使用另一台 Windows 7 计算机进行了测试,但使用的是 Excel 2007。两者都可以使用,但是当我尝试在我的工作计算机(Windows 7、Excel 2007)上使用它时,我得到了第一个“下一个”语句中的“类型不匹配错误”。查找并发现我可以使用“Exit For”而不是“next”,但它只是抱怨包含“End If”的下一行。现在它声称“End If without block If”。我想我只是无法理解这在一台 Win7\Excel 2007 计算机上是如何工作的,而在另一台计算机上却不是。

该宏仅在电子邮件主题中搜索所选单元格的值(如果该单元格尚未着色),如果匹配,则更改该单元格的颜色。

Sub MultipleCellSubjectSearch()

'This macro searches for the selected cell values (if there is no cell color), when it finds a match it turns the cell color yellow

Dim olApp As Outlook.Application
Dim olNamespace As Outlook.Namespace
Dim olItem As MailItem
Dim olInbox  As Outlook.MAPIFolder
Dim olFolder As Outlook.MAPIFolder
Dim oCell As Range

'The following sets the Outlook folder to search
Set olApp = New Outlook.Application
Set olNamespace = olApp.GetNamespace("MAPI")
Set olInbox = olNamespace.GetDefaultFolder(olFolderInbox)

'The following searches for cell value string in subject
For Each oCell In Selection
    If oCell.Interior.Pattern = xlNone Then
        For Each olItem In olInbox.Items
            If InStr(olItem.Subject, (oCell.Value)) <> 0 Then
            oCell.Interior.ColorIndex = 6
            End If
        Next
    End If
Next

Set olInbox = Nothing
Set olNamespace = Nothing
Set olApp = Nothing

End Sub

如果有人有任何想法,他们将不胜感激。

4

1 回答 1

3

这是一个想法-您olItem的定义为mailItem. 当邮箱中的下一个项目不是邮件项目时,代码可能会失败?日历请求或其他原因会导致这种情况吗?您可能希望在内部循环中放置一个 Debug.Print 语句,以查看正在查看哪些对象 - 并查看循环是否确实执行,直到它遇到收件箱中的一个奇怪项目......

作为一个快速修复,如果您允许它成为一个变体,您将不会收到类型错误。因此,您只需将其声明为

Dim olItem

没有as mailItem

这是一个长镜头。

于 2013-02-15T05:53:48.817 回答