Notifications
Clear all

Ajuda VBA - Copiar e Colar

15 Posts
2 Usuários
0 Reactions
2,421 Visualizações
(@oliveirara)
Posts: 16
Active Member
Topic starter
 

Pessoal, bom dia,

Antes de tudo, aviso que sou leigo em VBA. Meu conhecimento "beira" o comando de gravação de macros. Rsrs

Tenho a necessidade de criar uma macro para gerar um arquivo PDF.
Para fazer tal ação, preciso copiar linha por linha da planilha "RESUMO ND" e colar na planilha "ND" na célula N10.
Posterior a isso ele vai vincular os dados e salvo a planilha em PDF.

Gravei uma macro que faz perfeitamente isso. Inclui apenas uma variavel para salvar o arquivo PDF na pasta que quero.

Meu unico problema é que ele faz isso somente para uma linha. Como posso adaptar essa macro para executar enquanto houverem dados na planihla de origem "RESUMO ND"?

Sei que seria fácil de resolver, acrescentando uma variável "Lin" e que faria o Loop.

Porém não estou conseguindo fazer.

Alguém pode me ajudar?

VBA gravado e adaptado:

Sub Macro1()

Dim NomeArq As String

NomeArq = Sheets("ND").Range("N12")


''Selecione célula que será copiada

    Sheets("RESUMO ND").Select
    Range("A2").Select
    
''Cola dados na planilha "ND"

    Selection.Copy
    Sheets("ND").Select
    Range("N10").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    
''Salva Planilha em PDF

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    NomeArq & "FIN" & " " & Lin, Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=True
End Sub
 
Postado : 04/05/2015 8:58 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Veja se é isto :

Perceba que na instrução : Range("A2:" & "A" & ultimaLinha) - estamos considerando somente a Coluna "A", se tiver mais colunas, ajuste.

Sub Macro13()

Dim NomeArq As String
Dim ultimaLinha As Long

NomeArq = Sheets("ND").Range("N12")

''Selecione célula que será copiada

Sheets("RESUMO ND").Select
ultimaLinha = Range("A1048576").End(xlUp).Row 'verifica qual a ultima celula preenchida

'Uma vez que selecionou a aba, não precisa selecionar o Range,
'podemos copiar diretamente sem selecionar
'Range("A2").Select
Range("A2:" & "A" & ultimaLinha).Copy 'Estou referenciando somente a Coluna A, ajuste as Colunas se tiver mais
'Selection.Copy

''Cola dados na planilha "ND"

Sheets("ND").Select
Range("N10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False

''Salva Planilha em PDF
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
NomeArq & "FIN" & " " & Lin, Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=True
End Sub

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

 
Postado : 04/05/2015 10:06 am
(@oliveirara)
Posts: 16
Active Member
Topic starter
 

Olá Mauro,

Primeiramente agradeço sua ajuda!

Porém seu código esta verificando todos os dados da planilha "RESUMO ND" e colando esse range na planilha "ND".
Talvez, tenha me expressado mal, mas preciso que copie e cole linha por linha desse range e não toda a coluna.
Que faça um loop do processo copiando e colando a próxima linha.

Pode me ajudar novamente?

Obrigado!

 
Postado : 04/05/2015 11:45 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Oliveira, fiquei em duvida, na sua rotina você tem :

''Selecione célula que será copiada

Sheets("RESUMO ND").Select - Seleciona a Aba "RESUMO ND"
Range("A2").Select - Seleciona a Celula "A2"

''Cola dados na planilha "ND"

Selection.Copy - Copia
Sheets("ND").Select - Seleciona a Aba "ND"
Range("N10").Select - E cola em "N10"
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Na rotina que enviei, é verificado a Última Linha com Dados na Coluna "A", copia estas Linhas, e depois cola na Aba "ND" a partir da Celula "N10", ou seja copia e cola todas as linhas referente a Coluna "A".

Não entendi a questão do LOOP linha por linha se podemos copiar de uma vez só.
Agora se estiver querendo dizer com a expressão LINHA que seria de "A2:F2", e não somente a Celula"A2", é só alterar na rotina a letra conforme citei :
Alterando :
Range("A2:" & "A" & ultimaLinha) para
Range("A2:" & "F" & ultimaLinha)

Se não for isto, detalhe melhor, ou anexe um modelo reduzido e compactado de acordo com as regras do forum, reproduzindo qual o resultado pretendido.

[]s

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

 
Postado : 04/05/2015 12:22 pm
(@oliveirara)
Posts: 16
Active Member
Topic starter
 

Mauro,

Estou anexando o arquivo para melhor entendimento. Pois reconheço que fica difícil você me ajudar "As cegas".

Abrindo a base, note o seguinte:
A Aba "ND" contém o arquivo com as fórmulas que irá gerar o arquivo PDF.
Na aba "RESUMO ND" existe a coluna "ND" que contém os números das faturas e que devo gerar o PDF de cada linha, mesmo que repetida.

Para isso eu copio linha por linha da coluna "ND" da Aba "RESUMO ND" e colo na Aba "ND", na célula N10 "Fatura Nº" e gero o PDF.

Por isso a necessidade de ir linha por linha, colando na outra planilha e salvando o respectivo PDF.

Tenho 124 "Faturas" que constam na Aba "Resumo ND" e devo gerar 124 PDF's.

Obrigado mais uma vez!

 
Postado : 04/05/2015 12:50 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Oliveira, aqui no serviço não tenho como ver seu arquivo, mas pela o que explicou agora, entendi que tem na Coluna "A" nºs das Faturas e quer gerar um arquivo para cada fatura, ou seja copia uma, gera o PDF e depois outra e gera outro arquivo e assim por diante, se for isto, veja se agora acertamos, se não for, masi tarde em casa vejo seu arquivo.

Sub Macro23()

    Dim NomeArq As String
    Dim ultimaLinha As Long
    Dim snRG As Range

    NomeArq = Sheets("ND").Range("N12")

    Sheets("RESUMO ND").Select
    ultimaLinha = Range("A1048576").End(xlUp).Row 'verifica qual a ultima celula preenchida

    'Definimos o Range  a ser copiado
    Set snRG = Range("A2:" & "A" & ultimaLinha)
    
    'Fazemos o Loop em cada Celula
    For Each sCel In snRG
        
        'Se for só dados envia direto para o Range N10
        sCel.Copy Destination:=Worksheets("ND").Range("N10")
        
        Sheets("ND").Select

        ''Salva Planilha em PDF
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        NomeArq & "FIN" & " " & Lin, Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=True
        
    Next
    
End Sub

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

 
Postado : 04/05/2015 1:39 pm
(@oliveirara)
Posts: 16
Active Member
Topic starter
 

Mauro,

Ainda não é isso. Agora ele está gerando o PDF da planilha de fatura total. Não está fazendo fatura por fatura.
Tranquilo, eu entendo. Se puder dar uma olhada com mais calma em casa, eu agradeço imensamente!

Obrigado!

 
Postado : 04/05/2015 1:45 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Oliveira, estava olhando o seu arquivo e primeiramente preciso saber o que temos em "N12":

NomeArq = Sheets("ND").Range("N12") - em seu modelo este campo é vazio
Como este campo está vazio ele salva sempre o mesmo arquivo.

e depois na linha que exporta como PDF:
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
NomeArq & "FIN" & " " & Lin, Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=True
A Variável "Lin" vem de onde ?
Outra coisa é refernte a:
Na aba "RESUMO ND" existe a coluna "ND" que contém os números das faturas e que devo gerar o PDF de cada linha, mesmo que repetida.
Você utiliza o PROCV para retornar os dados referente a Nº da Fatura, e como temos Nºs repetidos a NF será sempre a mesma.

[]s

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

 
Postado : 04/05/2015 3:33 pm
(@oliveirara)
Posts: 16
Active Member
Topic starter
 

Mauro,

Criei a variável (NomeArq = Sheets("ND").Range("N12") - em seu modelo este campo é vazio) para definir a pasta de destino que onde salvará os PDF's.
A váriavel Lin que havia criado para tentar fazer esse "Loop". Mas peço que desconsidere.

Quanto à PROCV é isso mesmo. Ele deve salvar, mesmo que repetido.

Obrigado!

 
Postado : 04/05/2015 3:37 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Mauro,

Criei a variável (NomeArq = Sheets("ND").Range("N12") - em seu modelo este campo é vazio) para definir a pasta de destino que onde salvará os PDF's.
A váriavel Lin que havia criado para tentar fazer esse "Loop". Mas peço que desconsidere.
Quanto à PROCV é isso mesmo. Ele deve salvar, mesmo que repetido.
Obrigado!

Se NomeArq se refere ao caminho, qual será o NOME do arquivo a ser salvo ?
E tambem tem de levar em conta que não é possivel SALVAR arquivos com o mesmo nome, tem de definir um diferencial.

[]s

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

 
Postado : 04/05/2015 3:51 pm
(@oliveirara)
Posts: 16
Active Member
Topic starter
 

Mauro,

Peço desculpas, porém o arquivo anterior que havia enviado estava sem este campo do nome do arquivo.
Inseri a informação. A célula "N12" consta o local que irá salvar com o nome do arquivo já definido.

Quanto a repetição, eu entendi o que você quis dizer, e deixarei somente um registro na planilha. Sem repetições.
Portanto peço que desconsidere os valores repetidos.

Obrigado.

 
Postado : 04/05/2015 4:04 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Se não teremos mais Numeros Repetidos na Coluna "A", veja se é isto :

Lembre-se não pode haver numeros repetidos, neste outro modelo que postou ainda tem repetidos :

Sub ExportaComoPdf()

    Dim NomeArq As String
    Dim ultimaLinha As Long
    Dim snRG As Range

    Sheets("RESUMO ND").Select
    ultimaLinha = Range("A1048576").End(xlUp).Row 'verifica qual a ultima celula preenchida

    'Definimos o Range  a ser copiado
    Set snRG = Range("A2:" & "A" & ultimaLinha)
    
    'Fazemos o Loop em cada Celula
    For Each scel In snRG
        
        'Se for só dados envia direto para o Range N10
        scel.Copy Destination:=Worksheets("ND").Range("N10")
        
        NomeArq = Sheets("ND").Range("N12")
        
        Sheets("ND").Select
        
        'Salva Planilha em PDF
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        NomeArq & "FIN", Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=True
    
    Next
    
End Sub

[]s

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

 
Postado : 04/05/2015 4:36 pm
(@oliveirara)
Posts: 16
Active Member
Topic starter
 

Mauro,

Agora está PERFEITO!

Agradeço imensamente sua atenção e paciência!

Muito Obrigado!

 
Postado : 05/05/2015 5:01 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Caso seja necessário reabrir o tópico, o autor poderá enviar uma MP para um dos moderadores solicitando o desbloqueio.

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

 
Postado : 05/05/2015 5:48 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Regras do forum:

Upload
Devido a ultrapassagem da marca de 1,5Gb de armazenamento de arquivos na hospedagem do Planilhando, limitaremos o tamanho de cada arquivo para 2Mb sendo obrigatório o uso dos formatos .zip - .rar - .ice visto a gratuidade e não geração de recursos para bancar o site.

Assim sendo, todos os anexos não compactados deste tópico foram removidos.

Por favor leia as regras (link na minha assinatura), e passe a compactar todos os seus anexos.

Obrigado,

Fernando

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

 
Postado : 05/05/2015 7:25 am