Notifications
Clear all

Macro para Enviar Planilha

16 Posts
4 Usuários
0 Reactions
3,823 Visualizações
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa noite

Tenho uma planilha (em anexo) que possui alguns campos que são alterados diariamente. Necessito que, assim que ela for devidamente preenchida nos campos não protegidos, o usuário clique no botão "Enviar" e as duas planilhas sejam mandadas para um determinado e-mail, direto, sem o uso de quaisquer programas de e-mail.

O e-mail para o qual será enviada encontra-se visível na planilha. Entretanto este campo não deverá aparecer e deverei poder alterar se e quando necessário.

Ainda, gostaria que, ao ser aberta a pasta de trabalho, aparecesse um campo para que fosse digitado o nome da Recepcionista, no exemplo "Joana" e que o mesmo não pudesse ser alterado após a inserção. A única forma de este dado ser alterado seria fechar e abrir a planilha novamente, o que faria com que uma macro (já existente) fosse disparada e limpasse todos os dados. Esta macro de limpar os dados na abertura já está funcionando. Entretanto, preciso também de uma forma para que o excel execute esta macro, sem o aviso de que é necessário ativar as macros toda vez que eu abrir as planilhas.

Se alguém puder me ajudar nestas questões, ficarei imensamente agradecido. Também aceito quaisquer sugestões para melhorar a planilha.

Estou enviando a planilha em anexo para que melhor entendam o que preciso.

Grato,

Nilton

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 12/02/2014 6:13 pm
(@necron)
Posts: 117
Estimable Member
 

Ola!

Veja se a Macro que fiz no anexo abaixo lhe atende:

Você precisa configurar essa parte da macro de acordo com as informações do seu servidor de e-mails:

'####
'DLL para efetuar conexão com servidor de E-mails (POP3)
'####
With lobj_cdomsg.Configuration
.Fields(cdoSendUserName) = "seuemail@yahoo.com.br" 'Endereço de e-mail para autenticar no servidor
.Fields(cdoSendPassword) = "suasenha" 'Senha do e-mail para autenticar no servidor
.Fields(cdoSMTPAuthenticate) = cdoBasic
.Fields(cdoSMTPServer) = "pop.mail.yahoo.com.br" 'Nome do servidor SMTP / POP3
.Fields(cdoSMTPConnectionTimeout) = 25 'Tempo de conexão
.Fields(cdoSMTPServerPort) = 995 'Porta do servidor de E-Mails
.Fields(cdoSendUsingMethod) = cdoSendUsingPort
.Fields(cdoSMTPUseSSL) = True 'Usar conexão SSL
.Fields.Update
End With

Se ajudar por favor, me informe!

Fui Util? Click na "Mãozinha" ali do lado >>>> e agradeça.

 
Postado : 13/02/2014 7:43 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Caro Necron

Muito obrigado pela ajuda. A macro que você enviou termina dizendo que o e-mail foi enviado. Entretanto, não está enviando, visto que o e-mail de recebimento também é meu e não recebi a planilha. Configurei a macro com as informações do servidor e mesmo assim não deu certo. Há um outro detalhe que talvez seja relevante.

Nesta parte,

.AddAttachment ("C:Relatorio Diario de Recepção.xlsx") 'Diretorio do Anexo...
'.Send
End With

tive que colocar o .Send como comentário, pois dava erro na linha. Quando coloquei como comentário não deu mais erro.

Ainda sobre a planilha, preciso que o excel não fique pedindo para ativar as macros toda vez que eu abrir a planilha. Uma coisa que eu esqueci de dizer na mensagem inicial é que esta planilha rodará no excel 2007, 2010 e 2013.

Grato e no aguardo,

Nilton

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 13/02/2014 12:54 pm
(@necron)
Posts: 117
Estimable Member
 

Ola Nilton!

Vamos por partes! Primeiramente vamos tentar enviar por e-mail.

Não sou muito bom com VBA ainda, mas esse erro que você teve no .Send foi justamente pelas configurações feitas de conexão com o servidor não ter sido correto. O Camando .Send serve para enviar o e-mail e não pode ser substituído.

Eu não havia testado a conexão com o servidor antes de te mandar a planilha, mas refiz as configurações de conexão e testei utilizando a conta da minha Namorada e funcionou.

Segue abaixo a planilha corrigida:

Altere apenas a seguinte linha:

.Fields(cdoSendPassword) = "ColoqueSuaSenhaAqui" 'Senha do e-mail para autenticar no servidor

As demais ja estão corretas!

Se você quiser alterar o local onde é salvo o anexo antes de enviar fique a vontade para alterar as seguintes linhas:

1º -

ActiveWorkbook.SaveAs Filename:="C:Relatorio Diario de Recepção.xlsx", _

2º -

.AddAttachment ("C:Relatorio Diario de Recepção.xlsx") 'Diretorio do Anexo...

Espero que funcione, porque no meu teste funcionou conforme imagem abaixo:

Fui Util? Click na "Mãozinha" ali do lado >>>> e agradeça.

 
Postado : 17/02/2014 8:10 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Olá Necron.

Primeiramente, agradeço novamente pela ajuda dispensada.

A correção da planilha funcionou perfeitamente. Está enviando o arquivo como anexo bem como eu necessitava.

Agora faltam apenas alguns detalhes para eu encerrar ela. Vamos à eles:

Primeiro, como eu disse anteriormente, esta planilha rodará em máquinas que possuem as versões 2007, 2010 e 2013 do Excel. Sendo assim, esta macro funcionará em todas as máquinas ou preciso adaptar alguma coisa?

Um outro detalhe é que, se tiver como, ao abrir a planilha a recepcionista digite seu nome em uma tela, ou algo do tipo, e este nome vá para a célula C3, identificando assim de quem é a planilha. Uma vez preenchido tal campo, ela não poderá mais alterar, a menos que feche e abra a planilha novamente. Como eu tenho o nome da recepcionista na planilha, tem como o excel salvar o nome junto ao arquivo? Exemplo: "Relatório Diário da Recepção.xls - Joana". Ou algo que identifique de quem é a planilha.

Por último, mas não menos importante, é que eu coloquei uma macro para ser disparada na abertura da planilha, que faz com que todos os dados da mesma sejam apagados. Até aí está tudo certo. O problema é que, quando ela salva a planilha e me envia por e-mail, preciso abrir esta para alimentar outras planilhas. Mas, ao abrir a planilha que recebi por e-mail, a macro dispara e zera todo o conteúdo. Ou seja, preciso que a macro execute na planilha original, mas não execute quando eu abrir o e-mail que elas enviarem. Pensei em enviar a planilha como PDF, mas eu estou automatizando uma outra planilha que lerá o conteúdo das que eu recebo por e-mail e, por isto, tem que ser em excel.

Mais uma vez grato,

Nilton

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 18/02/2014 1:45 am
(@necron)
Posts: 117
Estimable Member
 

Bom Dia! Desculpa demora...

Respondendo a perguntas:

Primeiro, como eu disse anteriormente, esta planilha rodará em máquinas que possuem as versões 2007, 2010 e 2013 do Excel. Sendo assim, esta macro funcionará em todas as máquinas ou preciso adaptar alguma coisa?

Você não terá problemas com as versões 2007, 2010 e 2013. Com a 2003 não posso garantir, pois esta muito ultrapassada! Mas para que o envio de e-mail funcione normalmente, os computadores em questão tem que ter uma DLL chamada cdosys.dll localizada dentro da pasta System32 do Windows! Mas não se preocupe,pois geralmente ela ja vem no Windows por padrão. Essa DLL é utilizada com referencia para enviar os e-mails.

Um outro detalhe é que, se tiver como, ao abrir a planilha a recepcionista digite seu nome em uma tela, ou algo do tipo, e este nome vá para a célula C3, identificando assim de quem é a planilha. Uma vez preenchido tal campo, ela não poderá mais alterar, a menos que feche e abra a planilha novamente. Como eu tenho o nome da recepcionista na planilha, tem como o Excel salvar o nome junto ao arquivo? Exemplo: "Relatório Diário da Recepção.xls - Joana". Ou algo que identifique de quem é a planilha.

Como disse nos primeiros tópico ainda sou meu noob com Excel avançado! rsrs. Mas sei que para isso que você quer será necessário criar uma UserForm, e nessa userform terá um campo para informar o nome e logo em seguida ela clicar num botão "OK" e o nome será gravado. É possível também salvar a planilha com o nome da recepcionista. Vou tentar te ajudar com um exemplo muito simples de uma pessoa iniciante:

OBS: A senha que protege a planilha é: 123456 e deve ser alterada dentro do código da UserForm1. E Lembre-se de colocar senha no seu projeto para que nenhuma recepcionista espertinha tente mudar!

Por último, mas não menos importante, é que eu coloquei uma macro para ser disparada na abertura da planilha, que faz com que todos os dados da mesma sejam apagados. Até aí está tudo certo. O problema é que, quando ela salva a planilha e me envia por e-mail, preciso abrir esta para alimentar outras planilhas. Mas, ao abrir a planilha que recebi por e-mail, a macro dispara e zera todo o conteúdo. Ou seja, preciso que a macro execute na planilha original, mas não execute quando eu abrir o e-mail que elas enviarem. Pensei em enviar a planilha como PDF, mas eu estou automatizando uma outra planilha que lerá o conteúdo das que eu recebo por e-mail e, por isto, tem que ser em excel.

Muito estranho, pois a macro da ultima planilha que eu te disponibilizei, apenas tira uma Copia das Sheets e salva como "xlsx", ou seja, planilha do Excel não habilitada para macro! Portanto não é para acontecer de rodar nenhuma macro quando vc abrir a planilha que foi recebida via e-mail. Testa novamente.

Abraços!!

Fui Util? Click na "Mãozinha" ali do lado >>>> e agradeça.

 
Postado : 19/02/2014 6:57 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Oi Necron. Desculpe não ter me reportado antes, mas estive ausente uns dias.

Segui seus passos, refiz a planilha e ela, finalmente, está funcionando como eu imaginava. Entretanto, 4 itens (os últimos) talvez precisem ser revistos.

O primeiro é que ela simplesmente parou de executar a macro que limpava determinadas células ao abrir, automaticamente. Esta macro eu havia criado em um Módulo, e ela funcionava bem. Depois que fiz as adaptações das demais funções. ela simplesmente parou de funcionar.

O Segundo item é com relação à data e hora registrada na planilha. Usando a função =AGORA(), eu registro o momento em que a Recepcionista enviou o relatório via e-mail. Entretanto, ao abrir a cópia enviada, o Excel está atualizando estes dados para o momento da abertura, quando o correto seria ele simplesmente marcar quando a planilha foi enviada.

O terceiro, você sabe se existe como, apenas enquanto esta planilha estiver aberta, todas as demais funções, menus, barras, etc do excel simplesmente desaparecerem? Ficaria apenas a planilha em uma tela vazia. Quando fosse aberta qualquer outra planilha ou planilha nova, o excel funcionaria normalmente.

Por último, tentei colocar uma senha para cada recepcionista, mas o excel só reconheceu uma. Se houver esta função será bem interessante.

Era isto. Esta planilha será usada mais para a frente para alimentar outras, mas aí já é uma outra história. Se você puder me ajudar com estas quatro últimas dúvidas, te agradeço novamente,

Um abraço,

Nilton

PS: Em anexo, a planilha em seu último estágio.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 28/02/2014 2:00 am
(@necron)
Posts: 117
Estimable Member
 

Vamos lá!

O primeiro é que ela simplesmente parou de executar a macro que limpava determinadas células ao abrir, automaticamente. Esta macro eu havia criado em um Módulo, e ela funcionava bem. Depois que fiz as adaptações das demais funções. ela simplesmente parou de funcionar.

Retirei os Modulos da planilha, e coloquei sua Macro que apaga os dados ao abrir na "Pasta de Trabalho" no evento Workbooks_Open (), então quando a planilha é aberta a macro é executada automaticamente.

O Segundo item é com relação à data e hora registrada na planilha. Usando a função =AGORA(), eu registro o momento em que a Recepcionista enviou o relatório via e-mail. Entretanto, ao abrir a cópia enviada, o Excel está atualizando estes dados para o momento da abertura, quando o correto seria ele simplesmente marcar quando a planilha foi enviada.

Coloquei uma função que insere essa formula na celula automaticamente quando o usuário clica no botão enviar, a formula é adicionada na celula e em seguida ele copia a própria célula e cola como texto.

O terceiro, você sabe se existe como, apenas enquanto esta planilha estiver aberta, todas as demais funções, menus, barras, etc do excel simplesmente desaparecerem? Ficaria apenas a planilha em uma tela vazia. Quando fosse aberta qualquer outra planilha ou planilha nova, o excel funcionaria normalmente.

Eu fiz isso no evento WorkBook_Open da planilha na "Pasta de Trabalho", o problema é que: Se o usuário abrir sua planilha no mesmo momento que ele tiver usando outra, a outra também ficara sem os menus, mas a partir do momento que ele fechar sua planilha, a outra voltara a aparecer os menus. OBS: Não consegui ocultar a "Sheets" la em baixo.

Para reexibir os Menus aperto "CTRL + D", ou "Alt + F11" para abrir o editor VBA.

Por último, tentei colocar uma senha para cada recepcionista, mas o excel só reconheceu uma. Se houver esta função será bem interessante.

Fico te devendo! Solicite ajuda aos universitários talvez em outro tópico!

OBS: Teste bem a planilha para ver se não fiz nenhuma cagadinha de iniciante no VBA.

Fui Util? Click na "Mãozinha" ali do lado >>>> e agradeça.

 
Postado : 28/02/2014 7:16 am
(@necron)
Posts: 117
Estimable Member
 

Ola!

Será que eu consegui lhe ajudar pelo menos em partes?

Abraços

Fui Util? Click na "Mãozinha" ali do lado >>>> e agradeça.

 
Postado : 06/03/2014 2:14 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Olá Necron

Coloquei a planilha para funcionar nestes dois últimos dias (estávamos fechados devido ao feriadão) e funcionou perfeitamente.
O único problema que apareceu e que ainda estou investigando, foi o fato absurdo de que, tendo colocado a planilha em duas máquinas de igual configuração, com o mesmo Windows 7 32 bite e com a mesma versão 2010 do Excel, em uma máquina applanilha funciona e na outra não. Quando clico no botão "Enviar email" da erro. Ao depurar o erro, mostra o erro na parte do código responsável pelo envio do arquivo PDF. Se coloco esta parte como comentário, a planilha funciona.

Como eu disse, a planilha está funcionando perfeitamente, fora este probleminha. Se você ou algum outro usuário tiver uma idéia do que pode estar acontecendo, fico grato, bem como a questão da senha, que citei a mensagem anterior.

Abs

Nilton

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 07/03/2014 3:36 am
(@necron)
Posts: 117
Estimable Member
 

Nilton,

Faça o seguinte, vá até o diretório: C:Program FilesCommon Filesmicrosoft sharedOFFICE14
E verifique se dentro da pasta existe um arquivo com o nome de: EXP_PDF.DLL

OBS: A pasta OFFICE14 pode mudar de nome dependendo da versão do seu Office, mas geralmente se parece com isso.

Caso a DLL não esteja na pasta, experimente coloca-la e faça o teste:

Não sei se apenas colocando vai funcionar direitinho, qualquer coisa avisa.

Fui Util? Click na "Mãozinha" ali do lado >>>> e agradeça.

 
Postado : 07/03/2014 5:11 am
(@necron)
Posts: 117
Estimable Member
 

Se não funcionar, tente instalar esse suplemento:
http://www.microsoft.com/pt-br/download ... .aspx?id=7

Não sei porque alguns Office não vem com essa DLL, tive um problema parecido com um usuário final de uma das minha planilhas.

Qualquer coisa avisa.

Fui Util? Click na "Mãozinha" ali do lado >>>> e agradeça.

 
Postado : 07/03/2014 5:18 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa noite, Necron.

Efetuei os dois métodos como você citou, inclusive registrando a DLL e, misteriosamente, a macro continua dando erro em uma máquina, enquanto que nas outras funciona perfeitamente.

Tirando este mistério, a planilha está funcionando perfeitamente, bem como o devido envio por e-mail.

Agora, tomo a liberdade de solicitar ajuda para a continuação do problema.

Esta planilha que acabou de ser montada, chamada Relatorios, irá alimentar outra, ou outras. A princípio, bastaria eu ir na célula da nova planilha e “apontar” para a célula que contém a informação nesta criada.

Entretanto, este método simplesmente não funciona para meu problema.

Explico: A Planilha “Relatórios” irá alterar diariamente e irá alimentar a nova.

Em resumo, a situação seria a seguinte.

Existe um diretório e dentro dela existirá uma planilha que chamaremos de “Acumulado”. Diariamente, recebo as planilhas das recepcionistas, jogo elas dentro deste diretório, abro a planilha “Acumulado” e, através de alguma macro ou algo do gênero, em um botão, “importo" os dados das planilhas “Relatórios” para suas respectivas células. Feito isto, após salvar a planilha “Acumulado”, excluo as planilhas “Relatórios” para, no dia seguinte, executar os mesmos procedimentos.

Os dados inseridos na planilha “Acumulado”, irão fazer parte de outras planilhas onde montarei gráficos com os mesmos. Tentei construir uma macro para tal, mas sempre que troco a planilha "Relaório", os dados da planilha "Acumulado" também se alteram.

O conteúdo da planilha "Acumulado" será um resumo de cada planilha "Relatório", sendo que para cada Recepcionista haverá uma coluna com as datas das planilhas enviadas e os dados nelas contidos.

Novamente grato e no aguardo,

Abs.

Nilton

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 20/03/2014 9:05 pm
 jrm
(@jrm)
Posts: 34
Eminent Member
 

Boa noite
Necron

OBS: Não consegui ocultar a "Sheets" la em baixo.

para ocultar as abas em baixo basta ir nas opções avançadas do excel e desmarcar a opção "mostrar separadores e folhas"

Espero ter ajudado

 
Postado : 24/03/2014 3:42 pm
(@ckymiller)
Posts: 39
Eminent Member
 

Eu uso essa simples macro pra envio de email.

Sub teste()
    'Select the range of cells on the active worksheet.
    ActiveSheet.Range("P2:T2").Select
    
    ' Show the envelope on the ActiveWorkbook.
    ActiveWorkbook.EnvelopeVisible = True
    
    With ActiveSheet.MailEnvelope
        .Item.To = "teste@teste.com.br"
        .Item.Subject = [E2].Value & "-" & [E1].Value & "-" & Format(Now, "dd-mm-yyyy")
        .Item.Send
    End With
End Sub

Já manda com o titulo predeterminado.

Abraços

 
Postado : 25/03/2014 8:46 am
Página 1 / 2