Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel + Outlook. Ошибка в генерации письма / 22 сообщений из 22, страница 1 из 1
25.08.2016, 11:11
    #39297635
dred_fk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + Outlook. Ошибка в генерации письма
Добрый день, товарищи. Вот и чукча стал писателем :-)

Столкнулся с совершенно непонятным для себя. Маленькая преамбула:
Была написана некая надстройка для Excel, которая размещает 2 кнопки в ленту сверху. Кнопки в свою очередь генерируют 2 письма, которые заполняются и выводятся на экран. Все работает, все прекрасно. Надстройка с шаблоном письма лежит в сетевой папке, сама надстройка установлена интересующимся пользователям.

А вот теперь суть: появилось несколько новых пользователей, у которых не заполняется шапка письма (т.е. адресат (.To), тема (.Subject) остаются пустные), хотя если расставить брэйкпоинты - сама информация о теме и адресате есть. А тело письма заполняется.
Иными словами надстройка одна и таже, шаблон письма один и тот же, разные только компьютеры. На большинстве работает все, на некоторых только замена в теле письма.

Прошу толкнуть на путь истинный, т.к. я что-то даже не знаю куда посмотреть. На всякий случай кусок некрасивого кода прилагаю.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
  Set OL_ItemMail = OL_App.CreateItemFromTemplate("Z:\Mail_generator\System\msg_1.msg")
  With OL_ItemMail
    
  If Not IsNull(Cells(ra.Row, 48)) Then
    .To = Cells(ra.Row, 48)
  Else: .To = "---"
  End If
  
  If Not IsNull(Cells(ra.Row, 52)) Then
    .Subject = Cells(ra.Row, 52)
  Else: .Subject = "---"
  End If
  
  If Not IsNull(Cells(ra.Row, 3)) Then
    .HTMLBody = Replace(.HTMLBody, "BOX1", Cells(ra.Row, 3))
  Else
    .HTMLBody = Replace(.HTMLBody, "BOX1", "")
  End If

On Error GoTo label11
  GoTo label21
label11:
  ActiveCell.Value = "ERROR"
  .Save
label21:
  .Display
  ActiveCell.Value = "Сгенерировано письмо 1"
...
Рейтинг: 0 / 0
25.08.2016, 13:34
    #39297818
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + Outlook. Ошибка в генерации письма
dred_fk,

что такое ra и откуда оно берется? И где записаны сами значения адресов и прочее? Это активный лист?
...
Рейтинг: 0 / 0
25.08.2016, 14:08
    #39297871
dred_fk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + Outlook. Ошибка в генерации письма
Код: vbnet
1.
2.
3.
4.
5.
Dim ra As range
Set ra = ActiveCell
Dim OL_ItemMail As Object
Dim OL_App As Object
Set OL_App = CreateObject("Outlook.Application")


Соответственно работаем с активным листом. Прошу прощения, что не указал сразу.
На моем и еще кучке других компьютеров работает абсолютно все. Но сейчас появились 2-3 компа, где:
.To = Cells(ra.Row, 48) отрабатывает (и по брейкпоинтам на cells значение выводит корректное), но при открытии письма заполнено все, кроме .To и .Subject.
...
Рейтинг: 0 / 0
25.08.2016, 15:32
    #39297989
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + Outlook. Ошибка в генерации письма
dred_fk,

я так и не увидел ответа на вопрос. Откуда берется ra? Где присвоение значения, то бишь диапазона? Чтобы найти ошибку - уберите On Error Resume Next из кода - он там явно есть. Тогда Вам выбьет в ошибку на строке, которая её генерирует. Больше сказать нечего по тем хилым обрывкам кода, которые Вы выкидываете в форум.
...
Рейтинг: 0 / 0
25.08.2016, 15:47
    #39298015
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + Outlook. Ошибка в генерации письма
dred_fk.To = Cells(ra.Row, 48)
Полностью квалифицируйте коллекцию Cells.
The_PristЧтобы найти ошибку - уберите On Error Resume Next из кода
А ещё в рантайме вываливайте все проблемные переменные в отладочный файл - стопудово они пустые. рантайм - это не трассировка.
...
Рейтинг: 0 / 0
25.08.2016, 15:52
    #39298024
dred_fk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + Outlook. Ошибка в генерации письма
ra - активная ячейка. Чуть выше же написано "Set ra = activecell" или я что-то не так понимаю? Прошу прощения, что не сразу весь код выложил. По ошибке подумал, что зря захламлял бы.

Весь sub ниже:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
Public Sub Send_Email_1()
     
     On Error Resume Next: Err.Clear
     Dim ra As range
     Set ra = ActiveCell
     'Dim objFSO As Scripting.FileSystemObject
     'Set objFSO = New Scripting.FileSystemObject
     Dim OL_App As Object 'Object Outlook.Application
     Dim OL_ItemMail As Object 'Object Outlook.MailItem
     Set OL_App = CreateObject("Outlook.Application")

  Set OL_ItemMail = OL_App.CreateItemFromTemplate("Z:\Mail_generator\System\msg_1.msg")
  With OL_ItemMail
  
  
  If Not IsNull(Cells(ra.Row, 48)) Then
    .To = Cells(ra.Row, 48)
  Else: .To = ""
  End If
  
  If Not IsNull(Cells(ra.Row, 52)) Then
    .Subject = Cells(ra.Row, 52)
  Else: .Subject = ""
  End If
  
  If Not IsNull(Cells(ra.Row, 3)) Then
    .HTMLBody = Replace(.HTMLBody, "BOX1", Cells(ra.Row, 3))
  Else
    .HTMLBody = Replace(.HTMLBody, "BOX1", "")
  End If
  
  On Error GoTo label11
  GoTo label21
label11:
  ActiveCell.Value = "ERROR"
  .Save
label21:
  .Display
  ActiveCell.Value = "Сгенерировано письмо 1"
  End With

End Sub



К сожалению прямо сейчас протестировать без On Error Resume Next не получится - тот человек, у которого такой баг, уже ушел. А на моем компьютере ошибки нет... Завтра утром обязательно проверю. Спасибо за этот совет.
...
Рейтинг: 0 / 0
25.08.2016, 16:35
    #39298084
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + Outlook. Ошибка в генерации письма
dred_fk,

теоретически все выглядит более-менее по рабочему. Единственный момент: где расположен код? Может в модуле какого-то конкретного листа? Что будет, если записывать обращение к ячейкам так:
Код: vbnet
1.
ra.Parent.Cells(ra.Row, 48).Value
...
Рейтинг: 0 / 0
25.08.2016, 16:45
    #39298096
dred_fk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + Outlook. Ошибка в генерации письма
Да я и говорю, что везде работает, а на нескольких компах "частично" :-((
Код расположен в модуле надстройки. SendEmail.xla: module1.Send_Email_1. Т.е. без привязки ни к конкретному листу, ни к конкретной книге.
Обязательно попробую утром Вашим методом обратиться к ячейкам. И без On Error...
...
Рейтинг: 0 / 0
25.08.2016, 17:12
    #39298117
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + Outlook. Ошибка в генерации письма
dred_fkКод расположен в модуле надстройки. SendEmail.xla: module1.Send_Email_1. Т.е. без привязки ни к конкретному листу, ни к конкретной книге.Тогда я уже говорил:
AkinaПолностью квалифицируйте коллекцию Cells.
...
Рейтинг: 0 / 0
25.08.2016, 17:28
    #39298133
dred_fk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + Outlook. Ошибка в генерации письма
AkinaПолностью квалифицируйте коллекцию Cells.

Спасибо, я почитаю и попробую. К сожалению в VBA я всего месяц как, по этому я с гуглом кодю :-)
...
Рейтинг: 0 / 0
25.08.2016, 17:29
    #39298136
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + Outlook. Ошибка в генерации письма
Чего там читать? Workbooks("имя книги").Worksheets("имя листа").Cells(...)
...
Рейтинг: 0 / 0
25.08.2016, 17:46
    #39298152
dred_fk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + Outlook. Ошибка в генерации письма
не выйдет. Имя книги и имя листа разные. Все же открытая книга и текущий лист. Но спасибо в том числе за теоретическую часть знаний :-)
...
Рейтинг: 0 / 0
25.08.2016, 21:04
    #39298228
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + Outlook. Ошибка в генерации письма
Ну, тогда варианты-то остаются лихие: смотрите защиту листа, параметры ячеек и все в этом духе.
...
Рейтинг: 0 / 0
26.08.2016, 09:23
    #39298378
dred_fk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + Outlook. Ошибка в генерации письма
Но разве тогда на остальных компьютерах бы все работало? Просто лист частично защищен от изменений (некоторые поля). Но это лучше не снимать, иначе умные тетеньки наворотят такого... :-)
...
Рейтинг: 0 / 0
26.08.2016, 11:11
    #39298458
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + Outlook. Ошибка в генерации письма
dred_fkПросто лист частично защищен от измененийВ зависимости от версии Excel это может мешать.
Перед считыванием данных настоятельно рекомендую защиту снимать, а после отправки ставить обратно. Хотя бы попробуйте лично на этих ПК снять защиту вручную и посмотреть результат.
...
Рейтинг: 0 / 0
01.09.2016, 13:24
    #39301888
dred_fk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + Outlook. Ошибка в генерации письма
Извиняюсь, что все так затянулось.
В общем я проверил работоспособность всех советов =-) И ничего меня не спасло. Но у меня есть подробности.
Во первых я узнал, что дело почему-то не в машине, на что грешил я. А в учетке. Как она связана - я пока не знаю, но под определенной учеткой вот такая свистопляска. Хотя может и в машинах тоже. Не знаю :-) К сожалению у меня прав даже на RDP нет... Короче не важно.
А важно во вторых. А именно ошибка! Картинку прилагаю.
Как понимаю, что-то не так с объектом MailItem в моем коде. Ошибка есть - уже хорошо. Пойду гуглить.
Спасибо за все советы, но особенно за подсказку с OnError!
...
Рейтинг: 0 / 0
01.09.2016, 18:21
    #39302238
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + Outlook. Ошибка в генерации письма
dred_fk,

такое может наблюдаться, если Outlook для пользователя установлен криво. Странно, что при этом к Outlook вообще подключение прошло. Обычно это связано с тем, что в системе не зарегистрированы библиотеки Outlook нужным образом.
...
Рейтинг: 0 / 0
02.09.2016, 09:34
    #39302478
dred_fk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + Outlook. Ошибка в генерации письма
The_Prist, очередной раз большое спасибо за совет. Пойду админам нажалуюсь, чтобы переставили.
...
Рейтинг: 0 / 0
07.09.2016, 21:25
    #39305509
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + Outlook. Ошибка в генерации письма
dred_fk... не заполняется шапка письма (т.е. адресат (.To), тема (.Subject) остаются пустные)
Ошибка в том, что IsNull(Cells(ra.Row, 48)) всегда равно False, так как значение ячейки не может быть Null.
Для пустой ячейки значение равно Empty, но как IsNull(Empty)=False, так и IsNull("abc")=False
Вместо IsNull() везде в коде корректнее использовать IsEmpty().
...
Рейтинг: 0 / 0
08.09.2016, 11:18
    #39305710
dred_fk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + Outlook. Ошибка в генерации письма
ZVI, не согласен по той простой причине, что это работает :-) Возможно не корректно (и я попробую изменить на isempty), но работает ровно так, как я этого и ожидал. Да и не заполняет тогда, когда значение 100% есть и на этой же строчке этой же эксельки у меня все работает.

Что касается переустановки аутлука, то админы занимаются этим. Долго что-то...
...
Рейтинг: 0 / 0
08.09.2016, 11:56
    #39305740
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + Outlook. Ошибка в генерации письма
dred_fkZVI, не согласен по той простой причине, что это работает :-)
То, что я написал, легко же проверить:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
[code]
[color=darkblue]Sub[/color] Test()
  
  [color=green]' Очистим ячейку[/color]
  Cells(1, 1).ClearContents
  Debug.Print IsNull(Cells(1, 1)) [color=green]' False[/color]
  
  ' Запишем что-нибудь в ячейку
  Cells(1, 1).Value = "dred_fk@sql.ru"
  Debug.Print IsNull(Cells(1, 1)) [color=green]' False[/color]
  
[color=darkblue]End Sub[/color]

[/SRC]
Результат False независимо от того, пустая ячейка или нет.
Меняйте IsNull на IsEmpty :)
...
Рейтинг: 0 / 0
08.09.2016, 11:59
    #39305743
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + Outlook. Ошибка в генерации письма
Убрал лишние тэги в коде:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub Test()
  
  ' Очистим ячейку
  Cells(1, 1).ClearContents
  Debug.Print IsNull(Cells(1, 1)) ' False
  
  ' Запишем что-нибудь в ячейку
  Cells(1, 1).Value = "dred_fk@sql.ru"
  Debug.Print IsNull(Cells(1, 1)) ' False
  
End Sub
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel + Outlook. Ошибка в генерации письма / 22 сообщений из 22, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]