Página 1 de 1

Gerar código automático

Enviado: 29 Abr 2015 às 21:05
por Sandman
Boa noite pessoal,

Estou tentando elaborar uma planilha, porem estou com algumas dificuldades, seguinte, preciso de uma forma de gerar um código novo para cada produto cadastrado, quanto a geração de código tranquilo, usei uma função maximo para pegar o maior valor da coluna codigo, ou seja, o ultimo que foi gerado e acrescento +1, porem eu precisaria que esses códigos fossem igual em um banco de dados com chave primaria, ou seja, precisaria que eles fossem unicos, assim, se eu adicionar um produto que ficou com o codigo 4, e logo depois apagar esse registro, preciso que o proximo seja gerado com o codigo 5, em banco de dados é facil resolver isso, mas aqui não tive uma ideia ainda de como fazer isso, alguem teria alguma ideia ae?

Desde já muito obrigado :D

grande abraço e viva o Excel \o/

Re: Gerar código automático

Enviado: 29 Abr 2015 às 23:19
por alexandrevba
Boa noite!!

Assim como em outra postagem minha ainda hoje, você vai fazer uma verificação.
Código: Selecionar todos
If Application.WorksheetFunction.CountIf(Worksheets("Plan1").Range("A1:A10"), Criterio) > 0 Then 
        MsgBox ("Duplicados!") 
    End If 
Att

Re: Gerar código automático

Enviado: 30 Abr 2015 às 00:09
por duds
Boa noite pessoal,

Primeiramente, alexandre de acordo com o que ele falou, acho que esse metodo que voce usou mais cedo no meu topico geraria um pequeno problema, se ele verificasse o último registro e usasse o mesmo de base para um novo registro, caso esse último registro fosse apagado, haveriam dois registros com o mesmo código, por isso acredito que possa ser de um jeito diferente!
alexandrevba escreveu:Boa noite!!

Assim como em outra postagem minha ainda hoje, você vai fazer uma verificação.
Código: Selecionar todos
If Application.WorksheetFunction.CountIf(Worksheets("Plan1").Range("A1:A10"), Criterio) > 0 Then 
        MsgBox ("Duplicados!") 
    End If 
Att

Então resolvi fazer uma planilha de exemplo, caso fosse para gravar o valor em uma variável, assim que você fechasse o excel a variável resetaria, então usei um método que o Laennder me ensinou em um tópico meu há um certo tempo.
A variável carrega o valor escrito em uma célula que se encontra em uma aba da planilha e então atualizará esse valor com o valor da variável +1. Essa planilha serviria apenas pra isso e para evitar que esse número seja alterado, mude a propriedade da planilha para xlSheetVeryHidden, então essa planilha só poderá ser visualizada se for alterada a propriedade na área de VBA. Pode até colocar senha no VBA para evitar que quem não tenha a senha altere tal propriedade.
Segue em anexo um exemplo apenas com a parte de salvar esse valor, caso queira que eu ensine a fazer o resto, me avise e terei o prazer em mostrar!

Gerar código automático

Enviado: 30 Abr 2015 às 09:20
por Sandman
obrigado pessoal por tentar ajudar, mas ainda to lutando para resolver, duds o esquema que vc fez eu até entendi, mas ele não funciona como eu preciso que funcione, o valor vai sendo incrementado, porem se eu apagar esse valor, por exemplo rodei até o 3, caso eu apague e clique novamente ele ira começar do 1 novamente, e é exatamente isso que não pode acontecer, preciso que o numero gerado seja unico, ou seja foi cadastrado com o numero 3 e depois de algum tempo ou até mesmo logo após o cadastro se tal registro for excluido o proximo já deve ser o 4 entendeu.... quando eu chegar em casa eu postarei aqui a planilha para ver se voces conseguem me ajudar...mas mesmo assim vlew mesmo ;)

ahhh e alexandre, obrigado tambem por tentar ajudar, mas pelo que entendi da sua função ela só me avisaria se ja existe numeros duplicados e não é isso que eu preciso, preciso justamente de algo que controle para que não ocorra duplicações...mas mesmo assim agradeço...

abraço
e viva o excel \o/

Gerar código automático

Enviado: 30 Abr 2015 às 09:32
por laennder
Sandman, eu quando fiz algo semelhante sempre criava uma lista separada com o nome de todas as minhas tabelas, e o seu valor de 'Auto Incremento', daí que ia criar um novo registro, eu buscava esse valor na lista para o ID do registro, e aumentava um no valor. O valor nunca irá se repetir.

Re: Gerar código automático

Enviado: 30 Abr 2015 às 14:28
por duds
Sandman escreveu:obrigado pessoal por tentar ajudar, mas ainda to lutando para resolver, duds o esquema que vc fez eu até entendi, mas ele não funciona como eu preciso que funcione, o valor vai sendo incrementado, porem se eu apagar esse valor, por exemplo rodei até o 3, caso eu apague e clique novamente ele ira começar do 1 novamente, e é exatamente isso que não pode acontecer, preciso que o numero gerado seja unico, ou seja foi cadastrado com o numero 3 e depois de algum tempo ou até mesmo logo após o cadastro se tal registro for excluido o proximo já deve ser o 4 entendeu.... quando eu chegar em casa eu postarei aqui a planilha para ver se voces conseguem me ajudar...mas mesmo assim vlew mesmo ;)

ahhh e alexandre, obrigado tambem por tentar ajudar, mas pelo que entendi da sua função ela só me avisaria se ja existe numeros duplicados e não é isso que eu preciso, preciso justamente de algo que controle para que não ocorra duplicações...mas mesmo assim agradeço...

abraço
e viva o excel \o/

Certo sandman, eu entendi isso por isso comentei, coloque essa célula em uma planilha que não será mexida, alterando a sua preferência para xlSheetVeryHidden e então esse valor nunca será apagado. Dai quando você for adaptar à sua macro, você pode utilizar aquele valor, pois ele nunca será alterado!

Entendeu?

Re: Gerar código automático

Enviado: 30 Abr 2015 às 14:52
por Sandman
duds escreveu: Certo sandman, eu entendi isso por isso comentei, coloque essa célula em uma planilha que não será mexida, alterando a sua preferência para xlSheetVeryHidden e então esse valor nunca será apagado. Dai quando você for adaptar à sua macro, você pode utilizar aquele valor, pois ele nunca será alterado!

Entendeu?
Hmmm entendi na teoria, mas na pratica acho que não sei fazer isso :lol:
vc poderia me ajudar ? quando eu chegar em casa, posso postar a planilha aqui pra vc dar uma olhada, pode ser?

desde já muito obrigado
abraço ;)

Gerar código automático

Enviado: 30 Abr 2015 às 15:14
por duds
Perfeito, posso adaptar o código para você!

Re: Gerar código automático

Enviado: 04 Jun 2015 às 13:35
por FelipeGualberto
Código: Selecionar todos
'Em qual linha começam os dados?
Const DATA_BEGIN_ROW As Long = 2

'Qual dever ser o primeiro ID?

Const FORMULA_MASK As String = "=IFERROR(MATCH(TRUE,SMALL(List,ROW(List)-ROW(FirstCell)+1)-(ROW(List)-ROW(FirstCell)+1)>0,0),MAX(List)+1)"

Sub Main()
    Dim newID As Long
    
    newID = GetNewID(ThisWorkbook.Worksheets("Plan1").Columns("A"))
    Debug.Print newID
End Sub

Private Function GetNewID(pColumn As Range) As Long
    Dim lastRow As Long
    Dim newFormula As String
    Dim newID As Long
    Dim targetColumn As Long
    Dim workRange As Range
    Dim ws As Worksheet
    
    targetColumn = pColumn.Column
    Set ws = pColumn.Worksheet
    lastRow = ws.Cells(ws.Rows.Count, targetColumn).End(xlUp).Row
    
    If lastRow = 1 Then
        newID = 1
    Else
        Set workRange = ws.Cells(DATA_BEGIN_ROW, targetColumn).Resize(lastRow - DATA_BEGIN_ROW + 1)
        newFormula = FORMULA_MASK
        newFormula = Replace(newFormula, "List", workRange.Address)
        newFormula = Replace(newFormula, "FirstCell", workRange(1).Address)
        newID = Evaluate(newFormula)
    End If
    
    GetNewID = newID
End Function