Página 1 de 1

Erro de compilação, variável não definida. (Office 2016)

Enviado: 10 Jun 2020 às 23:32
por asrezende
Boa noite, não entendo nada de VBA porém peguei um arquivo pra ajudar um amigo que entende menos ainda, minha área é outra...

o arquivo em questão é uma planilha com várias linhas contendo dados de salário de quase 200 funcionários, cada linha uma pessoa. nessa planilha tem um botão que quando eu clico gera um relatório onde cada página gera um relatório de um funcionário, porém de repente parou de funcionar exibindo o erro acima. Pesquisei bastante, encontrei topicos falando pra declarar uma variável, tópico pra habilitar uma biblioteca no excel, atualizar vb, nada funcionou. Então como os tópicos relacionados são antigos decidi abrir outro pois nada do que vi funcionou para este arquivo em questão, não posso enviar a planilha por conter dados pessoais de funcionários porém vou enviar como a planilha está, e o código completo da geração do relatório.
Na tentativa de declarar a variável em questão que aparece na depuração, independente do tipo que informo, o erro muda para 91 e continua sem funcionar, e neste ponto não sei mais como prosseguir, ou mesmo sei se é por ai a solução. Espero que possam ajudar, é um documento importante para as atividades realizadas na empresa. Desde já agradeço a compreensão.

A planilha tem o seguinte formato:

Informações Banco de horas Comissão Bônus Extras Descontos
Nome Frente Taxa Produtividade BH Valor Valor Valor Acréscimos Valor a Pagar
1 fulano Operação R$ 64,48 160,00 160,00 0 R$ - R$ - R$ - R$ - R$ -
2 Ciclano Operação R$ 2.000 0,75 0,75 0 R$ - R$ - R$ - R$ - R$ -

A imagem mostra a página do relatorio

Imagem


abaixo o codigo vba. O erro se da na função Sub GeraRelatorio(), ao que parece na variavel relatorio, na linha Set wsPdf = relatorio
Código: Selecionar todos
Option Explicit
'Option Private Module

Sub QuebraDeLinha(irow As Integer)
    ActiveSheet.Rows(irow).PageBreak = xlPageBreakManual
End Sub

Sub testeImprimir()
Dim i As Integer
For i = 5 To 25 Step 5
    QuebraDeLinha (i)
Next
ImprimeRelatorio ("Relatorio")
End Sub

Private Sub ImprimeRelatorio(aba As String)
Dim vbSimNao As Integer
Dim ultLin As Integer
Dim myMesExp As String
Dim myAnoExp As String
Dim myDataExp As String
Dim acompanhamentoPDF As String

vbSimNao = 4
vbSimNao = MsgBox("Deseja exportar o 'Relatório de Acompanhamento'?", vbYesNo, "Exportar Relatório")
'se resposta for sim, ele exclui, sai e desmarca
If vbSimNao = 6 Then
        'Call MyDesbloqueio
        Sheets(aba).Visible = True
                ultLin = Sheets(aba).Range("B65000").End(xlUp).Row + 1 'Application.WorksheetFunction.CountA(Sheets(aba).Range("B:B"))
                
                myMesExp = Format(Month(Date), "0") 'STRING
                myAnoExp = Format(Year(Date), "0000") 'STRING
                myDataExp = myMesExp & "_" & myAnoExp 'STRING
                
                acompanhamentoPDF = ThisWorkbook.Path & "\Relatorio de Acompanhamento_" & myDataExp & ".pdf"

                Sheets(aba).Range("A1:F" & ultLin).ExportAsFixedFormat Type:=xlTypePDF, _
                Filename:=acompanhamentoPDF
                
                Sheets(aba).Visible = xlSheetVeryHidden
        
                ActiveWorkbook.Save
                MsgBox ("O 'Relatório de Acompanhamento' foi exportado para a pasta (" & ThisWorkbook.Path & ")."), _
                vbInformation, "Status da Exportação"
                
                openFolder (ThisWorkbook.Path)
                
        'Call MyBloqueio
Else
    MsgBox "Impressão cancelada pelo usuário!!", vbInformation
    Exit Sub
End If

End Sub

Sub openFolder(folder As String)
Dim Foldername As String
Foldername = folder

Shell "C:\WINDOWS\explorer.exe """ & Foldername & "", vbMaximizedFocus 'vbNormalFocus
End Sub

Sub GeraRelatorio()
Dim lista As Range
Dim ws As Worksheet
Dim wsReport As Worksheet
Dim wsPdf As Worksheet
Dim uLin  As Integer
Dim i As Integer
Dim c As Integer
Dim lMerge1 As Integer
Dim lMerge2 As Integer
Dim lMerge3 As Integer
Dim lMerge4 As Integer
Dim lImagem As Integer
Dim shape As shape
lMerge1 = 13
lMerge2 = 15
lMerge3 = 37
lMerge4 = 27
lImagem = 2

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationAutomatic

'Atribui a ws a planilha resumo
Set ws = resumo
'Atribui a wsReport a planilha resumo
Set wsReport = report
'Atribui a wsReport a planilha resumo
Set wsPdf = relatorio

wsPdf.Visible = xlSheetVisible

'Ultima Linha (Nomes)
uLin = ws.Range("b65000").End(xlUp).Row

Set lista = ws.Range("B10:B" & uLin)

'limpa wsPdf
wsPdf.Activate
wsPdf.Cells.ClearContents
wsPdf.Cells.ClearFormats

' Remove as logos do arquivo de relatório
For Each shape In wsPdf.Shapes
    shape.Delete
Next

'unmerge - desmesclar
wsReport.Range("B13:E13").UnMerge
wsReport.Range("B15:E15").UnMerge
wsReport.Range("B37:E37").UnMerge
wsReport.Range("D27:E27").UnMerge

'Largura da Coluna
wsPdf.Range("A1:F65000").Rows.AutoFit
c = 1
wsPdf.Columns(c).ColumnWidth = 1.57: c = c + 1
wsPdf.Columns(c).ColumnWidth = 20.29: c = c + 1
wsPdf.Columns(c).ColumnWidth = 20.29: c = c + 1
wsPdf.Columns(c).ColumnWidth = 20.29: c = c + 1
wsPdf.Columns(c).ColumnWidth = 20.29: c = c + 1
wsPdf.Columns(c).ColumnWidth = 1.57: c = c + 1

wsPdf.Cells.PageBreak = xlPageBreakNone

For i = 1 To lista.Count
    'Debug.Print lista(i).Value
    If lista(i).Value <> "" Then
        
            wsReport.Cells(8, 3) = lista(i).Value
        If wsReport.Range("D27").Value2 > 0 Then
            wsReport.Range("A1:F44").Copy
            wsPdf.Select
            uLin = wsPdf.Range("B65000").End(xlUp).Row + 1
            If uLin = 2 Then uLin = 1
            wsPdf.Range("A" & uLin).PasteSpecial xlPasteFormats
            wsPdf.Range("A" & uLin).PasteSpecial xlPasteValues
            'wsPdf.Range("A" & uLin).PasteSpecial xlPasteAll
            
            'Copia a Logo da ITSS
            wsReport.Shapes("logo").Copy
            ' Posiciona a logo
            wsPdf.Paste wsPdf.Range("E" & lImagem): lImagem = lImagem + 37
                            
            'Mesclar
            wsPdf.Range("B" & lMerge1 & ":E" & lMerge1).Merge '13
            wsPdf.Range("B" & lMerge2 & ":E" & lMerge2).Merge '15
            wsPdf.Range("B" & lMerge3 & ":E" & lMerge3).Merge '37
            wsPdf.Range("D" & lMerge4 & ":E" & lMerge4).Merge '27
            
            wsPdf.Range("D" & lMerge4 & ":E" & lMerge4).HorizontalAlignment = xlCenter
                    
            wsPdf.Rows(lMerge1).RowHeight = 52.5: wsPdf.Rows(lMerge2).AutoFit: wsPdf.Rows(lMerge3).RowHeight = 70.5
                    
            lMerge1 = lMerge1 + 37:    lMerge2 = lMerge2 + 37: lMerge3 = lMerge3 + 37: lMerge4 = lMerge4 + 37
            
            uLin = wsPdf.Range("B65000").End(xlUp).Row + 1
                    
            QuebraDeLinha (uLin)
        End If
       
    End If
    'copiar para a aba nova
Next

'Mesclar
    wsReport.Range("B13:E13").Merge
    wsReport.Range("B15:E15").Merge
    wsReport.Range("B37:E37").Merge
    wsReport.Range("D27:E27").Merge
ImprimeRelatorio ("Relatorio")

uLin = wsPdf.Range("B65000").End(xlUp).Row + 1
wsPdf.PageSetup.PrintArea = "$A$1:$F$" & uLin

wsReport.Activate
wsPdf.Visible = xlSheetVeryHidden

Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

PS: Enviei o arquivo porem retirei o nome e logo da empresa, bem como os nomes dos funcionários, então talvez tenha perdido alguma referencia na tabela dinamica

https://transferxl.com/06bp7wGgc4hM

Re: Erro de compilação, variável não definida. (Office 2016)

Enviado: 11 Jun 2020 às 10:55
por babdallas
wsPdf é uma variável do tipo Worksheet, ou seja, é uma planilha (aba). Foi definida nesta linha de código:
Código: Selecionar todos
Dim wsPdf As Worksheet
A planilha cujo codename se chama relatório deveria ser atribuída a este variável por causa desta linha de código:
Código: Selecionar todos
Set wsPdf = relatorio
Porém, observe que temos duas planilhas, uma cujo codename é report e outra cujo codename é resumo. Logo, não há uma planilha com codename relatório, por isso o erro.

Erro de compilação, variável não definida. (Office 2016)

Enviado: 15 Jun 2020 às 12:08
por asrezende
e o que devo fazer? Desculpe a ignorância no assunto mas devo alterar que nome a final? não entendi muito bem...

Re: Erro de compilação, variável não definida. (Office 2016)

Enviado: 15 Jun 2020 às 13:02
por babdallas
Esta linha de código deverá ser:
Código: Selecionar todos
Set wsPdf = resumo
ou
Código: Selecionar todos
Set wsPdf = report
Depende de qual planilha você deseja imprimir.

Re: Erro de compilação, variável não definida. (Office 2016)

Enviado: 15 Jun 2020 às 14:59
por asrezende
Alterei a linha com os 2 exemplos citados e da um erro de execução 9, quando mando depurar vai para o código que está na imagem em anexo.

Imagem

Obs: o arquivo a ser impresso é o da página 1, que vai ler a planilha resumo e gerar de cada linha da planilha uma página do relatório...

Re: Erro de compilação, variável não definida. (Office 2016)

Enviado: 15 Jun 2020 às 15:27
por babdallas
Veja bem, analise o código:
Código: Selecionar todos
Sheets(aba).Visible=True
Bom, aba é um parâmetro do tipo String (texto) informado quando chama a subrotina ImprimeRelatorio. No fundo ela representa o nome da planilha que será impressa.
Veja que você tem duas planilhas: uma está com nome 1 (codename = report e name = 1) a outra se chama Resumo (codename = resumo e name = Resumo).

Na subrotina testeImprimir, você chama a subrotina ImprimeRelatorio com o parâmetro "Relatorio", ou seja, a aba a ser impressa teria que ter o nome "Relatorio". Porém, como eu disse acima nenhuma das abas tem name Relatorio.
Se quiser imprimir a planilha com nome 1, então seria ser:
Código: Selecionar todos
ImprimeRelatorio "1"
Se quiser imprimir a planilha com nome Resumo, então seria ser:
Código: Selecionar todos
ImprimeRelatorio "Resumo"
Espero que tenha ficado claro.

Erro de compilação, variável não definida. (Office 2016)

Enviado: 15 Jun 2020 às 15:28
por asrezende
Alterei onde foi citado para resumo, e o nome da planilha 1 pare relatório, feito isso, imprime o arquivo mas sai em branco como se tivesse pegando dados do lugar errado, mas o erro vai para o final do arquivo, na linha wsPdf.Visible = xlSheetVeryHidden, e dá um erro em tempo de execução...
Ai quando confirmo, some a planilha relatório (anteriormente 1)

Erro de compilação, variável não definida. (Office 2016)

Enviado: 15 Jun 2020 às 15:32
por asrezende
Também tentei imprimir 1 conforme citado mas o resultado é o mesmo acima.. Continua gerando o relatório porém somente com a estrutura do relatório sem ler os dados, aparece apenas o nome do campo da tabela dinamica como se tivesse lendo do local errado...

Porém agora o erro muda, erro em tempo de execução "1004". O método 'Visible' do '_Worksheet' falhou, se clico em depurar vai pra linha wsPdf.Visible = xlSheetVeryHidden, depois some com a aba relatorio, e se confirmo na janela do erro, acontece o mesmo...

Re: Erro de compilação, variável não definida. (Office 2016)

Enviado: 15 Jun 2020 às 16:45
por babdallas
Anexe o arquivo e dia exatamente qual o resultado final que você pretende.

Re: Erro de compilação, variável não definida. (Office 2016)

Enviado: 16 Jun 2020 às 10:16
por asrezende
Certo, segue a planilha com todos os dados, retirei apenas a logomarca, nomes e contatos da empresa pois são dados confidenciais de colaboradores.

Planilha:
https://www.transfernow.net/Sc0Ji2062020

Imagem de uma página do relatório:
Imagem


O resultado que a planilha deve gerar é como na imagem em anexo, é como o relatório era impresso, cada linha da planilha resumo vira uma página do relatório, cada linha é um relatório de um colaborador, com as alterações sugeridas, até imprimiu o pdf mas sem os dados contidos na planilha resumo, e por fim apresentava o erro citado acima e a planilha de relatório some.

Re: Erro de compilação, variável não definida. (Office 2016)

Enviado: 16 Jun 2020 às 13:40
por babdallas
Deixa ver se eu entendi. Veja se os passos são esses:

1) Clicar no botão ImprimirPDF
2) Percorrer linha a linha a planilha Resumo, da linha 10 até a última linha preenchida
3) Para cada linha da planilha Resumo, atualizar a planilha 1, modificando o valor da célula C8 com o nome da linha correspondente da planilha Resumo
4) Gerar o PDF e salvar em uma pasta específica que você já definiu no código

É só isso, ou tem mais algo além disso?

VI que no código tem ajustes de tamanho de coluna, reexibe e oculta planilha, mesclar e desmesclar células, apaga e copia logo, etc. Qual a real necessidade disso? Porque não deixar um relatório com tamanho padrão, já com a logo pronta, tamanhos padrão de colunas, etc?

Erro de compilação, variável não definida. (Office 2016)

Enviado: 16 Jun 2020 às 18:28
por asrezende
E somente isso mesmo, não fui eu quem criou o arquivo, e não acho que haja necessidade disso também mas como não conheço muito da linguagem me ative no problema que a pessoa me disse, só mandei aqui pra tentar ajudar e ver se encontrava alguém que poderia solucionar o problema pra pessoa contar a usar o documento como de costume. Agradeceria muito se puder ajudar, eu não sou dessa área, só estou tentando ajudar um amigo, que também não é da área, e a pessoa que fez o arquivo infelizmente não está na empresa nem atende mais quando ligamos...

Erro de compilação, variável não definida. (Office 2016)

Enviado: 20 Jun 2020 às 07:45
por asrezende
Será que alguém pode ajudar? Pedimos ajuda aqui pois não somos da área e estamos sem ninguém pra fazer o trabalho na empresa, então achei que seria uma boa pedir num fórum grande.

Erro de compilação, variável não definida. (Office 2016)

Enviado: 20 Jun 2020 às 12:39
por fcarlosc2018
Boa tarde

Baixei sua planilha e a única coisa que fiz foi add uma aba ---relatorio (Relatorio)

Foi isso que o babdallas mencionou logo acima.

Re: Erro de compilação, variável não definida. (Office 2016)

Enviado: 20 Jun 2020 às 15:31
por babdallas
Eu não esqueci asrezende. Na semana que vem eu tento fazer.

Re: Erro de compilação, variável não definida. (Office 2016)

Enviado: 22 Jun 2020 às 08:15
por asrezende
Fizemos essa alteração mas apresenta outro erro, veja acima ai...

fcarlosc2018 escreveu:Boa tarde

Baixei sua planilha e a única coisa que fiz foi add uma aba ---relatorio (Relatorio)

Foi isso que o babdallas mencionou logo acima.

Re: Erro de compilação, variável não definida. (Office 2016)

Enviado: 22 Jun 2020 às 10:25
por babdallas
Veja se é o que deseja.

Re: Erro de compilação, variável não definida. (Office 2016)

Enviado: 22 Jun 2020 às 11:11
por Kledison
Bom dia!

verifica se irá funcionar aí, aqui gerou o PDF completo.

Imagem

Att

Re: Erro de compilação, variável não definida. (Office 2016)

Enviado: 22 Jun 2020 às 11:46
por asrezende
ainda apresentou um erro de compilação, mas alterando o nome da planilha resolveu... pode dizer se mudou mais alguma coisa no codigo? só pra deixar explanado aqui pra quem quiser aproveitar a solução
babdallas escreveu:Veja se é o que deseja.

Re: Erro de compilação, variável não definida. (Office 2016)

Enviado: 22 Jun 2020 às 11:46
por asrezende
Demorou p caramba mas funcionou sim, pode dizer o que mudou no codigo? só pra deixar explanado aqui pra quem quiser aproveitar a solução
Kledison escreveu:Bom dia!

verifica se irá funcionar aí, aqui gerou o PDF completo.

Imagem

Att