VBA Excel: Enviando e-mails a partir do Excel

Estender certa praticidade aos nossos clientes, facilitando-lhes o dia-a-dia, é um prazer para nós desenvolvedores, certo? Abaixo replico um post antigo, e agora ampliado, com uma funcionalidade que visa facilitar o compartilhamento dos nossos BIs (Business Information), BSCs, Dashboards, Scorecards ou mesmo dos relatórios e gráficos que estão contidos em nossos MISs. Como? Enviando-os por e-mail. 


Sugiro algumas aplicabilidades práticas para a utilização do envio automatizado e e-mails:


: : Sabe quando você está responsável por consolidar diversas planilhas em uma só e o pessoal que precisa enviar-lhe as planilhas (ou disponibilizá-las em algum lugar) não o fazem? então, automatize a cobrança por e-mail



: : Ao invés de gastar tempo reunindo todas as planilhas após o fechamento e enviá-las uma-a-uma a todos os gestores, reúna os dados em um só recipiente, crie uma lista de quem receberá as planilhas e pronto!

A primeira opção utiliza o método SEND, e serve como incentivo a sua pesquisa e estudo. 

Sub SendPlanNow()
    ActiveWorkbook.SendMail _

    Recipients:="bernardess@gmail.com", _

    Subject:="Enviando e-mail da aplicação Excel em: " & Format(Date, "dd/mm/yyyy")
End Sub
Outras necessidades vão se desenrolando com o passar do tempo, como por exemplo copiar a pasta ativa (ActiveSheet), envindo a planilha em seguida:

Sub Send1Sheet_ActiveWorkbook()
    ' Criando uma nova planilha (workbook) contendo um Sheet, e enviando-a 
      como um arquivo anexado.

    ThisWorkbook.Sheets(1).Copy   

    With ActiveWorkbook

         .SendMail Recipients:="bernardess@gmail.com", _

          Subject:="Tente contatar-me em: " & Format(Date, "dd/mmm/yy")

         .Close SaveChanges:=False

    End With

End Sub

Outro método que pode ser usado é o Método de Roteirização, este encaminha a pasta de trabalho (worksheet), a partir de uma lista seguindo o roteiro atual, isto nos permite especificar inúmeros destinatários.
Sub RoutingActwBook()
    With ActiveWorkbook

       Let .HasRoutingSlip = True

           With .RoutingSlip

                Let .Delivery = xlOneAfterAnother
                Let .Recipients = Array("bernardess@gmail.com", "inanyplace01@gmail.com", "inanyplace02@gmail.com")
                Let .Subject = "Por favor, dê atenção a este relatório"
                'Let.Message = ""

          End With

        .Route

    End With
End Sub

Um outro problema comum encontrado em diversos códigos onde se faz citação ao envio de e-mails de modo automatizado é a aparição de mensagens similares a:
projeto mas nesta versão existe uma mensagem de alerta que é exibida a cada envio:

"A program is trying to automatically send e-mail..."
"Um programa está tentando enviar..."

Como eliminar de vez esta constante mensagem de exibição?

Bem, a solução não está no MS Excel, neste caso, pois esta solução pode ser implementada em qualquer um dos produtos do MS Office.

Crie um novo módulo no MS Outlook e cole o código abaixo (Agradecimentos antecipados ao Waine Phillips, dono da solução):

Public Function FnSendMailSafe(strTo As String, _

                                strCC As String, _

                                strBCC As String, _

                                strSubject As String, _

                                strMessageBody As String, _

                                Optional strAttachments) As Boolean

    On Error GoTo ErrorHandler:

    Dim MAPISession As Outlook.NameSpace
    Dim MAPIFolder As Outlook.MAPIFolder
    Dim MAPIMailItem As Outlook.MailItem
    Dim oRecipient As Outlook.Recipient
    Dim TempArray() As String
    Dim varArrayItem As Variant
    Dim strEmailAddress As String
    Dim strAttachmentPath As String
    Dim blnSuccessful As Boolean

    'Obtendo o MAPI do objeto NameSpace

    Set MAPISession = Application.Session

    If Not MAPISession Is Nothing Then

      'Logando-se na sessão MAPI

      MAPISession.Logon , , True, False

      'Criando um ponteiro na pasta Outbox

      Set MAPIFolder = MAPISession.GetDefaultFolder(olFolderOutbox)

      If Not MAPIFolder Is Nothing Then

        ' Criando um novo item de e-mail item na pasta "Outbox"

        Set MAPIMailItem = MAPIFolder.Items.Add(olMailItem)

        If Not MAPIMailItem Is Nothing Then
         
          With MAPIMailItem

            'Criando um novo recipiente para TO

                Let TempArray = Split(strTo, ";")

                For Each varArrayItem In TempArray

                    Let strEmailAddress = Trim(varArrayItem)

                    If Len(strEmailAddress) > 0 Then

                        Set oRecipient = .Recipients.Add(strEmailAddress)

                        Let oRecipient.Type = olTo

                        Set oRecipient = Nothing

                    End If
               
                Next varArrayItem
           

            'Criando um recipiente para CC

                Let TempArray = Split(strCC, ";")

                For Each varArrayItem In TempArray

                    Let strEmailAddress = Trim(varArrayItem)

                    If Len(strEmailAddress) > 0 Then

                        Set oRecipient = .Recipients.Add(strEmailAddress)

                        Let oRecipient.Type = olCC

                        Set oRecipient = Nothing

                    End If

                Next varArrayItem
           
            'Criando recipiente para BCC

                Let TempArray = Split(strBCC, ";")

                For Each varArrayItem In TempArray

                    Let strEmailAddress = Trim(varArrayItem)

                    If Len(strEmailAddress) > 0 Then

                        Set oRecipient = .Recipients.Add(strEmailAddress)

                        Let oRecipient.Type = olBCC

                        Set oRecipient = Nothing

                    End If
               

                Next varArrayItem
           

            'Configurado a mensagem do SUBJECT

                Let .Subject = strSubject
           

            'Configurando a mensagem do corpo od e-mail (em HTML ou texto)

                If StrComp(Left(strMessageBody, 6), "<HTML>", vbTextCompare) = 0 Then

                    Let .HTMLBody = strMessageBody

                Else

                    Let .Body = strMessageBody

                End If


            'Adicionando qualquer anexo especificado

                'Let TempArray = strAttachments

                For Each varArrayItem In strAttachments

                    Let strAttachmentPath = Trim(varArrayItem)

                    If Len(strAttachmentPath) > 0 Then
                        .Attachments.Add strAttachmentPath
                    End If
               

                Next varArrayItem

            .Send


            Set MAPIMailItem = Nothing

          End With

        End If

        Set MAPIFolder = Nothing

      End If

      MAPISession.Logoff

    End If


    Let blnSuccessful = True
   

ExitRoutine:

    Set MAPISession = Nothing
    Let FnSendMailSafe = blnSuccessful

    Exit Function


ErrorHandler:

    MsgBox "Occoreu um erro na função VBA FnSendMailSafe()" & vbCrLf & vbCrLf & _

            "Nº do erro: " & CStr(Err.Number) & vbCrLf & _

            "Descrição do erro: " & Err.Description, vbApplicationModal + vbCritical

    Resume ExitRoutine

End Function

Já no MS Excel (ou qualquer outro produto do MS Office), cole o código abaixo:Chame essa função com os parâmetros da mensagem.
No parâmetro TO (Para) e CC é só separar os e-mails com ;[ponto-e-vírgula], e os anexos precisarão estar numa matriz.
Function SendMail (para As String, cc As String, assunto As String, mensagem As String, Anexos) As Boolean
         'enviar e-mail via Outlook
         Dim objOutlook As Object ' Note: Must be late-binding.
         Dim objNameSpace As Object
         Dim objExplorer As Object
         Dim blnSuccessful As Boolean
         Dim blnNewInstance As Boolean 

         On Error Resume Next

         Set objOutlook = GetObject(, "Outlook.Application")

         On Error GoTo 0

         If objOutlook Is Nothing Then
             Set objOutlook = CreateObject("Outlook.Application")

             Let blnNewInstance = True

             Set objNameSpace = objOutlook.GetNamespace ("MAPI")
             Set objExplorer = objOutlook.Explorers.Add (objNameSpace.Folders(1), 0)

             objExplorer.CommandBars.FindControl(, 1695).Execute
                   
             objExplorer.Close
               
             Set objNameSpace = Nothing
             Set objExplorer = Nothing
         End If

         Let blnSuccessful = objOutlook.FnSendMailSafe (para, cc, "", assunto, mensagem, Anexos)

         If blnNewInstance = True Then objOutlook.Quit

         Set objOutlook = Nothing

         Let EnviarEmail = blnSuccessful
End Function





Tags: Bernardes, e-mail, send, Excel



André Luiz Bernardes
A&A® - Work smart, not hard.

A&A - Dados ou Informações?



Empresas em todo o mundo estão permeadas de dados oriundos de diversas fontes distintas e apesar do fácil acesso a estes, têm dificuldades em obter as necessárias informações para suas relevantes tomadas de decisões.

Não é menos verdade, nem tão pouco raro, o fato de que em muitas reuniões a maioria dos diretores, e/ou gerentes presentes estejam munidos de 
informações
 pouco relevantes ou totalmente irrelevantes. É certo que têm acesso aos seus próprios dados de A a Z
, mas estes estão completamente desprovidos de conteúdo útil. Geralmente tais amontoados de dados não contém nem a abrangência necessária e tão pouco a diversidade apropriada, que lhes propiciem dinamicidade na análise.

Em alguns casos as corporações têm acesso a uma megabase de 
dados distribuidos nos seus servidores, não raramente reunidos sob os acrônimos: 
BI, DW (Datawarehouse) e cubos OLAP (online analytical processing)

informação, [algo que realmente agregue, aponte, antecipe, ou mesmo complemente] decisões é muito preciosa e deve ser obtida de forma rápida e exata.


Quando a questão é reunir 
informações de diferentes países, traduzindo-as nas 
estratégias e objetivos das suas respectivas companhias, os executivos têm deparado-se com um enorme desafio para a grande maioria deles, isso em todo o mundo. Não é difícil que os KPIs (Indicadores de Performance) definidos corporativamente não estejam alinhados com as suas estratégias.

A diversidade de 
bases de dados nas quais as informações se encontram são muito variáveis. O verdadeiro desafio ocorre no momento de consolidá-las em Dashboards e Scorecards por exemplo. Estas precisam ser reunidas de modo coerente e sucinto. 


No caso dos Balanced Scorecards (BSCs), estes oferecem aos executivos as ferramentas para atingirem o sucesso na obtenção de suas informações. Esta importante ferramenta sim, traduz a missão e a estratégia das suas empresas num conjunto abrangente de medidas de desempenho que servem como base para o sistema de medição e gestão estratégica, perseguindo os objetivos financeiros, incluindo os vetores de desempenho desses objetivos.
O grande dilema é: M
esmo cercado por dados de todas as origens, como posso obter informações relevantes para tomar minhas decisões?





Tags: VBA, Office, Outlook,




Inspiration: 



DEFINIÇÃO - Dashboard & Scorecard
















Dashboard e Scorecards
A utilização de Dashboards e Scorecards, dentre outros tipos de relatórios, precisam de alguns conceitos solidamente embasados para que administremos as expectativas as quais estes terão a responsabilidade de atender.


O que esperar?
Quando buscamos informações geralmente desejamos que estas estejam acompanhadas de três imprescindíveis características: Rápidas, Exatas, e Dinâmicas, explico:

Rápidas: Não queremos consultar uma informação e perder longos minutos aguardando o retorno do resultado. Aprendemos muito com o Google e outros searchs do mercado. A construção das queries precisam ser muito bem modeladas para que o usuário tenha o seu resultado em tempo hábil.

Exatas: Um comitê assegurará e validará todas as parametrizações simuláveis disponíveis no nosso modelo de análise. Além disso as visões disponibilizadas serão informações resultantes de um consenso interdepartamental colegiado pelo comitê responsável.

Dinâmicas: A interface deve ser fácil e simples de utilizar. O acesso as informações não deve depender de nenhuma pessoa especializada. Parametrizações também devem estar claramente expostas para permitir adequações tais como de: periodicidade, cenário, conceito, etc.

Em que base serão construídos?
Tanto os Dashboards como os Scorecards devem demonstrar total aderência as características descritas acima. De modo clássico, a utilização destes 2 modelos de 'relatórios' têm sido a de servir informações e não apenas dados inexpressivos.

Os executivos geralmente têm necessidade constante de acompanhar a dinamicidade do seu modelo de negócio. Suas análises precisam estar dispostas em interfaces intuitivas, o que inclui unir as visões: EstratégicaFinanceira e em alguns casos, Operacional, num mesmo cockpit de análise.

Inúmeros ERPs, SCMs, ou mesmo CRMs, oferecem plataformas sensacionais que agilizam enormemente as necessidades transacionais do dia-a-dia. Tais produtos contém ambientes de reporting, que combinam extratores de dados com a exportação de algumas análises simples para planilhas eletrônicas. Mas realmente muito pouco destes têm soluções maduras para análise. Têm sim, produtos que dizem fazer isso, mas os analistas não desejam apenas produtos, mas soluções.

Como será a base de dados na qual serão conectados?
As análises dispostas nos Dashboards e Scorecards necessitam impreterivelmente de um repositório inteligente de informações e não apenas terem conexões a um amontoado de dados sem quaisquer convenções e consenso nas regras de negócio.

A definição conceitual das informações precisam refletir o 'aceite' dos diversos departamentos da empresa.

Os KPIs dispostos neles precisam estar fundamentados em conceitos discutidos e validados previamente.

Business Intelligence, fonte das nossas interfaces de análise, é composto por decisões conceituais colegiadas por um grupo que representa todas as áreas usuárias. Este grupo independente tem suas ações pautadas nos conceitos do seu modelo de negócio, além de estarem alinhadas com a estratégia da sua companhia.

É necessário fazer compreender que os Dashboards bem como os Scorecards devem ser utilizados como gateways em análises avançadas de primeira ordem. Após a conexão das interfaces às suas respectivas bases de dados, diversos métodos de gerenciamento de desempenho serão implementados:

KPIs: Estes precisam constantemente ser avaliados quanto a sua validade e aplicabilidade. Especialmente se o modelo de negócio for tão dinâmico que esteja constantemente em mutação. Os KPIs devem acompanhar tais mudanças para que continuem sendo eficazes em seus apontamentos.

Metas da empresa: Os KPIs devem estar estreitamente conectados às metas da empresa, deve-se ficar atento quanto as mudanças de metas e subseqüentes reajustes dos mesmos.

Visibilidade dos Relatórios: Estabelecer os Dashboards e Scorecards em cascatas através de toda a organização, na sua cadeia de valores. Promover o compartilhamento de análises snapshot realizadas nos Dashboards e Scorecards via e-mail ou publicação na intranet e internet.

Ampliação do repositório de dados: Incorporar paulatina e constantemente todos os dados empresariais – financeiro, operacional, logístico, contábil, e estratégico.  Integrar filiais e congêneres. A abrangência ideal deve considerar todas as partes comprometidas com as práticas de governança corporativa executadas pela companhia.

Convencionando definições
§  Os Dashboards fornecem uma representação ilustrada do desempenho dos negócios em toda a organização.

§  Dashboards e Scorecards em Cascata são entregues em todas as áreas funcionais da organização.

§  Os Scorecards fornecem uma representação visual dos indicadores chave de desempenho (KPIs), os quais são cuidadosamente selecionados, ajudando a medí-los e gerenciá-los.

§  A onipresença dos Dashboards e Scorecards assegura que inúmeros usuários possam, com segurança, ter acesso aos relatórios que necessitem em qualquer parte e momento, utilizando qualquer plataforma.

§  A personalização automática do conteúdo dos Dashboards e Scorecards é um recurso importante que requererá uma arquitetura robusta na plataforma de dados estabelecida, e esta se tornará garantidora do acesso às informações.

§  Os Relatórios de Métrica Gerenciada constituem a base do CPM (Corporate Performance Management), permitindo que os gerentes monitorem continuamente o desempenho dos negócios.

Utilizando o Microsoft Office como interface dos Dashboards e Scorecards:
Uma definição simples para os Dashboards e Scorecards seria a representação (sobretudo) gráfica de um conjunto de indicadores organizacionais. Estas devem ser apresentadas não mais nas telas de computadores pessoais sobre as mesas dos colaboradores, mas em TVs de LCD dispostas em áreas acessíveis e nos corredores dos departamentos, as quais permitiriam, de forma imediata, o monitoramento dos resultados e processos sob observação.

É importante pontuar que a definição acima não diz que os Dashboards e Scorecards necessitem ser modelados em ferramentas proprietárias e complexas, onerando demasiadamente o comitê responsável pela manutenção destes.

Pessoalmente desenvolvo e defendo o estabelecimento das diversas vantagens e motivos, para que as organizações de todos os portes, bem como seus respectivos departamentos, utilizem extensivamente planilhas como o MS Excel, ou bases de dados como as do MS Access para implementar seus Dashboards e Scorecards. Para aprofundar um pouco mais minha defesa sugiro ainda alguns outros tópicos para reflexão.

CIDs (Colaboradores Internos Dedicados) — As soluções desenvolvidas com as ferramentas contidas no MS Office mantém o conhecimento do negócio sob os olhares atentos dos seus CIDs, desenvolvedores locais departamentais, a quem o departamento de TI deve constantemente manter atualizados e paparicados. Estes empenham-se diariamente para que as dinâmicas e intrínsecas análises necessárias nos seus departamentos não fiquem descoladas das regras de negócio, as quais trazem um enorme peso de responsabilidade quando gerido pela área de TI, muitas vezes sem a necessária vivência sob a faceta específica do departamento dentro do modelo de negócio analisado. Os CIDs não devem ser execrados por TI, antes devem aproximar-se deles, ministrando-lhes treinamento quanto a documentação para que suas ferramentas possam suavemente migrar para soluções corporativas com ampla visibilidade, adequação e usabilidade. TI deve sim, abrir mão de uma consultoria externa que vende um produto proprietário e que a posteriori seja paga especificamente para ordenar, agrupar ou inserir uma nova coluna ou um novo filtro ou nova visão em um dos cenários disponíveis nos Dashboards e Scorecards vendidos [ou alugados].

Custos — Se lhe perguntarem qual é o sistema mais utilizado em todo o mundo, qual seria a sua resposta? Um ERP, um Banco de Dados? Qual? Sem qualquer receio ou medo de errar lhes diria que depois do MS Windows as planilhas eletrônicas são as campeãs. Aplicações espetaculares são desenvolvidas com elas e sua segurança, confiabilidade e disponibilidade são amplificadas a cada nova versão disponível. A Microsoft permitiu que sua arquitetura avançasse ao ponto de compartilharmos o conteúdo delas nas nuvens, e automatizarmos a sua exportação para apresentações sem perder horas formatando o MS Powerpoint. Temos a possibilidade de enviar análises em massa por e-mail ou publicá-las na intranet, acomodando nossas análises também 'nas nuvens'. Quanto isso custa? Um pouco de conhecimento, o MS Excel, o MS Sharepoint, e o MS Powerpoint. Debaixo desse modelo modesto, pessoalmente já desenvolvi inúmeras soluções para empresas de todos os portes, criando Cockpits repletos de Dashboards e Scorecards associados a alguns Datawarehouses e BIs. Qual o custo em software que as empresas envolvidas tiveram? Apenas o custo das minhas horas trabalhadas, pois todos os demais recursos estavam disponíveis in house. Não precisaram preocupar-se com os custos envolvendo licenças, manutenção, instalação ou treinamento específico. Lidar com a suíte do MS Office já é pré-requisito de contratação em várias das companhias por onde passei. Nelas encontrei diversos CIDs dispostos a ampliar a semente que estava plantando em seus departamentos. Quero deixar bem claro que tais aplicações são sementes que podem ser adubadas e compreendidas tornando-se frondosas aplicações corporativas, ao invés de serem tratadas como ervas daninhas.

Manutenção — Como a suíte MS Office já existe há muito tempo, vários CIDs tornaram-se hábeis programadores VBA. Criaram e desenvolveram excelentes soluções para o dia-a-dia das corporações. São profissionais de fácil acesso no mercado, além do fato de que a codificação VBA é de domínio de muitos Analistas e Programadores no mercado.

Prazos — Criar Dashboards e Scorecards com a suíte MS Office é muito mais rápido do que com as outras soluções comerciais mais pesadas. E melhor, não são soluções proprietárias, não exigem custos adicionais para adequar as cores, e não prescindem de uma disponibilidade no budget. Os prazos prendem-se única e exclusivamente ao tempo de desenvolvimento, passando por cima de todos os trâmites de aprovação.

Flexibilidade do Layout — Não existem limitações significativas quanto ao que se pode disponibilizar como interface, ao contrário das estruturas impostas por outras aplicações comerciais.

Flexibilidade dos Objetivos — Sempre será possível desenvolver Dashboards e Scorecards para um grande leque de necessidades em toda a organização

Interface Flexível — Vários BIs comerciais já compreenderam que não necessitam re-inventar a roda. Não raro suas interfaces finais são cubos OLAP descarregados no ambiente MS Excel a partir de onde podem fazer qualquer coisa com os dados, moldando as informações (através de Dashboards e Scorecards), de modo a atender as inúmeras necessidades da corporação.

Ambiente familiar — O MS Excel, por exemplo, é uma aplicação conhecida pela maioria absoluta dos usuários nas empresas, os quais não serão retirados da sua zona de conforto ao utilizar soluções em tal ambiente.

Total integração com outras aplicações Office — Certas tarefas, como copiar gráficos dos Dashboards e Scorecards para uma apresentação MS PowerPoint, não necessitarão de um treinamento adicional, porque já fazem parte da rotina dos usuários.

Acesso Off-line — Ao contrário de outras aplicações, que por natureza têm um acesso online (intranet ou rede da organização), um Dashboards ou  Scorecards em MS Excel pode em geral ser utilizado no modo Offline copiando o arquivo para um disco local ou pendrive.

Melhores gráficos — Excetuando-se os softwares desenvolvidos especificamente para isso, custa-me lembrar outra aplicação que tenha uma gama tão abrangente de objetos gráficos como o MS Excel. Nas demais soluções proprietárias nunca poderemos exportar os objetos gráficos com tanta facilidade e rapidez quanto fazemos com a suíte do MS Office.

Espero que estas reflexões o tenham ajudado a vislumbrar as soluções que o aguardam, além de lhe aguçar o olhar para aquele CID presente no seu departamento e para o qual ainda não tinha atentado como parte indispensável para alcançar os seus sonhos quanto a obter informações rápidasdinâmicas e exatas.

Tags: Bernardes, TI, Tecnologia da Informação, Dashboard, Scorecard, YTD, YTG, KPI, sparklines, charts, Pivot Table, slicers, bullet, Scroll chart, gráfico, mini-gráfico, termômetro, Velocímetro, Gauge, relatório, MS, Microsoft, Office, Excel, Access, Outlook, Powerpoint, Organização, Ordenação, Formatação, numérico, projeto, ranqueado, painel, evolução, clustering, redes neurais, métodos genéticos, mineração em textos, roll up, drill down, KPI, KPIs, Key performance Indicator, escopo, stakeholder, indicadores, DW, Data Warehousing, BSM, Business Scorecard Manager, BSC, Balanced Scorecard, Dashboard, características, infochart, chart, infográfico, gráfico, drugs, drogas, Ilegal, Americas, Pharma, Malaria, Malária, farmacêutica, análise, Data Mining Tweeder, The Health Tweeder, algoritmo, data mining, Mineração de Dados, colaborativa, rede social, social mídia, community, facebook, like, friendwheel, google play, health tweeder, infographic, keyword, like button, likebutton.me, mentionmap, MSNBC spectra, network,news feed, rss, search, topics, touchgraph, twitter, twitter venn, dólar, Real, superimposição, finanças, financeiro, contábil, contabilidade, crédito, débito




diHITT - Notícias