Foto de Nadja F.
Nadja há 1 ano
Enviada pelo
Site

Tabela produção vba

Prezados, boa tarde.

Estou com um formulário para cadastro de produções diárias feito pelo VBA. Ele é preenchido diariamente por 12 pessoas, às vezes simultaneamente. Entretanto, acontece de às vezes um cadastro sobrepor o outro. Exemplo, as 12 pessoas cadastram a produção, mas ficam registradas apenas 9. Poderiam me auxiliar?

OBS.: a planilha é bloqueada para edição, eles podem apenas cadastrar a produção, clicando no botão que criei pela guia Desenvolvedor (controle ActiveX).

Aqui está o código:

Private Sub CBSalvar_Click()

On Error GoTo Erro


If TData = "" Or THora = "" Or TNome = "" Or TAtividade = "" Or TRecebido = "" Or TProdução = "" Or TPendência = "" Or TMotivo = "" Then
MsgBox "Precisa preencher todos os campos", vbCritical, "ERRO"
Exit Sub
End If

Dim Data As Date
Data = TData.Value

Dim Linha As Double

Linha = 1

With Planilha2

    Do
    
    Linha = Linha + 1
        
    Loop Until .Cells(Linha, 2).Value = ""
    
.Cells(Linha, 2).Value = TData
.Cells(Linha, 3).Value = THora
.Cells(Linha, 4).Value = TNome.Text
.Cells(Linha, 5).Value = TAtividade.Text
.Cells(Linha, 6).Value = TRecebido.Text
.Cells(Linha, 7).Value = TProdução.Text
.Cells(Linha, 8).Value = TPendência.Text
.Cells(Linha, 9).Value = TMotivo.Text
.Cells(Linha, 10).Value = TPrazo.Text

Call Limpar

End With

MsgBox "Produção Salva com sucesso", vbInformation, "SALVAR"
Exit Sub

Erro:
MsgBox "Erro!", vbCritical, "ERRO!"


End Sub


Private Sub UserForm_Initialize()

TData = VBA.Date
THora = VBA.Time

End Sub

 

Sub Limpar()

TData = ""
TNome = ""
TAtividade = ""
TRecebido = ""
TProdução = ""
TPendência = ""
TMotivo = ""

End Sub

 

 

2 respostas
Professor Vinícius W.
Identidade verificada
  • CPF verificado
  • E-mail verificado
Respondeu há 1 ano
Contatar Vinícius

Parece que o problema que você está enfrentando é que às vezes os registros de produção estão sendo sobrescritos por outros registros quando várias pessoas estão cadastrando simultaneamente. Esse problema ocorre porque o código não está lidando adequadamente com a busca da próxima linha vazia para inserir os dados.

Uma solução para evitar que os registros sejam sobrepostos é utilizar uma variável para armazenar o próximo número de linha disponível na planilha. Dessa forma, cada pessoa que preencher o formulário irá encontrar uma linha vazia e evitará a sobreposição.

Tente fazer assim:

Private Sub CBSalvar_Click()
    On Error GoTo Erro
    
    If TData = "" Or THora = "" Or TNome = "" Or TAtividade = "" Or TRecebido = "" Or TProdução = "" Or TPendência = "" Or TMotivo = "" Then
        MsgBox "Precisa preencher todos os campos", vbCritical, "ERRO"
        Exit Sub
    End If
    
    Dim Data As Date
    Data = TData.Value
    
    Dim Linha As Double
    Dim Planilha As Worksheet
    Set Planilha = ThisWorkbook.Worksheets("Planilha2") ' Substitua "Planilha2" pelo nome correto da planilha
    
    Linha = Planilha.Cells(Planilha.Rows.Count, 2).End(xlUp).Row + 1
    
    With Planilha
        .Cells(Linha, 2).Value = TData
        .Cells(Linha, 3).Value = THora
        .Cells(Linha, 4).Value = TNome.Text
        .Cells(Linha, 5).Value = TAtividade.Text
        .Cells(Linha, 6).Value = TRecebido.Text
        .Cells(Linha, 7).Value = TProdução.Text
        .Cells(Linha, 8).Value = TPendência.Text
        .Cells(Linha, 9).Value = TMotivo.Text
        .Cells(Linha, 10).Value = TPrazo.Text
    End With
    
    Call Limpar
    
    MsgBox "Produção Salva com sucesso", vbInformation, "SALVAR"
    Exit Sub
    
Erro:
    MsgBox "Erro!", vbCritical, "ERRO!"
End Sub

Um professor 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 Marco S.
Respondeu há 1 ano
Contatar Marco Antonio

prezado aluno...acredito essa dúvida ser referente à programação....abraços

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