Назад | Перейти на главную страницу

Макрос Excel: ошибка времени выполнения '1004' Общий сбой почты

Мы планируем в ближайшее время обновить всех наших пользователей до Outlook 2010 и Exchange 2010, но столкнулись с некоторыми проблемами при миграции Outlook. У нас есть электронная таблица Excel, которая по сути представляет собой отчет о расходах, который автоматически отправляется по электронной почте соответствующим людям, когда они нажимают кнопку в электронной таблице. Для этого используется какой-то макрос (я не программист). Он хорошо работает с Outlook 2003, который у нас есть сейчас, но наша тестовая группа пользователей не может его использовать - они получают ошибку ниже.

Может ли кто-нибудь помочь разобраться в этом. Это сводит меня с ума !!

Я пробовал отправить его с открытым и закрытым Outlook.

ОБНОВЛЕНИЕ: РЕШЕНО

Проблема заключалась в настройке нашей фермы Citrix ... Поскольку MS не допускает параллельную установку версий Outlook, как это делается со всеми другими офисными приложениями, нам пришлось установить Outlook 2010 на «тестовом» сервере приложений xen. Поскольку эти пользователи были тестовыми пользователями Outlook 2010, их профили имели только разрешения на использование Outlook 2010 и Outlook 2010 в качестве почтового клиента по умолчанию. Проблема возникла, когда они открыли таблицу в Excel 2003 на производственной ферме xenapp, где Outlook 2010 не был установлен. поэтому он пытался отправить почту через свой почтовый клиент по умолчанию (outlook 2010), которого не было на этом сервере. А поскольку их учетные записи были настроены только на использование Outlook 2010, Excel не знал, что делать.

Решение для нас заключалось в том, чтобы создать новое опубликованное приложение Excel в Citrix, которое было установлено на том же сервере, что и наша установка Outlook 2010, ограничить ферму одним тестовым сервером и опубликовать это приложение для наших тестовых пользователей, удалив их старую версию Excel. приложение. Таким образом, на тестовом сервере работают только Outlook и Excel.

Я могу только показать вам код, который мне нужно было использовать, чтобы моя электронная почта запускалась с помощью кнопки в электронной таблице Excel. Они изменили некоторые вещи, поэтому старый код работал не так хорошо.

Private Sub EmailBlahbutton_Click()

Dim mOutlookApp As Object
Dim OutMail As Object
Dim Intro As String

On Error GoTo ErrorHandler

Set mOutlookApp = GetObject("", "Outlook.application")
Set OutMail = mOutlookApp.CreateItem(0)

With Application
    .EnableEvents = False
    .ScreenUpdating = False
End With

'These are the ranges being emailed.
ActiveSheet.Range(blahblahblah).Select

'Intro is the first line of the email
Intro = "BLAHBLAHBLHA"

'Set the To and Subject lines.  Send the message.
With OutMail
    .To = "blahblah@blah.com"
    .Subject = "More BLAH here"
    .HTMLBody = Intro & RangetoHTML(Selection)
    .Send
End With

With Application
    .EnableEvents = True
    .ScreenUpdating = True
End With

ActiveSheet.Range("A1").Select
ActiveWindow.ScrollColumn = ActiveCell.Column
ActiveWindow.ScrollRow = ActiveCell.Row

Set OutMail = Nothing
Set mOutlookApp = Nothing

Exit Sub

ErrorHandler:
    Set mOutlookApp = CreateObject("Outlook.application")
    Resume Next

End Sub

Function RangetoHTML(rng As Range)
' Changed by Ron de Bruin 28-Oct-2006
' Working in Office 2000-2010
Dim fso As Object
Dim ts As Object
Dim TempFile As String
Dim TempWB As Workbook

TempFile = Environ$("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"

'Copy the range and create a new workbook to past the data in
rng.Copy
Set TempWB = Workbooks.Add(1)
With TempWB.Sheets(1)
  .Cells(1).PasteSpecial Paste:=8
  .Cells(1).PasteSpecial xlPasteValues, , False, False
  .Cells(1).PasteSpecial xlPasteFormats, , False, False
  .Cells(1).Select
  Application.CutCopyMode = False
  On Error Resume Next
  .DrawingObjects.Visible = True
  .DrawingObjects.Delete
  On Error GoTo 0
End With

'Publish the sheet to a htm file
With TempWB.PublishObjects.Add( _
  SourceType:=xlSourceRange, _
  Filename:=TempFile, _
  Sheet:=TempWB.Sheets(1).Name, _
  Source:=TempWB.Sheets(1).UsedRange.address, _
  HtmlType:=xlHtmlStatic)
  .Publish (True)
End With

'Read all data from the htm file into RangetoHTML
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
RangetoHTML = ts.ReadAll
ts.Close
RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
                      "align=left x:publishsource=")

'Close TempWB
TempWB.Close savechanges:=False

'Delete the htm file we used in this function
Kill TempFile

Set ts = Nothing
Set fso = Nothing
Set TempWB = Nothing

End Function