Excel 宏:运行时错误“1004”常规邮件失败

Excel 宏:运行时错误“1004”常规邮件失败

我们计划很快将所有用户升级到 Outlook 2010 和 Exchange 2010,但在 Outlook 迁移过程中遇到了一些麻烦。我们有一个 Excel 电子表格,它基本上是一份费用报告,当相关人员单击电子表格中的按钮时,它会自动通过电子邮件发送给他们。它使用一些宏(我不是程序员)来实现这一点。它与我们现在拥有的 Outlook 2003 配合良好,但我们的测试用户组无法使用它 - 他们收到以下错误。

有人能帮我解决这个问题吗?这让我抓狂了!!

我尝试过在打开和关闭 Outlook 的情况下发送它。 在此处输入图片描述

更新:已解决

问题出在我们的 citrix farm 设置上...由于 MS 不允许并排安装 Outlook 版本(就像他们允许安装所有其他办公应用程序一样),我们不得不在“测试”xen 应用服务器上安装 Outlook 2010。由于这些用户是测试 Outlook 2010 用户,他们的个人资料只具有使用 Outlook 2010 和 Outlook 2010 作为其默认电子邮件客户端的权限。当他们在生产 xenapp farm 上用 Excel 2003 打开电子表格时,问题就出现了 - 那里没有安装 Outlook 2010。因此它试图通过他们的默认电子邮件客户端(Outlook 2010)发送邮件,但该服务器上不存在该客户端。而且由于他们的帐户仅配置为使用 Outlook 2010,Excel 不知道该怎么做。

我们的解决方案是在 citrix 中创建一个新的 Excel 发布应用程序,该应用程序与我们的 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 = "[email protected]"
    .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

相关内容