Estou tentando desenvolver um código para exportar relatórios de forma automatizada e otimizar meu tempo no trabalho, porém estou com dificuldade em algumas etapas.
Vou colocar passo a passo qual é a minha intenção, para exemplificar melhor.
O que eu quero fazer?
1. Exportar o relatório do banco de dados (ok)
2. Deletar algumas colunas (ok)
3. Inserir fórmula Cont.ses e excluir linhas repetidas
4. Selecionar intervalo e deixar apenas registros exclusivos
5. Gerar tabela dinâmica
6. Gerar gráfico dinâmico (ok)
7. Enviar resultado por email
Qual ponto está dando problema?
Na etapa 3 (Inserir fórmula Cont.ses e excluir linhas repetidas) o meu código apresenta o erro "Erro em tempo de execução 1004 o Objeto range global falhou".
Neste ponto, estou tentando inserir um código que seja capaz de varrer o meu arquivo e identificar qual a ultima linha das minhas duas primeiras colunas, adicionar a formula (cont.ses) à uma terceira coluna, aplicá-la para esta nova coluna inteira. Depois o meu código precisa selecionar o intervalo completo das três colunas e manter apenas os registros exclusivos.
Minha intenção é selecionar apenas os registros exclusivos para gerar um gráfico dinâmico (parte que estou conseguindo fazer).
Qual é o meu problema?
O problema é que preciso gerar um código que funcione para qualquer quantidade de linhas e intervalo que eu exporte (colunas não variam), pois como esse é um relatório de produção, ele sempre será variável. Consigo que o meu código identifique a ultima linha, mas não que depois selecione e aplique as formulas e gere a tabela pra qualquer intervalo que surja.
Alguma ajuda seria muito bem vinda, por favor.
Segue o código que estou tentando.
Sub Relatorio ()
Dim Caminho As String
Dim linha As Integer
Dim pergunta As Integer
Dim ult_lin As Long, ult_lin2 As Long
Dim intervalo As Range
pergunta = MsgBox("Deseja Exportar este Relatório?", vbYesNo)
If pergunta = vbYes Then
' Abrir arquivo
Caminho = ThisWorkbook.Path
Workbooks.Open ("C:\Users\Usuários Convidados\Desktop\VBA\Testes\dadosbrutos")
Sheets("Sheet").Select
Sheets("Sheet").Activate
'Excluir colunas Macro
Columns("C:E").Delete
' Adicionar formula contagem
ult_lin = Range("A3").End(xlDown).Row 'encontrar ultima linha da coluna A
ult_lin2 = Range("B3").End(xlDown).Row 'encontrar ultima linha da coluna B
Range("C3").Value = "Contagem"
Range("C4").Value = Application.WorksheetFunction.CountIfs(Range("A3:A"), Cells(ult_lin, 1).Value, Range("B3:B"), Cells(ult_lin2, 2).Value) 'AQUI APRESENTA O ERRO MENCIONADO
Selection.AutoFill Destination:=Cells(ult_lin, 3) 'POSSÍVEL PONTO DE ERRO, POIS NÃO CONSIGO USAR ult_lin COM OBJETO RANGE.
' deixar somente registros exclusivos
For Each cell In Worksheets("Sheet").Range("A1").CurrentRegion
If Cells <> "" Then
AdvancedFilter Action:=xlFilterInPlace, Unique:=True 'não sei qual range botar aqui no inicio para completar o comando a lado
End If
Next
End Sub
Pergunta
vbando
Boa tarde a todos!
Estou tentando desenvolver um código para exportar relatórios de forma automatizada e otimizar meu tempo no trabalho, porém estou com dificuldade em algumas etapas.
Vou colocar passo a passo qual é a minha intenção, para exemplificar melhor.
O que eu quero fazer?
1. Exportar o relatório do banco de dados (ok)
2. Deletar algumas colunas (ok)
3. Inserir fórmula Cont.ses e excluir linhas repetidas
4. Selecionar intervalo e deixar apenas registros exclusivos
5. Gerar tabela dinâmica
6. Gerar gráfico dinâmico (ok)
7. Enviar resultado por email
Qual ponto está dando problema?
Na etapa 3 (Inserir fórmula Cont.ses e excluir linhas repetidas) o meu código apresenta o erro "Erro em tempo de execução 1004 o Objeto range global falhou".
Neste ponto, estou tentando inserir um código que seja capaz de varrer o meu arquivo e identificar qual a ultima linha das minhas duas primeiras colunas, adicionar a formula (cont.ses) à uma terceira coluna, aplicá-la para esta nova coluna inteira. Depois o meu código precisa selecionar o intervalo completo das três colunas e manter apenas os registros exclusivos.
Minha intenção é selecionar apenas os registros exclusivos para gerar um gráfico dinâmico (parte que estou conseguindo fazer).
Qual é o meu problema?
O problema é que preciso gerar um código que funcione para qualquer quantidade de linhas e intervalo que eu exporte (colunas não variam), pois como esse é um relatório de produção, ele sempre será variável. Consigo que o meu código identifique a ultima linha, mas não que depois selecione e aplique as formulas e gere a tabela pra qualquer intervalo que surja.
Alguma ajuda seria muito bem vinda, por favor.
Segue o código que estou tentando.
Sub Relatorio () Dim Caminho As String Dim linha As Integer Dim pergunta As Integer Dim ult_lin As Long, ult_lin2 As Long Dim intervalo As Range pergunta = MsgBox("Deseja Exportar este Relatório?", vbYesNo) If pergunta = vbYes Then ' Abrir arquivo Caminho = ThisWorkbook.Path Workbooks.Open ("C:\Users\Usuários Convidados\Desktop\VBA\Testes\dadosbrutos") Sheets("Sheet").Select Sheets("Sheet").Activate 'Excluir colunas Macro Columns("C:E").Delete ' Adicionar formula contagem ult_lin = Range("A3").End(xlDown).Row 'encontrar ultima linha da coluna A ult_lin2 = Range("B3").End(xlDown).Row 'encontrar ultima linha da coluna B Range("C3").Value = "Contagem" Range("C4").Value = Application.WorksheetFunction.CountIfs(Range("A3:A"), Cells(ult_lin, 1).Value, Range("B3:B"), Cells(ult_lin2, 2).Value) 'AQUI APRESENTA O ERRO MENCIONADO Selection.AutoFill Destination:=Cells(ult_lin, 3) 'POSSÍVEL PONTO DE ERRO, POIS NÃO CONSIGO USAR ult_lin COM OBJETO RANGE. ' deixar somente registros exclusivos For Each cell In Worksheets("Sheet").Range("A1").CurrentRegion If Cells <> "" Then AdvancedFilter Action:=xlFilterInPlace, Unique:=True 'não sei qual range botar aqui no inicio para completar o comando a lado End If Next End Sub
Muito obrigada!
errata
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.