2013-02-15 2 views
2

이 매크로는 Windows 7의 Excel 2010에서 작성 및 테스트되었으며 다른 Windows 7 컴퓨터에서도 Excel 2007과 함께 테스트되었습니다. 내 작업 컴퓨터 (Windows 7, Excel 2007)에서 사용하십시오. 첫 번째 "다음"문에서 "형식 불일치 오류"가 나타납니다. 내가 찾은 다음 "다음"대신 "Exit For"를 사용할 수 있지만 "End If"가 포함 된 다음 줄에 대해 불만을 표시합니다. 이제는 "End If if 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

+1

그건 그렇고 ... 'Exit For'는 일찍 루프를 빠져 나가는 좋은 방법입니다.하지만 여전히 "규칙적인"끝내기. 따라서 '다음을'을 'Exit For'로 바꾸는 경우는 아니지만 더 많은 것을 위해 : '물건을 위해 ... 뭔가가 끝나면 ... 더 많은 것을해라.'다음은 의미가있다. ? – Floris

+0

Excel 2007 컴퓨터는 모두 Windows 7 Pro에서 Outlook 2007을 실행합니다. 두 가지 모두에 동일한 참조가 포함되어 있습니다. 더 자세히 설명 하겠지만 내 "회사"컴퓨터에서이 작업을 수행 할 수있는 방법을 찾아야합니다. – user2074189

답변

3

여기는 생각입니다. olItemmailItem으로 정의됩니다. 사서함의 다음 항목이 메일 항목이 아닌 경우 코드가 실패 할 수 있습니까? 캘린더 요청 또는 다른 원인으로 인해 발생합니까? Debug.Print 문을 내부 루프에 놓으면 어떤 객체가보고 있는지 확인할 수 있습니다.받은 편지함의 이상한 항목을 찾을 때까지 루프가 실제로 실행되는지 확인하십시오.

As 빠른 수정, 당신이 변종이 될 수 있다면, 당신은 타입 에러를 얻지 못할 것입니다. 그래서 당신은 단지 as mailItem

그것은 긴 샷입니다없이

Dim olItem 

로 선언합니다.

+0

"긴 샷"답변을 받아서 반갑습니다 - 실제로 발견 한 것에 대해 의견을 말할 수 있는지 궁금합니다. 문제의 원인은 무엇입니까? – Floris

+0

그 일을했습니다 !! 내 작업 전자 메일에는 루프를 죽여야 만하는 모임 요청 등이 있습니다. 내가 테스트 한 다른 컴퓨터에는받은 편지함에 메일 항목 만 있으므로 테스트 컴퓨터에서 작동하는 이유를 설명 할 수 있습니다 . 도와 줘서 고마워. – user2074189

+0

나는 운이 좋았다고 생각한다. 정보 - 궁극적으로 미래의 SO 사용자에게 더 유용한 질문/대답을 만든다고 생각합니다. – Floris

관련 문제