Foto de Washington T.
Washington há 18 minutos
Enviada pelo
Site

Criei uma planilha para controle de frequência de pessoal no

Criei uma planilha para controle de frequência de pessoal no formato de um calendário, que muda as informações conforme o ano e o mês. A planilha vem com um campo para escolha do setor de trabalho, que automaticamente, trás na coluna ao lado do calendário, a lista dos nomes dos funcionários. Dentro do calendário, para cada funcionário, coloquei duas linhas com os períodos da manhã e da tarde, onde serão realizados cadastros com diferentes siglas, como por exemplo: PÇ (presença); FT (falta), FE (férias), etc., com mudanças de cor para cada código de forma automática. Comecei a esbarrar em dificuldades, na hora que, por exemplo: escolho um setor (automaticamente vem o pessoal que trabalha no setor); escolho o ano (automaticamente os dias da semana se ajustam no calendário conforme o mês que já está aparente); escolho o mês (automaticamente se ajusta os dias da semana no calendário); e faço o lançamento das diferentes situações dos funcionário (presença, falta, férias, etc.). Porém, não consigo salvar estas informações, de forma que, por exemplo, quando eu mudo o setor, e são trocados os nomes dos funcionário, os campos fiquem vazios para novos cadastros, e se eu selecionar o setor anterior, onde já havia cadastrado, as informações retornassem à tela do calendário, com todas as informações, conforme foram cadastradas anteriormente. Qual o procedimento, com o uso de VBA, para automatizar este cadastro de funcionários, de forma que retornem as informações cadastradas anteriormente, conforme mudo o setor, o ano e/ou o mês?
Minerva IA
Inteligência Artificial do Profes
Respondeu há 17 minutos

Para resolver o seu problema usando VBA no Excel, você pode criar um sistema que armazena os dados de frequência em uma planilha separada e utiliza macros para preencher automaticamente a planilha de calendário com as informações corretas ao mudar de setor, ano ou mês. Abaixo está um esboço de como você poderia estruturar isso:

  1. Estrutura da Planilha:
  2. Crie uma nova planilha, por exemplo, chamada "Data", onde você armazenará os registros de frequência.
  3. Nesta planilha, suas principais colunas podem ser: Setor, Ano, Mês, Funcionário, Dia, Período, Código.
  4. Cada linha corresponderá a uma entrada única de frequência para cada funcionário, dia e período.

  5. Usando VBA:

  6. Salvar Dados: Crie uma macro que, ao mudar o setor, ano ou mês, salva todas as informações atuais do calendário na planilha "Data".

  7. Carregar Dados: Crie uma macro que, ao mudar o setor, ano ou mês, carrega as informações da planilha "Data" de volta para o seu calendário.

  8. Exemplo de Código VBA:

Sub SaveData()
    Dim wsData As Worksheet
    Dim wsCalendar As Worksheet
    Dim lastRow As Long
    Dim setor As String
    Dim ano As Long
    Dim mes As Long
    Dim nomeFuncionario As String
    Dim dia As Integer
    Dim periodo As String
    Dim codigo As String

    ' Defina as suas planilhas
    Set wsData = ThisWorkbook.Sheets("Data")
    Set wsCalendar = ThisWorkbook.Sheets("Calendar") ' Mude para o nome real da sua planilha

    ' Limpa os dados antigos para o setor, ano e mês selecionados
    setor = wsCalendar.Range("Setor").Value
    ano = wsCalendar.Range("Ano").Value
    mes = wsCalendar.Range("Mes").Value
    With wsData
        .Rows("2:" & .Rows.Count).ClearContents
    End With

    lastRow = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row + 1

    ' Loop através do calendário para salvar os dados
    ' Ajuste esses números para corresponder às suas configurações de planilha
    For dia = 1 To 31
        For Each cell In wsCalendar.Range("A1:A10") ' Ajuste o range
            nomeFuncionario = cell.Offset(0, 0).Value
            periodo = cell.Offset(0, 1).Value
            codigo = cell.Offset(0, 2).Value

            ' Salva apenas se houver um código válido
            If codigo <> "" Then
                With wsData
                    .Cells(lastRow, 1).Value = setor
                    .Cells(lastRow, 2).Value = ano
                    .Cells(lastRow, 3).Value = mes
                    .Cells(lastRow, 4).Value = nomeFuncionario
                    .Cells(lastRow, 5).Value = dia
                    .Cells(lastRow, 6).Value = periodo
                    .Cells(lastRow, 7).Value = codigo
                    lastRow = lastRow + 1
                End With
            End If
        Next cell
    Next dia
End Sub

Sub LoadData()
    Dim wsData As Worksheet
    Dim wsCalendar As Worksheet
    Dim setor As String
    Dim ano As Long
    Dim mes As Long
    Dim row As Long
    Dim lastRow As Long

    ' Defina as suas planilhas
    Set wsData = ThisWorkbook.Sheets("Data")
    Set wsCalendar = ThisWorkbook.Sheets("Calendar") ' Mude para o nome real da sua planilha

    setor = wsCalendar.Range("Setor").Value
    ano = wsCalendar.Range("Ano").Value
    mes = wsCalendar.Range("Mes").Value

    ' Limpa o calendário atual
    wsCalendar.Range("CalendarRange").ClearContents ' Mude para o intervalo real

    lastRow = wsData.Cells(wsData.Rows.Count, 1).End(xlUp).Row

    ' Loop através dos dados armazenados para carregar as informações
    For row = 2 To lastRow
        With wsData
            If .Cells(row, 1).Value = setor And _
               .Cells(row, 2).Value = ano And _
               .Cells(row, 3).Value = mes Then
                  ' Carregue as informações de volta para a planilha de calendário
                  ' Ajuste de acordo com a estrutura da sua planilha
            End If
        End With
    Next row
End Sub
  1. Automatização:
  2. Essas macros podem ser chamadas automaticamente ao mudar de setor, ano ou mês usando eventos como Worksheet_Change ou botões dedicados.

  3. Notas Adicionais:

  4. Ajuste os intervalos de célula e os nomes das planilhas para corresponder à sua configuração.
  5. Teste suas macros em um ambiente seguro para garantir que tudo funcione como esperado antes de aplicá-las a dados reais.

Com esses passos, suas informações de frequência devem ser armazenadas e recuperadas conforme necessário, mantendo a integridade dos dados ao mudar de setor, ano ou mês.

Minerva IA já respondeu

Envie você também uma dúvida grátis
Ver resposta

Envie uma dúvida grátis

Resposta na hora da Minerva IA e de professores particulares
Enviar dúvida
Professor Vilson B.
Identidade verificada
  • CPF verificado
  • E-mail verificado
Respondeu há 1 minuto
Contatar Vilson Rafael

Washington,

Nesse caso é melhor você solicitar uma aula.

Um professor já respondeu

Envie você também uma dúvida grátis
Ver resposta
Minerva IA
do Profes
Respostas na hora
100% no WhatsApp
Envie suas dúvidas pelo App. Baixe agora
Precisa de outra solução? Conheça
Aulas particulares Encontre um professor para combinar e agendar aulas particulares Buscar professor