Макрос 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 работают только на тестовом сервере.
1 ответ
Я могу только показать вам код, к которому мне нужно было перейти, чтобы моя электронная почта, вызванная кнопкой в электронной таблице 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