2013-02-15 2 views
2

Я сделал и протестировал этот макрос в Excel 2010 на Windows 7, также протестировал его на другом компьютере под управлением Windows 7, но с Excel 2007. Работал на обоих, но когда я пытаюсь используйте его на моем рабочем компьютере (Windows 7, Excel 2007). Я получаю «ошибку несоответствия типа» при первом утверждении «Следующий». Посмотрел и обнаружил, что вместо «следующего» я ​​мог бы использовать «Выход за», но потом он просто жалуется на следующую строку, содержащую «End If». Теперь он утверждает: «End If without block If». Наверное, я просто не понимаю, как это работает на одном компьютере Win7 \ Excel 2007, но не в другом.Excel vba macro получает ошибку несоответствия типа в 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» - отличный способ вырваться из цикла раньше, но вам все равно нужно иметь «регулярный» конец вашего цикла. Таким образом, это не случай «заменить' Next' на 'Exit For', но больше:' For ... do stuff ... если что-то выйдет за ... сделать больше вещей ... Далее'. ? – Floris

+0

Обе машины Excel 2007 запускают Outlook 2007, на Windows 7 Pro. У меня есть те же самые ссылки, что и на обоих. Думаю, для более подробного изучения мне нужно найти способ заставить это работать на моем «корпоративном» компьютере. Я бы предположил, что это простое изменение, которое я могу сделать, что я не замечаю. – user2074189

ответ

3

Вот эта мысль - ваш olItem определяется как mailItem. Возможно, что код не работает, когда ваш следующий элемент в почтовом ящике не является почтовым отправлением? Будет ли запрос календаря или что-то еще причиной этого? Возможно, вы захотите поместить заявление Debug.Print во внутренний цикл, чтобы посмотреть, какие объекты просматриваются, - и посмотреть, действительно ли цикл выполняется до тех пор, пока он не встретит странный элемент в вашем почтовом ящике ...

As быстрое исправление, если вы позволили ему быть вариантом, вы не получили бы ошибку типа. Таким образом, вы бы просто объявить его как

Dim olItem 

без as mailItem

на это длинный выстрел.

+0

Рад видеть, что принят ответ «длинный выстрел» - Интересно, можете ли вы прокомментировать то, что вы на самом деле нашли? Каков был предмет, вызвавший эту проблему? – Floris

+0

Это работало. В моем рабочем письме есть запросы на собрание и т. Д., Которые, должно быть, убивали цикл. На других компьютерах, на которых я тестировал, есть только почтовые элементы в папке «Входящие», чтобы объяснить, почему он работал на этих тестовых компьютерах Спасибо за помощь – user2074189

+0

Я думаю, мне повезло. Спасибо за дополнительный i nformation - я думаю, что это делает вопрос/ответ в конечном итоге более полезным для будущих пользователей SO. – Floris