CopyToRange variável
Enviado: 23 Out 2016 às 23:57
por JNilson
Amigos,
Tenho uma pasta de trabalho com 3 planilhas: A, B e C.
Nas planilhas A e B, estão os dados que pretendo filtrar. A planilha C receberá os dados das planilhas A e B.
Os critérios de pesquisa não mudam.
Quero primeiramente filtrar os dados da planilha A. Depois, numa linha abaixo, filtrar os dados da planilha B.
No entanto não estou conseguindo fazer o CopyToRange variável.
Se puderem me ajudar, agradeço.
Re: CopyToRange variável
Enviado: 24 Out 2016 às 00:45
por rahfaeu
Olá JNilson, bom dia!
Eu utilizaria o código abaixo para sua questão, veja se lhe atende:
Código: Selecionar todosSub IntervaloRelativo()
Dim i As Long
'Limpa o local que receberão os dados (Planilha C)
Sheets("C").Range("A2:C1048576").ClearContents
'Copia dados da selação relativa da Planilha A
Sheets("A").Range("A2:C" & Sheets("A").Range("A1048576").End(xlUp).Row).Copy
'Identifica linha disponivel sem informação na Planilha C
i = Sheets("C").Range("A1048576").End(xlUp).Offset(1, 0).Row
'Cola os dados copiados da Planilha A para a C
Sheets("C").Range("A" & i).PasteSpecial xlPasteValuesAndNumberFormats
'Copia dados da selação relativa da Planilha B
Sheets("B").Range("A2:C" & Sheets("B").Range("A1048576").End(xlUp).Row).Copy
'Identifica linha disponivel sem informação na Planilha C
i = Sheets("C").Range("A1048576").End(xlUp).Offset(1, 0).Row
'Cola os dados copiados da Planilha A para a C
Sheets("C").Range("A" & i).PasteSpecial xlPasteValuesAndNumberFormats
'Limpa a área de transferência (últimos dados copiados)
Application.CutCopyMode = False
Sheets("C").Activate
Range("A1").Activate
End Sub
Re: CopyToRange variável
Enviado: 26 Out 2016 às 23:12
por JNilson
Amigo, muito obrigado pela atenção.
Eu entendo pouquíssimo de VBA, por isso, não consegui aplicar o seu código ao meu caso.
Coloco abaixo o código que estou tentando fazer funcionar:
Tenho 6 planilhas no meu projeto: planilha 2016, planilha 2017, planiha 2018, planiha 2019, planilha 2020 e Relatório.
Coloquei uma condição para, de acordo com o valor da célula "B14" da planilha Relatório, o excel filtrar os dados da de determinado planilha e copiar para a planilha Relatório. Por exemplo: se o valor da célular "B14" for 2016, buscará os dados da planilha 2016. Até aí ocorre tudo bem.
No entanto, quero que, se a célula B14 estiver vazia, quero que filtre os dados de todas a plnilhas: Filtre os dados planilha 2016, depois, logo abaixo, filtre os dados da planilha 2017 e assim por diante.
Não estou conseguindo fazer isso. Ele copia os dados da planilha 2016, e quando vai copiar os dados da planilha 2017, aparece o erro "O intervalo de extração tem um nome de campo ausente ou inválido".
Se puder me ajudar, agradeço.
Segue o código abaixo:
Public Sub GerarR()
‘Filtrar dados da planilha 2016
If shtRelatorio.Range("b14").Value = 2016 Then
Sheets("Planilha 2016").Range("B2:J722").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=shtRelatorio.Range("criterios"), CopyToRange:=shtRelatorio.Range("LocalRelatorio"), Unique:=False
'Filtrar dados da Planilha Planilha 2017
ElseIf shtRelatorio.Range("b14").Value = 2017 Then
Sheets("Planilha 2017").Range("B2:J722").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=shtRelatorio.Range("criterios"), CopyToRange:=shtRelatorio.Range("LocalRelatorio"), Unique:=False
‘Filtrar Dados da Planilha Planilha 2018
ElseIf shtRelatorio.Range("b14").Value = 2018 Then
Sheets("Planilha 2018").Range("B2:J722").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=shtRelatorio.Range("criterios"), CopyToRange:=shtRelatorio.Range("LocalRelatorio"), Unique:=False
‘Filtrar Dados da Planilha Planilha 2019
ElseIf shtRelatorio.Range("b14").Value = 2019 Then
Sheets("Planilha 2019").Range("B2:J722").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=shtRelatorio.Range("criterios"), CopyToRange:=shtRelatorio.Range("LocalRelatorio"), Unique:=False
‘Filtrar dados da Planilha 2020
ElseIf shtRelatorio.Range("b14").Value = 2020 Then
Sheets("Planilha 2020").Range("B2:J722").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=shtRelatorio.Range("criterios"), CopyToRange:=shtRelatorio.Range("LocalRelatorio"), Unique:=False
' Filtrar os dados de todas as as planilhas
ElseIf shtRelatorio.Range("b14").Value = "" Then
Sheets("Planilha 2016").Range("B2:J722").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=shtRelatorio.Range("f2:h3"), CopyToRange:=shtRelatorio.Range("f7:j7"), Unique:=False
shtRelatorio.Range("f722").End(xlUp).Offset(1, 0).Select
Sheets("Planilha 2017").Range("B2:J722").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=shtRelatorio.Range("f2:h3"), CopyToRange:=ActiveCell, Unique:=False
End If
End Sub
CopyToRange variável
Enviado: 27 Out 2016 às 06:30
por DJunqueira
O erro poderia estar na linha abaixo onde o nome do intervalo não estaria definido na sua planilha de 2017.
CriteriaRange:=shtRelatorio.Range("criterios"), CopyToRange:=shtRelatorio.Range("LocalRelatorio"), Unique:=False