Macro do Excel: Erro em tempo de execução '1004' Falha geral de email

1

Estamos planejando atualizar todos os nossos usuários para o Outlook 2010 e o Exchange 2010 em breve, mas tivemos algumas dores de cabeça com a migração do Outlook. Temos uma planilha do Excel que é basicamente um relatório de despesas que recebe automaticamente um email para as pessoas apropriadas quando clicam em um botão na planilha. Ele usa alguma macro (eu não sou um programador) para conseguir isso. Ele funciona bem com o Outlook 2003 que temos agora, mas nosso grupo de teste de usuários não pode usá-lo - eles recebem o erro abaixo.

Alguém pode ajudar a descobrir isso. Está me deixando louca !!

Eu tentei enviá-lo com o Outlook aberto e com ele fechado.

ATUALIZAÇÃO:RESOLVIDO

Oproblemafoinossaconfiguraçãodefarmcitrix...ComooMSnãopermiteinstalaçõesladoaladodeversõesdoOutlook,comoacontececomtodososoutrosaplicativosdoOffice,tivemosqueinstalaroOutlook2010emumservidordeaplicativosxen"testing". Como esses usuários eram usuários do outlook de teste 2010, seus perfis só tinham permissões para usar o outlook 2010 e o outlook 2010 como seu cliente de email padrão. O problema se apresentava quando eles abririam o spread no Exchange 2003 no farm xenapp de produção - onde o outlook 2010 não estava instalado. por isso, tentava enviar e-mails através de seu cliente de e-mail padrão (outlook 2010) que não existia nesse servidor. E como suas contas só foram configuradas para usar o Outlook 2010, o Excel não sabia o que fazer.

A solução para nós foi criar um novo aplicativo publicado do Excel no Citrix que foi instalado no mesmo servidor que a nossa instalação do Outlook 2010, limitar o farm a esse servidor de teste e publicar esse aplicativo em nossos usuários de teste, enquanto removemos seu antigo aplicativo de excel. Desta forma, o são apenas executando o Outlook e Excel no servidor de teste.

    
por tking 07.06.2011 / 23:38

1 resposta

1

Só posso mostrar-lhe o código para o qual o meu email acionou um botão em uma planilha do Excel funcionaria. Eles mudaram algumas coisas, então o código antigo não funcionava tão bem.

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
    
por 08.06.2011 / 00:00