Notifications
Clear all

Tipos incompatíveis

11 Posts
2 Usuários
0 Reactions
1,787 Visualizações
AMORIM123
(@amorim123)
Posts: 77
Trusted Member
Topic starter
 

Salve, salve galera do fórum.

No "cód. do "frm_rbpa" abaixxo meu objetivo é fazer com que quando digitada uma data que esteja na planilha e ao mudar o foco do txtbox os demis sejam preenchidas com as demais dados da mesma linha porém ao chamar "Private Sub txt_periodo_AfterUpdate" dentro do UserForm_Initialize() da erro de "tipo incompatíveis"; se depuro o cód. ele grifa a linha : "datPeriodo = .txt_periodo.Text"; se ao executar o form sem chama-lo em no evento initialize ele da erro de tipo incompatíveis também, porém grifa "vlrFSPA = .txt_fspa.Text"

Private Sub txt_periodo_AfterUpdate()

Dim lngPriLin, lngUltLin, lngLoopLin       As Long
Dim datPeriodo                             As Date
Dim vlrRPA, vlrFSPA                        As Currency
Dim strbusca                               As String

lngPriLin = 2

With Me
'linha grifada
datPeriodo = .txt_periodo.Text
vlrRPA = .txt_rpa.Text
vlrFSPA = .txt_fspa.Text
End With

With wshComum
    lngUltLin = .Cells(.Rows.Count, 2).End(xlUp).Row
End With

With wshComum
    For lngLoopLin = lngPriLin To lngUltLin Step 1
        strbusca = .Cells(lngLoopLin, 2)

        If strbusca = datPeriodo Then
            .Cells(lngLoopLin, 3) = CCur(vlrRPA)
            .Cells(lngLoopLin, 4) = CCur(vlrFSPA)
        End If
   Next lngLoopLin
End With

End Sub

Private Sub UserForm_Initialize()

Call txt_periodo_AfterUpdate
     
End Sub

Link da planilha: https://www.dropbox.com/s/a1dtp7tv8eocq ... .xlsm?dl=0

A quem puder ajudar agradeço!

 
Postado : 23/05/2018 11:02 am
(@srobles)
Posts: 231
Estimable Member
 

AMORIM,

Amigo, posso estar enganado, mas creio que o erro esteja ocorrendo justamente porque ao iniciar o Formulário, você está convertendo o txt_Periodo (que está em branco/nulo) em formato Data.

Adicione uma validação logo no inicio deste evento, ex :

If txt_Peridodo = "" Or IsEmpty(txt_Periodo) Then Exit Sub

Espero ter ajudado.

Abs

Espero ter ajudado.

Abs.

Saulo Robles

 
Postado : 23/05/2018 11:23 am
AMORIM123
(@amorim123)
Posts: 77
Trusted Member
Topic starter
 

srobles,

repliquei sua solução também para:

If txt_Peridodo = "" Or IsEmpty(txt_periodo) Then Exit Sub
If txt_rpa = "" Or IsEmpty(txt_rpa) Then Exit Sub
If txt_fspa = "" Or IsEmpty(txt_fspa) Then Exit Sub

Agora abre normalmente...porém meu objetivo com evento "afterupdate ": é fazer com que quando digitada uma data que esteja na planilha e ao mudar o foco do txtbox os demis sejam preenchidas com os demais dados da mesma linha do registro

 
Postado : 23/05/2018 11:39 am
(@srobles)
Posts: 231
Estimable Member
 

AMORIM,

Analisando seu modelo, pude notar que a rotina contida no evento AfterUpdate não retorna os dados de acordo com a data e sim, atualiza os valores onde a data for encontrada.
Veja:

If strbusca = datPeriodo Then
   Me.txt_rpa = CCur(.Cells(lngLoopLin, 3))
   Me.txt_fspa = CCur(.Cells(lngLoopLin, 4))
End If

Onde creio que, deveria ser :

If strbusca = datPeriodo Then
   Me.txt_rpa = CCur(.Cells(lngLoopLin, 3))
   Me.txt_fspa = CCur(.Cells(lngLoopLin, 4))
   Exit For
End If

Estou certo quanto á isso?

Abs

Espero ter ajudado.

Abs.

Saulo Robles

 
Postado : 23/05/2018 12:10 pm
AMORIM123
(@amorim123)
Posts: 77
Trusted Member
Topic starter
 

Tava observando isso, vc está certo!...ele tava atualizando os valores da planilha:

Como tava:

 If strbusca = datPeriodo Then
            .Cells(lngLoopLin, 3) = CCur(vlrRPA)
            .Cells(lngLoopLin, 4) = CCur(vlrFSPA)
        End If
   Next lngLoopLin
End With

Alteração:

strbusca = .Cells(lngLoopLin, 2)

        If strbusca = datPeriodo Then
            vlrRPA = CCur(.Cells(lngLoopLin, 3))
            vlrFSPA = CCur(.Cells(lngLoopLin, 4))
        End If
   Next lngLoopLin

apenas inverti a ordem de quem recebe quem...pois da forma que estava tava atualizando, conforme observou, porém o objetivo de preencher os dados dos demais txtbox com os demias dados dos registros da planilha não está ocorrendo.

 
Postado : 23/05/2018 12:25 pm
(@srobles)
Posts: 231
Estimable Member
 

AMORIM,

Experimente substituir a rotina contida no evento AfterUpdate pela que deixo abaixo :

    Dim lngPriLin, lngUltLin, lngLoopLin       As Long
    Dim datPeriodo                             As Date
    Dim strbusca                               As String
    
    lngPriLin = 2
    
    With Me
        On Error GoTo trataErro
        datPeriodo = .txt_periodo.Text
    End With
    
    With wshComum
        lngUltLin = .Cells(.Rows.Count, 2).End(xlUp).Row
    End With
    
    With wshComum
        For lngLoopLin = lngPriLin To lngUltLin Step 1
            strbusca = .Cells(lngLoopLin, 2)
    
            If strbusca = datPeriodo Then
                Me.txt_rpa = CCur(.Cells(lngLoopLin, 3))
                txt_fspa = CCur(.Cells(lngLoopLin, 4))
                Exit For
            End If
        Next lngLoopLin
    End With
trataErro:
If Err = Err Then
    Me.txt_periodo = ""
    Me.txt_rpa = ""
    Me.txt_fspa = ""
End If

Espero ter ajudado.

Abs

Espero ter ajudado.

Abs.

Saulo Robles

 
Postado : 23/05/2018 1:08 pm
AMORIM123
(@amorim123)
Posts: 77
Trusted Member
Topic starter
 

o srobles

ainda não deu certo... quando preencho com a data pesquisada, quando saio do "txt_periodo" ele abaga os dados deste txt e não preenche os demais

 
Postado : 23/05/2018 1:36 pm
(@srobles)
Posts: 231
Estimable Member
 

AMORIM,

Desculpe amigo. Acabei postando a rotina de testes. Favor Altere a linha :

trataErro:
If Err= Err Then

Para:

trataErro:
If Err= 13 Then

Ficando assim a rotina :

Private Sub txt_periodo_AfterUpdate()
    Dim lngPriLin, lngUltLin, lngLoopLin       As Long
    Dim datPeriodo                             As Date
    Dim strbusca                               As String
    
    lngPriLin = 2
    
    With Me
        On Error GoTo trataErro
        datPeriodo = .txt_periodo.Text
        txt_rpa = ""
        txt_fspa = ""
    End With
    
    With wshComum
        lngUltLin = .Cells(.Rows.Count, 2).End(xlUp).Row
    End With
    
    With wshComum
        For lngLoopLin = lngPriLin To lngUltLin Step 1
            strbusca = .Cells(lngLoopLin, 2)
    
            If strbusca = datPeriodo Then
                Me.txt_rpa = CCur(.Cells(lngLoopLin, 3))
                txt_fspa = CCur(.Cells(lngLoopLin, 4))
                Exit For
            End If
        Next lngLoopLin
    End With
    
trataErro:
If Err = 13 Then
    Me.txt_periodo = ""
    Me.txt_rpa = ""
    Me.txt_fspa = ""
End If
End Sub

Espero ter ajudado.

Abs

Espero ter ajudado.

Abs.

Saulo Robles

 
Postado : 23/05/2018 2:19 pm
AMORIM123
(@amorim123)
Posts: 77
Trusted Member
Topic starter
 

Srobles...show, deu tudo certo...esse "Err = 13" ler mais...poxa massa viu...obrigado meu caro!

 
Postado : 23/05/2018 2:32 pm
AMORIM123
(@amorim123)
Posts: 77
Trusted Member
Topic starter
 

srobles,

A questão inicial foi solucionada, porém teria mais uma questão pertinente a este mesmo evento que verifiquei e gostaria da sua ajuda, se não for pedri de mais :D

Seguinte a "pesquisa" proporcionada pelo evento afterupdate está ocorrendo porém meus dados na planilha não estão sendo carregados nos txtbox's no formato moeda, tentei algo como:

If strbusca = datPeriodo Then
                Format((Me.txt_rpa), "R$ #,###.00") = CCur(.Cells(lngLoopLin, 3))
                Format((Me.txt_fspa), "R$ #,###.00") = CCur(.Cells(lngLoopLin, 4))
                'Me.txt_rpa = CCur(.Cells(lngLoopLin, 3))
                'Me.txt_fspa = CCur(.Cells(lngLoopLin, 4))
                Exit For
            End If

Porém, os txtbox's são carregados sem preenchimento..como se não fosse a pesquisa não estivesse ocorrendo!

obs.: meus txtbox's já estão programados para exibir valor moeda caso seja inserido valores, porém quando se puxa os valores da pesquisa ele não vem em formato moeda

 
Postado : 24/05/2018 7:31 am
(@srobles)
Posts: 231
Estimable Member
 

AMORIM,

Substitua este trecho de código pelo que deixo abaixo :

            If strbusca = datPeriodo Then
                'Formato moeda sem os caracteres de moeda R$
                Me.txt_rpa = Format(.Cells(lngLoopLin, 3), "#,##0.00")
                Me.txt_fspa = Format(.Cells(lngLoopLin, 4), "#,##0.00")
                
                '* DESCOMENTAR AS 2 ÚLTIMAS LINHAS PARA TER O RESULTADO COM O R$ *
                
                'Formato moeda com os caracteres de moeda R$
                'Me.txt_rpa = Format(.Cells(lngLoopLin, 3), "currency")
                'Me.txt_fspa = Format(.Cells(lngLoopLin, 4), "currency")
                
                Exit For
            End If

Espero ter ajudado.

Abs

Espero ter ajudado.

Abs.

Saulo Robles

 
Postado : 24/05/2018 12:41 pm