Notifications
Clear all

Inclusão de registro condicional com VBA

6 Posts
2 Usuários
0 Reactions
1,790 Visualizações
(@edcurita)
Posts: 67
Trusted Member
Topic starter
 

Olá amigos,

Estou aqui novamente pedindo ajuda. Tenho certeza que após concluir esse pequeno projeto, até poderei ajudar alguém com menor conhecimento do que eu, mas até então, preciso entender o que acontece. São muitas funções do VBA. Já procurei por um "dicionário" para tentar entender melhor as funções, mas ainda não achei. Ainda. Como sei que vocês são fera no assunto, quero pedir ajuda para mais este passo.
Meu projeto é o de controle de talões de cheque. Inicia registrando os lotes (PLAN3, frmTalonario). Então eu insiro, por exemplo, do cheque 1 (txtInicial) ao 10(txtFinal). Na PLAN 2 ele vai criar na coluna A cada folha separada: 1, 2, 3, 4, 5, 6, 7, 8,9 e 10. Esse procedimento tem duas finalidades: uma para imprimir na listbox a relação de todas as folhas que já foram usadas e as que ainda estão em branco, na ordem e confirmar que aquela folha existe. A segunda é para verificar se quando estou incluindo um novo lote, inicial ou final já não foram incluídos anteriormente. No exemplo que dei, se eu digitar um segundo lote que comece, por exemplo de 10 ao 20, ele já me informe que inicial ou final já existe e eu decido se quero cadastrar ou não. Ficaria mais ou menos assim:
msgbox "Cheuqe inicial ou final já existe, deseja continuar". Se eu disser que sim, ele inclui o registro. Pode até mesmo duplicar, pois poderei mais tarde efetuar uma correção.
Esse lançamento será todo feito pela PLAN3.
Estou anexando meu projeto. É muito simples, como disse, estou engatinhando.
Muito obrigado pela ajuda novamente.
Edmilson

 
Postado : 16/07/2013 12:23 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

Vou mover sua postagem para o local correto!!!

Para manter o fórum organizado, lembre se de na próxima vez, postar de acordo com os subfórum!

Att

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

 
Postado : 16/07/2013 4:18 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Ed, só para entender melhor antes de continuarmos.

Se eu digitar um segundo lote que comece, por exemplo de 10 ao 20, ele já me informe que inicial ou final já existe e eu decido se quero cadastrar ou não
Ficaria mais ou menos assim:
msgbox "Cheuqe inicial ou final já existe, deseja continuar"

Para as duas questões acima, ou posteriores, as condições de verificação seria, já existem : "inicial OU final" ou "inicial E final" ?

Poderá tambem existir a possibilidade de estarem incluindo algum valor entre o "Inicial e Final", ou seja, tenho de "1 a 10", poderei ter de "8 a 18" ?

Se for para verificar por uma variavel somente é mais simples.

Fico no aguardo.

[]s

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

 
Postado : 16/07/2013 4:58 pm
(@edcurita)
Posts: 67
Trusted Member
Topic starter
 

Olá Mauro,

Obrigado pelo retorno. A intenção é ver se existe alguma duplicidade. Quando eu cadastro o lote abre em PLAN2 a relação individual. Quando eu cadastrar outro lote, deve percorrer a coluna A e verificar se existe inicial ou final. Digamos que eu cadastre de 1 a 10. Na PLAN2 irá abrir 10 linhas de 1 a 10 e em PLAN3 irá abrir uma linha com 1 e 10. Eu poderia cadastrar um lote que fosse de 8 a 15, por exemplo. Se a verificação fosse em PLAN3, passaria, mas como a verificação é em PLAN2, dirá que já existe um número, no caso o 8. Eu esqueci de mencionar, eu consegui fazer funcionar isso. Quando cadastrava dava certinho, embora tivesse feito um código muito "feio". Mas daí eu fui para a opção de alterar ou excluir. Quando aparecia o número do lote, dizia que já existia, eu não tinha colocado uma opção de deseja mesmo (alterar ou excluir). Depois que me dei conta do que tinha que fazer, não consegui fazer mais. Isso é pela minha falta de prática. Agora, sempre que alguma coisa ddá certo, tô fazendo uma cópia.
Obrigado novamente pela ajuda.
Edmilson

 
Postado : 16/07/2013 5:21 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Veja se consegue adaptar as rotinas abaixo:

1°) Crie um novo Modulo e cole as instruções abaixo :

Public sCel
Public sLocaliza As Boolean


Public Function ProcuraRefId(ByVal RefId As String) As String
    Dim iLin As Long
    Dim sCol As Long
    
    sLocaliza = False

    Dim wsDados As Worksheet
    Set wsDados = Worksheets("LANCAMENTO")
    
    iLin = 2 'Linha 2
    sCol = 1 'Coluna 1
    
    With wsDados
    
        Do While Not IsEmpty(.Cells(iLin, sCol))

            If .Cells(iLin, sCol).Value = RefId Then
             
                sLocaliza = True 'Verdadeiro se encontrado
                sCel = .Cells(iLin, sCol).Address(False, False)
                
                Exit Do 'Sai do Loop se encontrar
            
            End If
            
            'Incrementa a linha
            iLin = iLin + 1
            
        Loop
        
    End With

End Function

Depois cole as instruções abaixo no frmTalonario :

Private Sub txtInicial_Exit(ByVal Cancel As MSForms.ReturnBoolean)
   Dim RefId As String
    
   'Valor a pesquisar
   RefId = txtInicial
    
    If RefId = "" Then
        MsgBox "Digite um Valor Inválido"
        txtInicial.SetFocus
        Exit Sub

    Else
        'Chama a Function
        ProcuraRefId (RefId)
    End If
    
    If sLocaliza = True Then
        MsgBox "Referencia :- " & RefId & " Localizada em :- " & sCel
    Else
        MsgBox "Referencia não Localizada"
    End If

End Sub


Private Sub txtFinal_Exit(ByVal Cancel As MSForms.ReturnBoolean)
   Dim RefId As String
    
   'Valor a pesquisar
   RefId = txtFinal
    
    If RefId = "" Then
        MsgBox "Digite um Valor Inválido"
        txtFinal.SetFocus
        Exit Sub

    Else
        'Chama a Function
        ProcuraRefId (RefId)
    End If
    
    If sLocaliza = True Then
        MsgBox "Referencia :- " & RefId & " Localizada em :- " & sCel
    Else
        MsgBox "Referencia não Localizada"
    End If

End Sub

Provavelmente terá de fazer alguns ajustes, qq duvida retorne.

Você pode ver um exemplo utilizando a Function Pesquisar baixando o anexo no tópico abaixo :
Function Pesquisar InputBox e TextBox
viewtopic.php?f=21&t=2877

[]s

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

 
Postado : 16/07/2013 6:09 pm
(@edcurita)
Posts: 67
Trusted Member
Topic starter
 

Olá Mauro,

Você está me ajudando novamente. Eu não usei o seu código mas usei a sua lógica. Eu fiz uma referência na saída da célula e deu certo. Meu jeito muito muito mais simplório do que o seu mas funcionou (pelo menos agora). Não sei se lá na frente vai dar alguma problema. Eu já tinha formatado meu projeto mas com os teste vi que muita coisa faltou. Arruma uma coisa estraga outra. Mas eu quero chegar até o fim para entender o que eu fiz. Baixei o conteúdo que orientou, muito obrigado. Vou ler com atenção. tenho certeza que vai me ajudar. Vou copiar abaixo a forma como fiz. (não vale dar risada).

Grande abraço e obrigado novamente.

Private Sub txtInicial_Exit(ByVal Cancel As MSForms.ReturnBoolean)

inicial = txtInicial

If Application.WorksheetFunction.CountIf(Plan2.Columns(1), txtInicial.Text) <> 0 Then

msin = MsgBox("Esta folha já foi cadastrada, deseja continuar?", vbOKCancel, "PRIMEIRA FOLHA")
If msin = 2 Then
txtInicial.Text = ""

End If
End If

 
Postado : 17/07/2013 12:47 pm