2013-02-15 79 views
2

我在Windows 7上的Excel 2010中製作並測試了此宏,也使用Excel 2007與另一臺Windows 7計算機一起測試過。在我的工作計算機上使用它(Windows 7,Excel 2007)在第一個「Next」語句中出現「類型不匹配錯誤」。看了看,發現我可以使用「退出」而不是「下一步」,但它只是抱怨包含「結束如果」的下一行。現在它宣稱「End If without Block If」。我想我只是不明白這是如何工作在一臺Win7 \ Excel 2007計算機上,而不是其他。Excel vba宏在2007年獲取類型不匹配錯誤,但在2010年工作

宏只是搜索電子郵件主題中所選單元格的值(如果單元格尚未着色),如果匹配,它會更改單元格的顏色。

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 

如果有人有任何想法,他們將不勝感激。

+1

難道你是在兩臺機器上使用不同版本的Outlook?你是否包含正確的參考?這更像是一個「環境」問題,而不是Excel中的差異,我懷疑...... – Floris 2013-02-15 04:49:18

+1

順便說一句...... Exit For'是一個很好的方法,可以儘早打破循環 - 但您仍然需要一個「常規」結束你的循環。所以它不是「用'Exit For'替換'Next'的情況,而是更多:'爲...做東西......如果有東西退出......做更多的事情......下一個'。 ? – Floris 2013-02-15 04:52:32

+0

這兩臺Excel 2007計算機都運行在Windows 7 Pro上的outlook 2007,兩者都包含完全相同的參考文獻,我想詳細說明一下,我需要找到一種方法在我的「公司」計算機上運行。我可以想象這是一些簡單的變化,我可以讓我忽略它 – user2074189 2013-02-15 05:42:48

回答

3

這裏有一個想法 - 你的olItem被定義爲mailItem。當郵箱中的下一個項目不是郵件項目時,代碼可能會失敗?日曆請求或其他事情是否會導致此問題?您可能希望在內部循環中添加一個Debug.Print語句,以查看正在查看的對象 - 並查看該循環是否確實執行,直到它遇到收件箱中的一個奇怪項目...

As一個快速修復,如果你允許它是一個變體,你不會得到一個類型錯誤。所以,你只需將它聲明爲

Dim olItem 

沒有as mailItem

這是一個長鏡頭。

+0

很高興看到「遠射」的答案被接受 - 我想知道你能評論你的實際發現嗎?造成這個問題的項目是什麼? – Floris 2013-02-15 15:21:52

+0

這有效!!我的工作電子郵件中有會議請求等,它必須已經殺死了循環。我測試過的其他機器只在收件箱中有郵件項目,所以這可以解釋爲什麼它在這些測試計算機上工作感謝您的幫助 – user2074189 2013-02-15 15:50:18

+0

我想我很幸運,謝謝你的補充信息 - 我認爲這使問題/答案最終對未來的SO用戶更有用。 – Floris 2013-02-15 15:54:16

相關問題