Notifications
Clear all

Conferindo Duplicatas

2 Posts
1 Usuários
0 Reactions
558 Visualizações
(@jancamara)
Posts: 0
New Member
Topic starter
 

Olá,

estou tentando fazer um userForm onde haverá três campos (um comboBox e dois textBox), e um dos botões será para catalogar os dados inputados, mas antes disso quero que a macro confira se esse algum desses valores já não foi catalogado.

Este é o código da botão catalogar

Private Sub cbCAT_Click()

    'CONFERE SE NÃO HÁ CAMPOS VAZIOS NO FORMULÁRIO
     If Trim(Me.comboRange) = "" Then
      MsgBox ("Favor inserir Range do aparelho.")
      ElseIf Trim(Me.tbNS) = "" Then
       MsgBox ("Favor inserir Nº de Série do aparelho.")
       ElseIf Trim(Me.tbNP) = "" Then
        MsgBox ("Favor inserir Nº de Patrimônio do aparelho. Caso não exista, favor providenciar tag e colar.")
     Else
     
           'DESCE ATÉ A PRIMEIRA CÉLULA VAZIA DA PRIMEIRA COLUNA
            Worksheets("Cello").Range("A1").Select
            Dim i As Integer
             i = 0
            Do While ActiveCell.Value <> ""
             ActiveCell.Offset(1, 0).Select
                          
                    'PROCURA POR DUPLICATAS E ENCERRA SUB EM CASO POSITIVO
                     If ActiveCell.Offset(0, 4).Value = Me.tbNS Then
                        MsgBox ("Nº de Série já catalogado na linha " & i + 1 & ".")
                        GoTo Err
                     ElseIf ActiveCell.Offset(0, 5).Value = Me.tbNP Then
                        MsgBox ("Nº de Patriônio já catalogado na linha " & i + 1 & ".")
                        GoTo Err
                     End If
                        
             i = i + 1
            Loop
            
       'PREENCHE LINHA VAZIA COM DADOS DE INPUT
        ActiveCell.Value = i
        ActiveCell.Offset(0, 1).Value = "DATALOGGER"
        ActiveCell.Offset(0, 2).Value = "CELLO"
        ActiveCell.Offset(0, 3).Value = Me.comboRange.Value
        ActiveCell.Offset(0, 4).Value = Me.tbNS.Value
        ActiveCell.Offset(0, 5).Value = Me.tbNP.Value
       'FORMATA CÉLULAS PREENCHIDAS
        Worksheets("Cello").Range("A2:F2").Copy
        Worksheets("Cello").Range(ActiveCell, ActiveCell.Offset(0, 5)).Select
        Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False
             
             MsgBox ("o item foi catalogado na linha " & i)
             
     End If
 
Err:
                        
End Sub

Ela até se comporta conforme o esperado, mas acaba por ser inconstante... Para testar eu deliberadamente preencho com duplicatas, e peço para catalogar. Algumas vezes ela me indica a duplicata como quero, mas em outras ocasiões ela cataloga mesmo sendo duplicata. Ainda não reparei qual é o fator que causa a variação, mas talvez algum programador mais experiente (coisa que estou longe de ser, como deve dar pra ver pelo código) consiga reparar lendo o código, ou já tenha passado por alguma experiência parecida.

Agradeço desde já!

PS.: Antes ela simplesmente não reconhecia nada, mas melhorou quando transformei todas as células da planilha em formato texto... talvez essa informação seja útil, sei lá...

 
Postado : 16/07/2015 8:39 am
(@jancamara)
Posts: 0
New Member
Topic starter
 

Outra possibilidade que estou tentando pra evitar duplicatas é:

'BUSCA SE EXISTE N/S IGUAL
                With Worksheets("Cello").Range("celloNS")
                Set rngNS = .Cells.Find(What:=tbNS, _
                            After:=.Cells(.Cells.Count), _
                            LookIn:=xlValues, _
                            LookAt:=xlWhole, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlNext, _
                            MatchCase:=False)
                End With
               'SE EXISTIR ENCERRA SUB
                  If Not (tbNS Is Nothing) Then
                    MsgBox ("NS já catalogado na linha " & rngNS.Offset(0, -4).Value)
                    GoTo Err
                End If

Quando é realmente uma duplicata o código funciona certinho, mas se for algo novo ele trava na linha "MsgBox ("NS já catalogado na linha " & rngNS.Offset(0, -4).Value)" e me indica "erro em tempo de execução 91", a variável do obj ou do "With" não foi definida...

 
Postado : 16/07/2015 11:29 am