none
FÓRMULA PARA IMPEDIR O LANÇAENTO DE NÚMEROS REPETIDOS RRS feed

  • Pergunta

  • Boa tarde pessoal,

     

    Tenho uma planilha em excel 2010, em que varios departamentos da empresa lança dados na mesma.

    Esta é uma planilha para controle de não conformidades e cada dia é lançado em um UserForm RNC's com números sequenciais já existentes e manualmente.

    O problema é que o primeiro departamento que lança os dados está lançando RNC's com números repetidos e isso gera erros na visualização do relatório principal.

     

    Espero ter explicado bem.

    Se alguém tiver como me ajudar...

     

    Obrigado,

    Leonardo Oliveira.

    sexta-feira, 16 de março de 2012 19:59

Respostas

  • Você está gravando a RNC no seu banco de dados antes de verificar se ela já existe:

    ---

    ActiveCell = Me.TXTRNC

     Dim ws As Worksheet
        Dim sTermo As String

        Set ws = ActiveSheet
        sTermo = TXTRNC


        With ws
            If LinhaDe(sTermo, .Columns("A")) > 0 Then
                MsgBox "Número de RNC já existente! Favor tentar outro número.", vbCritical, "Erro"
                Exit Sub
            End If
        End With

    ---

    Observe a forma que ficaria correta:

     Dim ws As Worksheet

        Dim sTermo As String

        Set ws = ActiveSheet
        sTermo = TXTRNC


        With ws
            If LinhaDe(sTermo, .Columns("A")) > 0 Then
                MsgBox "Número de RNC já existente! Favor tentar outro número.", vbCritical, "Erro"
                Exit Sub
            End If
        End With

    ActiveCell = Me.TXTRNC


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quarta-feira, 21 de março de 2012 20:45
    Moderador

Todas as Respostas

  • Considere que a lista de RNC's encontram-se na coluna A da Planilha ativa:

    Sub VerificaRepetido()
        Dim ws As Worksheet
        Dim sTermo As String
             
        Set ws = ActiveSheet
        sTermo = "25" '<- este é o número da RNC que não pode repetir
        
        With ws
            If LinhaDe(sTermo, .Columns("A")) > 0 Then
                MsgBox "Número de RNC já existente! Favor tentar outro número.", vbCritical, "Erro"
                Exit Sub
            End If
        End With
        
        'Caso contrário, proceder com ação de salvar.
        
    End Sub


    Private Function LinhaDe(vProcura As Variant, Optional rng As Range) As Long
        If TypeName(vProcura) = "Range" And rng Is Nothing Then
            Set rng = vProcura.EntireColumn
        End If
        With rng
            Set rng = .Find(vProcura, .Cells(1), xlValues, xlWhole, xlRows, xlNext, True)
            If Not rng Is Nothing Then
                LinhaDe = rng.Row
            Else
                LinhaDe = 0
            End If
        End With
    End Function


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    segunda-feira, 19 de março de 2012 00:45
    Moderador
  • Oh Benzadeus,

    Quase isso cara.

    É que os números de RNC são gerados, não são fixos.

    Exemplo:    sTermo = "25" '<- este é o número da RNC que não pode repetir

    Não sei se é um problema, mais todos os dados são lançados em um UserForm.

    Obrigado,

    Leonardo.

    terça-feira, 20 de março de 2012 19:50
  • Sim, eu havia entendido isso. É para você usar algo como:

    sTermo = txtRNC

    , considerando que txtRNC é um controle do tipo TextBox.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    terça-feira, 20 de março de 2012 19:55
    Moderador
  • Cara,

    Quando coloquei o código de verificar rnc repetida, esta dando o erro:

    Esta dando o msbox de rnc repetida para qualquer número de Rnc que lanço.

    Deixei o arquivo no endereço abaixo:

    http://www.4shared.com/office/mvD5urhc/file.html

    Obrigado, Leonardo Oliveira.

    quarta-feira, 21 de março de 2012 19:33
  • Você está gravando a RNC no seu banco de dados antes de verificar se ela já existe:

    ---

    ActiveCell = Me.TXTRNC

     Dim ws As Worksheet
        Dim sTermo As String

        Set ws = ActiveSheet
        sTermo = TXTRNC


        With ws
            If LinhaDe(sTermo, .Columns("A")) > 0 Then
                MsgBox "Número de RNC já existente! Favor tentar outro número.", vbCritical, "Erro"
                Exit Sub
            End If
        End With

    ---

    Observe a forma que ficaria correta:

     Dim ws As Worksheet

        Dim sTermo As String

        Set ws = ActiveSheet
        sTermo = TXTRNC


        With ws
            If LinhaDe(sTermo, .Columns("A")) > 0 Then
                MsgBox "Número de RNC já existente! Favor tentar outro número.", vbCritical, "Erro"
                Exit Sub
            End If
        End With

    ActiveCell = Me.TXTRNC


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quarta-feira, 21 de março de 2012 20:45
    Moderador
  • Agora sim esta perfeito,

    Desculpa a falta de jeito com minhas explicações. É que a planilha tem muitas informações e acho meio complexa.

    Mais ela esta funcionando muito bem agora...

    Tenho muita coisa ainda para aprender de vba . . .

    Muito obrigado,

    Leonardo.

    quinta-feira, 22 de março de 2012 02:18