Notifications
Clear all

Alterar Registro em TextBox

10 Posts
4 Usuários
0 Reactions
1,575 Visualizações
(@paulocezar)
Posts: 70
Estimable Member
Topic starter
 

Galera,
Tô sofrendo aqui com esse problema e não consigo resolver, peço ajuda aos amigos desse forum. Tenho um forlmulario com 3 combobox e 2 textbox. Chamo os registros através do combobox "LOCALIZAR OS" e após alteração dos dados nos campos citados, clico em atualizar, atualiza todos os campos menos o combobox "SITUAÇÃO". Há dias que tento identificar o erro e não consigo. Peço a alguém que tenha mais conhecimento do que eu que me ajude, por favor.

Obs.: Planilha em anexo.

Paulo Cezar.

 
Postado : 09/03/2018 8:14 am
fcarlosc
(@fcarlosc)
Posts: 453
Honorable Member
 

Boa-tarde

With CADASTROSERVIÇOS
Sheets("BancodeDados").Cells(lLinha, 2).Value = .LISTA_ELETRICISTA1
Sheets("BancodeDados").Cells(lLinha, 3).Value = .LISTA_ELETRICISTA2
Sheets("BancodeDados").Cells(lLinha, 4).Value = .DATA_ENTREGA

'Sheets("BancodeDados").Cells(lLinha, 5).Value = .NUMERO_OS <--- Está pesquisando pelo nº da OS, no caso esse é o seu "ID" e não a sequencia da coluna A.
Deixe essa linha como comentário e teste.

Sheets("BancodeDados").Cells(lLinha, 6).Value = .STATUS

Att,

Francisco

 
Postado : 09/03/2018 9:38 am
(@paulocezar)
Posts: 70
Estimable Member
Topic starter
 

Ótimo Francisco,
A alteração ficou funcionando. Aproveitando peço que corrija também outra coisa que não consegui. No final do código tem essa formula a seguir:

totaldelinhas = Worksheets("BancodeDados").UsedRange.Rows.Count
CAIXA_LOCALIZA.RowSource = "BancodeDados!e2:e" & totaldelinhas

Perceba que o ROWSOURCE BancodeDados!e2:e, o correto é e8:e. Só que quando faço essa alteração a formula não chama os dados, porque??

 
Postado : 09/03/2018 11:36 am
(@srobles)
Posts: 231
Estimable Member
 

paulocezar,

Experimente :

totaldelinhas = Worksheets("BancodeDados").Cells(Rows.Count, 1).End(xlUp).Row
CAIXA_LOCALIZA.RowSource = "BancodeDados!e8:e" & totaldelinhas

Abs

Espero ter ajudado.

Abs.

Saulo Robles

 
Postado : 09/03/2018 11:52 am
(@paulocezar)
Posts: 70
Estimable Member
Topic starter
 

srobles,
Não deu certo, do mesmo jeito.

Fico no aguardo.

Paulo Cezar

 
Postado : 09/03/2018 12:51 pm
(@srobles)
Posts: 231
Estimable Member
 

paulocezar,

Veja se as alterações no seu modelo, atendem sua necessidade.

Abs

Espero ter ajudado.

Abs.

Saulo Robles

 
Postado : 09/03/2018 3:29 pm
(@paulocezar)
Posts: 70
Estimable Member
Topic starter
 

Valeu srobles, muito obrigado, ficou no grau 10. Se me mostrasse na formula onde eu estava errando ficaria melhor ainda, pois eu aprenderia e não errada na próxima vez.

Mais uma vez muito obrigado pela ajuda.

Paulo Cezar.

 
Postado : 15/03/2018 12:34 pm
(@srobles)
Posts: 231
Estimable Member
 

paulocezar,

Ok, vamos lá :
Primeiramente, alterei a rotina no evento Initialize do formulário, que era:

    totaldelinhas = Worksheets("BancodeDados").UsedRange.Rows.Count
    CAIXA_LOCALIZA.RowSource = "BancodeDados!e2:e" & totaldelinhas

Por esta :

    With CAIXA_LOCALIZA
        .Clear
    
        Dim linhaAtual As Long
        linhaAtual = 8
        ThisWorkbook.Sheets("BancodeDados").Activate
        While ActiveSheet.Cells(linhaAtual, 5) <> ""
            .AddItem ActiveSheet.Cells(linhaAtual, 5)
            linhaAtual = linhaAtual + 1
        Wend
        
    End With
    
    limparCampos

Que faz basicamente a mesma coisa, porém, menos suscetível á erros.

E depois, foram alteradas as rotinas contidas no ComboBox CAIXA_LOCALIZA:
Que era :

Private Sub CAIXA_LOCALIZA_Click()

totalregistro = Worksheets("BancodeDados").UsedRange.Rows.Count

For i = 2 To totalregistro

If CAIXA_LOCALIZA.ListIndex = i Then

    nome_encontrado = i
    
    LISTA_ELETRICISTA1 = Cells(i + 2, 2)
    LISTA_ELETRICISTA2 = Cells(i + 2, 3)
    DATA_ENTREGA = Cells(i + 2, 4)
    NUMERO_OS = Cells(i + 2, 5)
    STATUS = Cells(i + 2, 6)
    
    Exit Sub
End If
Next
End Sub

Que foi alterado para :

Private Sub CAIXA_LOCALIZA_Click()
    With ThisWorkbook.Sheets("BancodeDados")
        .Activate
        Dim vBusca
        Set vBusca = Nothing
        
        With .Range("A:Z")
            
            Set vBusca = .Find(CAIXA_LOCALIZA, LookIn:=xlValues, LookAt:=xlWhole)
            
            If Not vBusca Is Nothing Then
                .Range(vBusca.Address).Select
                LISTA_ELETRICISTA1 = Cells(ActiveCell.Row, 2)
                LISTA_ELETRICISTA2 = Cells(ActiveCell.Row, 3)
                DATA_ENTREGA = Cells(ActiveCell.Row, 4)
                NUMERO_OS = Cells(ActiveCell.Row, 5)
                STATUS = Cells(ActiveCell.Row, 6)
            Else
                MsgBox "OS não encontrada!", vbExclamation, "Erro"
                LISTA_ELETRICISTA1 = ""
                LISTA_ELETRICISTA2 = ""
                DATA_ENTREGA = ""
                NUMERO_OS = ""
                STATUS = ""
            End If
            
            Set vBusca = Nothing
        End With
    End With
End Sub

Que nada mais é, que a chamada da função localizar do Excel, porém, se encontrar o valor, preenche os campos com os valores da linha onde o mesmo foi encontrado e, caso contrário, limpa os campos.

E no botão 3 (Inserir OS), que era :

Private Sub CommandButton3_Click()
Application.ScreenUpdating = False

    'Cria a variavel linhavazia
Dim Irow As Long

    'Confere se o campo nome foi preenchido
If LISTA_ELETRICISTA1.Value = "" Then
If LISTA_ELETRICISTA2.Value = "" Then
MsgBox ("Os campos nomes dos eletricistas são obrigatórios")
LISTA_ELETRICISTA1.SetFocus
Exit Sub
Else
End If
    'seleciona a aba "BancodeDados"
Sheets("BancodeDados").Select

With Sheets("BancodeDados")

    'conta quantas informações foram inseridas na coluna B da aba prestacoes
Irow = .Cells(.Rows.Count, "B").End(xlUp).Row + 1
    'Insere informações da aba prestacoes
Cells(Irow, 2).Value = LISTA_ELETRICISTA1.Value
Cells(Irow, 3).Value = LISTA_ELETRICISTA2.Value
Cells(Irow, 4).Value = Format(DATA_ENTREGA.Value, "mm/dd/yyyy")
Cells(Irow, 5).Value = NUMERO_OS.Value
Cells(Irow, 6).Value = STATUS.Value


End With

    'Volta para a aba MENU
Sheets("BancodeDados").Select
End If

End Sub

E ficou assim :

Private Sub CommandButton3_Click()
Application.ScreenUpdating = False

    'Cria a variavel linhavazia
Dim Irow As Long

    'Confere se o campo nome foi preenchido
    If LISTA_ELETRICISTA1.Value = "" Or LISTA_ELETRICISTA2.Value = "" Then
        MsgBox ("Os campos nomes dos eletricistas são obrigatórios")
        LISTA_ELETRICISTA1.SetFocus
        Exit Sub
    Else
        'seleciona a aba "BancodeDados"
        Sheets("BancodeDados").Select
        
        With Sheets("BancodeDados")
        
        'conta quantas informações foram inseridas na coluna B da aba prestacoes
        Irow = .Cells(.Rows.Count, "B").End(xlUp).Row
        'Insere informações da aba prestacoes
        Cells(Irow, 2).Value = LISTA_ELETRICISTA1.Value
        Cells(Irow, 3).Value = LISTA_ELETRICISTA2.Value
        Cells(Irow, 4).Value = Format(DATA_ENTREGA.Value, "mm/dd/yyyy")
        Cells(Irow, 5).Value = NUMERO_OS.Value
        Cells(Irow, 6).Value = STATUS.Value
        
        
        End With
        
        'Volta para a aba MENU
        Sheets("BancodeDados").Select
        
    End If
Application.ScreenUpdating = True

UserForm_Initialize

End Sub

Onde apenas recarregamos o formulário ao final da rotina.

Basicamente, refiz algumas das rotinas (que ficaram mais extensas, porém com menor probabilidade á erros) que você havia feito (mais simples, porém, com maior probabilidade á erros) apenas para manipularmos os dados sem que erros pudessem ocorrer.

Espero ter ajudado e sanado suas dúvidas.

Abs

Espero ter ajudado.

Abs.

Saulo Robles

 
Postado : 15/03/2018 2:10 pm
(@paulocezar)
Posts: 70
Estimable Member
Topic starter
 

Valeu srobles, muito obrigado e até a próxima.

Paulo Cezar.

 
Postado : 19/03/2018 12:07 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Paulo Cesar

Favor acessar o link abaixo para aprender como marcar corretamente o tópico como Resolvido e também aprender a clicar na mãozinha para agradecer (pontuar) os colaboradores.

Neste tópico eu já marquei a correta.

[]s

Patropi - Moderador

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 19/03/2018 2:41 pm