none
macro: filtrar dados, copiar os dados filtrados apenas algumas colunas p outra planilha e enviar por email e após enviar o arquivo em anexo, deletar o arquivo criado no computador.

    Question

  • quero, mas não consigo, eheheh. é difícil essas coisas de macro.

    tenho excel 2003 e outlook 2003.

    Tenho uma planilha chamada pedidos_teste, o arquivo do excel está no link:

    https://skydrive.live.com/redir?resid=2C97E119438351EC!615&authkey=!AMJcpmpx1Zki0ig

    quero criar uma macro que pudesse:

    filtrar a coluna conferido, apenas o sim, copiar todos os dados para uma nova planilha temporária, sem as colunas: n, o, p e q.

    e enviar para um e-mail fixo, com o título do assunto: atualização do "pegar o texto sempre da coluna A, linha 1" e no corpo do texto:

    Boa tarde, favor atualizar o site com a planilha em anexo.

    Obrigado.

    é isso.

    pra mim é muito complicado, mas acho que alguém já fez algo semelhante, eu não achei na pesquisa, se puderem indicar ou ajudar, será muito bom pra nós do serviço.

    SE pudesse ajudar, será ótimo, sem palavras pra agradecer, pois preciso muito no serviço.

    Obrigado.

    Carmelito.

    Sunday, January 27, 2013 2:47 PM

All replies

  • com ajuda de outro fórum, o amigo conseguiu gerar a planilha acima, mas perde toda a formatação, será que alguém pode ajudar como não perder a formatação e aparecer os dados sem ser utilizados fórmulas? obrigado.

    o link do arquivo é esse:

    https://skydrive.live.com/redir?resid=2C97E119438351EC!616&authkey=!AODJylKKKVA1alo

    Sunday, January 27, 2013 10:49 PM
  • Olá, boa noite.

    Uma sugestão que dou para evitar a perda de formatação é utilizar 'Filtro Avançado' ao invés de 'Auto Filtro'.

    Para isso vc precisará de uma região contendo os critérios (se for apenas 1, como no caso, vc pode colocar no próprio código) e uma região para resultado, contendo os TÍTULOS das colunas que deseja exibir. O interessante é que a ordem não precisa ser a mesma, não precisa ter todas as colunas e pode inclusive haver repetições.

    Assim, a planilha de destino deve possuir previamente esses títulos.

    Uma dica que dou é nomear os intervalos, pra facilitar a programação e dar mais flexibilidade.

    Espero que ajude.


    Filipe Magno

    Sunday, January 27, 2013 11:42 PM
  • parece ótimo, mas não sei nem por onde começar, eu criei um botão, então o filtro um amigo de outro forum ajudou, e peguei outro código pra enviar email, então ficou assim, e como seria o seu código para o código abaixo? Tem um modelo como esse, ou podes me ajudar?

    criei o botão

    e coloquei o seguinte código:

    Sub Copiar_AleVBA()
    Application.ScreenUpdating = False
       Sheets("plan1").Cells.ClearContents
       ThisWorkbook.Sheets("edital").Range("a1:m1000").Copy
      Sheets("Plan1").Range("A" & Rows.Count).End(xlUp).PasteSpecial xlPasteValues
       Application.CutCopyMode = False
       Call Delet_AleVBA
       Application.ScreenUpdating = True
    End Sub

    Sub Delet_AleVBA()
        Dim lRows As Long
        Sheets("Plan1").Select
        With Range("A7:M7")
         .AutoFilter
         .AutoFilter Field:=5, Criteria1:="sim"
        End With
        Application.Calculation = xlCalculationManual
        For lRows = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
            If Cells(lRows, 1).EntireRow.Hidden = True Then Cells(lRows, 1).EntireRow.Delete
        Next lRows
        ActiveSheet.AutoFilterMode = False
        Application.Calculation = xlCalculationAutomatic
        
        Call EnviarEmailPlanilhaEspecifica
    End Sub

    Sub EnviarEmailPlanilhaEspecifica()
    2   Dim NovoArquivoXLS As Workbook
    3   Dim sPlanAEnviar As String
    4   Dim sExcluirAnexoTemporario As String
    5
    6   'Define a planilha que será enviada por email. Ex.: Plan1, Balancete, Lista De Nomes, etc
    7    sPlanAEnviar = "Plan1"
    8
    9    'Cria um novo arquivo excel
    10   Set NovoArquivoXLS = Application.Workbooks.Add
    11
    12   'Copia a planilha para o novo arquivo criado
    13   ThisWorkbook.Sheets(sPlanAEnviar).Copy Before:=NovoArquivoXLS.Sheets(1)
    14
    15   'Salva o arquivo
    16   NovoArquivoXLS.SaveAs ThisWorkbook.Path & "\" & sPlanAEnviar & ".xls"
    17  sExcluirAnexoTemporario = NovoArquivoXLS.FullName
    18
    19   'Envia o email
    20   NovoArquivoXLS.SendMail "xxxx@gmail.com", "Título do Email teste"
    21
    22   'Fecha o arquivo novo
    23   NovoArquivoXLS.Close
    24
    25  'Exclui o arquivo criado apenas para ser enviado.
    26  Kill sExcluirAnexoTemporario
    27  Sheets("Plan1").Cells.ClearContents
    28  End Sub

    Monday, January 28, 2013 11:23 AM
  • Olá bom dia.

    Estou sem tempo pra escrever todo o código agora, mas para não te deixar esperando, vaí aí a parte principal da sugestão que te dei (Filtro Avançado):

    'Na Célula A1 eu escrevi: conferido
    'Na Célula A2 eu escrevi: sim
    
    'Eu prefiro nomear o intervalo na planilha, mas opcionalmente vc pode nomear aqui, como está feito, ou não nomear se preferir, escrevendo os intervalos diretamente no 'AdvancedFilter' (não recomendo)
    Plan1.Range("A1:A2").Name = "Criterios"
    Plan1.Range("A7:M1000").Name = "DadosTabela"
    Plan2.Range("A7:M7").Name = "LocalSaida"  'É preciso que os TÍTULOS EXISTAM previamente nas células "A7:M7" da Planilha de saída.
    
    
    Dados = "DadosTabela"
    CriteriosMacro = "Criterios"    'Você pode usar um intervalo na planilha para inserir mais critérios (1ª linha os títulos e as demais os critérios desejados)
    Resultado = "LocalSaida" 'Obs.: É opcional nomear o intervalo, mas eu sugiro que você o faça
    
    Range(Dados).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
                Range(CriteriosMacro), CopyToRange:=Range(Resultado), unique:=False


    Note que a 'Plan2' acima não é o nome da Aba, mas sim o CodeName interno.

    Veja se com esse código vc consegue adaptar o restante.

    Obs.: Não é necessário nem copiar a aba nem apagar resíduos anteriores (a própria função faz isso). Basicamente vc vai colocar esse código e o que envia o email, nada mais.

    Espero que ajude.


    Filipe Magno

    Monday, January 28, 2013 3:19 PM
  • boa tarde!
    Será que podem me ajudar, preciso enviar um e-mail, criei uma planilha de excel, com um botão, o botão tem vários códigos, entre eles, o de enviar e-mail que segue, no entanto, preciso inserir no assunto o título: Segue em anexo o edital x (  x corresponde a célula A1 do arquivo criado).
    e no body escrever: Segue o x (x é a célula A1 do arquivo criado) atualizado, favor, inserir o arquivo em anexo na intranet.
    Obrigado.
    Atenciosamente,
    fulano.


    Isso que eu queria que constasse no código abaixo, quem puder ajudar, será bem vindo.


    Sub EnviarEmailPlanilhaEspecifica()
    2 Dim NovoArquivoXLS As Workbook
    3 Dim sPlanAEnviar As String
    4 Dim sExcluirAnexoTemporario As String
    5
    6 'Define a planilha que será enviada por email. Ex.: Plan1, Balancete, Lista De Nomes, etc
    7 sPlanAEnviar = "Plan1"
    8
    9 'Cria um novo arquivo excel
    10 Set NovoArquivoXLS = Application.Workbooks.Add
    11
    12 'Copia a planilha para o novo arquivo criado
    13 ThisWorkbook.Sheets(sPlanAEnviar).Copy Before:=NovoArquivoXLS.Sheets(1)
    14
    15 'Salva o arquivo
    16 NovoArquivoXLS.SaveAs ThisWorkbook.Path & "\" & sPlanAEnviar & ".xls"
    17 sExcluirAnexoTemporario = NovoArquivoXLS.FullName
    18
    19 'Envia o email
    20 NovoArquivoXLS.SendMail "xxxx@xxx.x", "Título do Email teste"
    21
    22 'Fecha o arquivo novo
    23 NovoArquivoXLS.Close
    24
    25 'Exclui o arquivo criado apenas para ser enviado.
    26 Kill sExcluirAnexoTemporario
    '27 Sheets("Plan1").cell.ClearContents
    28 End Sub
    Monday, January 28, 2013 6:26 PM