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

Столкнулся с совершенно непонятным для себя. Маленькая преамбула:
Была написана некая надстройка для 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
Excel + Outlook. Ошибка в генерации письма
    #39297818
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dred_fk,

что такое ra и откуда оно берется? И где записаны сами значения адресов и прочее? Это активный лист?
...
Рейтинг: 0 / 0
Excel + Outlook. Ошибка в генерации письма
    #39297871
dred_fk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
Excel + Outlook. Ошибка в генерации письма
    #39297989
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dred_fk,

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

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

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

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

Что касается переустановки аутлука, то админы занимаются этим. Долго что-то...
...
Рейтинг: 0 / 0
Excel + Outlook. Ошибка в генерации письма
    #39305740
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Excel + Outlook. Ошибка в генерации письма
    #39305743
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Убрал лишние тэги в коде:
Код: 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
22 сообщений из 22, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Excel + Outlook. Ошибка в генерации письма
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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