Tópicos relacionados a códigos VBA, gravação de macros, etc.
Por RonaldoFCO 06 Jan 2019 às 10:24
Membro Novato
Mensagens: 5
Reputação: 0
#39797
Preciso de uma macro que trabalhe da seguinte forma:

*Tenho duas pastas de trabalho no excel sendo uma com nome "Inspeção" e a outra "Cumprimento da Inspeção".

*A pasta Inspeção possui 3 guias, sendo que essas guias são nomeadas em função do horário de preenchimento sendo das 6 às 14horas guia "1", das 14 às 22horas a guia "2" e das 22 às 06horas a guia "3".

*Quando efetua-se o preenchimento diário de uma inspeção de um determinado equipamento dentro de um horário compreendido nos horários já mencionados, ao clicar em um botão "GERAR RELATÓRIO" existente em cada guia de preenchimento gera-se automaticamente um PDF com uma caixa de mensagem confirmando que o relatório foi gerado com sucesso. O relatório é nomeado automaticamente em função da data e hora de preenchimento (exemplo: relatorio03012019_0700).

A macro que eu preciso é uma que faça a seguinte função:

*Na pasta "Cumprimento da Inspeção", possui uma coluna com três células referente aos horário mencionados sendo B5 (06 às 14hs), B6 (14 às 22hs), e B7 (22 às 06hs);

*Na linha 1Lx31C tenho os dias de 1 a 31 referente ao mês de janeiro (descrito na célula B3) no caso;

Quando clicar no botão "GERAR RELATÓRIO" da pasta Inspeção, dependendo o dia e o horário eu preciso que uma macro fixe o valor 1 na célula da pasta Cumprimento da Inspeção referente ao mês, dia e horário da ação.

Por exemplo, quando estiver no horário das 06 às 14 horas no dia 2, fizer o preenchimento e clicar no botão pra gerar o relatório, na célula D5 da coluna do dia 2 e da linha do primeiro horário vai subir e fixar o número 1. No mesmo dia no horário das 14 às 22 horas, quando após o preenchimento clicar no botão pra gerar o relatório, automaticamente na célula D6 fixará o valor 1, e assim por diante. Conforme o Mês, Dia e horário compreendido conforme mencionado acima.

Conto com a ajuda de vocês, desde já agradeço.
Avatar do usuário
Por Jimmy 06 Jan 2019 às 12:35
Membro 4 Estrelas
Mensagens: 392
Reputação: 254
#39799
Olá Ronaldo,

Creio que fica bem difícil te ajudar sem um modelo da planilha pra acompanhar toda sua explicação.

Pode anexar um?

Jimmy San JUan
Por RonaldoFCO 17 Jan 2019 às 07:27
Membro Novato
Mensagens: 5
Reputação: 0
#40270
Bom dia,

Anexei os arquivos referente a dúvida sobre uma macro, se poder me ajudar, eu agradeço.

Att.

RonaldoFCO

Jimmy escreveu:Olá Ronaldo,

Creio que fica bem difícil te ajudar sem um modelo da planilha pra acompanhar toda sua explicação.

Pode anexar um?

Jimmy San JUan
Avatar do usuário
Por Jimmy 19 Jan 2019 às 22:22
Membro 4 Estrelas
Mensagens: 392
Reputação: 254
#40368
Olá Ronaldo,

Você tem diversos módulos criados. Apague todos, deixando apenas 1 deles. Limpe seu conteúdo

Copie o código abaixo, e cole nesse módulo.

Código: Selecionar todosSub GERARRELATORIO1TURN()
    Call GERARRELATORIO(1, Range("W4").Value)
End Sub

Sub GERARRELATORIO2TURN()
    Call GERARRELATORIO(2, Range("W4").Value)
End Sub

Sub GERARRELATORIO3TURN()
    Call GERARRELATORIO(3, Range("X4").Value)
End Sub

Sub GERARRELATORIO(Turno, Nome)
    Dim MyLocal As String
    MyLocal = "C:\Users\klrf00130719\Desktop\RELATORIO - ROTAS\"

    Arq = "CUMPRIMENTO DA INSPEÇÃO.xlsx"
    On Error Resume Next
    Set CumIns = Workbooks(Arq)
    Erro = Err
    On Error GoTo 0
    If Erro <> 0 Then
        Workbooks.Open Filename:="CUMPRIMENTO DA INSPEÇÃO.xlsx"  'D:\Usuários\Luis\Downloads\
        Set CumIns = Workbooks(Arq)
        Fechar = "S"
    End If
    Dia = Format(Now(), "dd"):   Col = Dia + 2 'Inicio na coluna 2 ("B")
    Mes = Format(Now(), "mm"):   Lin = Mes * 7 - 3 + Turno
    CumIns.Sheets("Plan1").Cells(Lin, Col).Value = 1
    If Fechar = "S" Then
        ActiveWorkbook.Save
        ActiveWorkbook.Close
    End If

'    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        MyLocal & Nome & ".pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
   
    MsgBox "Relatório  " & Nome & "  gerado com sucesso." & vbCrLf & vbCrLf & _
           "Valor 1 lançado no dia " & Dia & ", mes " & Mes & " e turno " & Turno & "."
    Set CumIns = Nothing
End Sub



Não entendi bem se o horário base pra saber em qual linha do mês lançar o 1, era o horário do relógio, ou se quem definia a linha era a planilha que acionou a macro (as 3 planilhas de turno). Fiz a macro de forma a definir a linha com base na planilha que tem o botão que acionou a macro.

Se a planilha CUMPRIMENTO DA INSPEÇÃO já estiver aberta, a macro apenas lança o valor 1 na linha e coluna respectiva, e deixa ela aberta.
Se estiver fechada, a macro abre pra lançar o 1, salva e fecha.

Teste e de retorno.

Jimmy San Juan
Por RonaldoFCO 28 Jan 2019 às 03:05
Membro Novato
Mensagens: 5
Reputação: 0
#40614
Boa noite meu amigo, tá perfeita a macro, porém eu preciso garantir a seguinte condição: quando o usuário entrar as 23 horas do dia 27/01 por exemplo, ele terá até as 07 horas da manhã do dia 28/01 para preencher a planilha de inspeção, porém quando salvar e gerar o relatório o valor 1 deverá subir no dia 27/01 no 2º turno no caso em específico (23hs às 07hs). Quando se preenche no horário das 07 às 15hs sobe o valor 1 no 3º turno e na data correspondente do preenchimento, no horário das 15 às 23hs mesma condição sendo 1º turno, e no horário das 23 às 07hs deverá subir 1 no 2º turno na data e e dentro do horário do turno para fechamento dos turnos que são 3 conforme especificado na planilha. O valor 1 deverá subir na coluna e linha dentro do horário do turno independente do preenchimento no início ou final do turno, tipo se eu entrar às 07 horas da manhã eu tenho até as 15 horas para fazer o preenchimento do relatório e gerar o mesmo, o valor 1 subirá dentro desse range de horário de turno na data do preenchimento. A macro está rodando legal, porém só esse detalhe mesmo. Desde já muito obrigado pela ajuda e disposição na resolução.
Avatar do usuário
Por Jimmy 28 Jan 2019 às 08:45
Membro 4 Estrelas
Mensagens: 392
Reputação: 254
#40616
Olá Ronaldo,

Deixa eu ver se entendi.

Os turnos de 7-15h e 15-23h estão OK. O preenchimento do turno 23-07h precisa ajuste. Ele pode ser feito23:30h por exemplo, e deve ser lançado nesse mesmo dia, porém, se for preenchido 3:00h por exemplo, deve ser lançado no dia anterior, que foi o dia de início do turno. É isso?

Dúvida. Se o operador clicou no botão da pasta “RIO - 1° TURNO” às 10 da manhã. O 1 deve ser lançado no turno 1, que foi a planilha que acionou a macro, ou no turno 2 pelo horário do relógio?